diff --git a/src/features/misc/modals/main/settings/ResetModal.jsx b/src/components/Elements/ResetModal/ResetModal.jsx
similarity index 92%
rename from src/features/misc/modals/main/settings/ResetModal.jsx
rename to src/components/Elements/ResetModal/ResetModal.jsx
index 3d78f9cd..aec4c229 100644
--- a/src/features/misc/modals/main/settings/ResetModal.jsx
+++ b/src/components/Elements/ResetModal/ResetModal.jsx
@@ -44,4 +44,6 @@ function ResetModal({ modalClose }) {
);
}
-export default memo(ResetModal);
+const MemoizedResetModal = memo(ResetModal);
+
+export { MemoizedResetModal as default, MemoizedResetModal as ResetModal };
diff --git a/src/components/Elements/ResetModal/index.jsx b/src/components/Elements/ResetModal/index.jsx
new file mode 100644
index 00000000..cf9d0b2b
--- /dev/null
+++ b/src/components/Elements/ResetModal/index.jsx
@@ -0,0 +1 @@
+export * from './ResetModal';
diff --git a/src/components/Elements/index.jsx b/src/components/Elements/index.jsx
index 73e09d1c..31a8ba4a 100644
--- a/src/components/Elements/index.jsx
+++ b/src/components/Elements/index.jsx
@@ -2,3 +2,4 @@ export * from './Button';
export * from './Tooltip';
export * from './ShareModal';
export * from './AddModal';
+export * from './ResetModal';
diff --git a/src/features/misc/modals/main/settings/sections/Advanced.jsx b/src/features/misc/modals/main/settings/sections/Advanced.jsx
index 0055083c..1e9d71e9 100644
--- a/src/features/misc/modals/main/settings/sections/Advanced.jsx
+++ b/src/features/misc/modals/main/settings/sections/Advanced.jsx
@@ -11,7 +11,7 @@ import {
import { exportSettings, importSettings } from 'utils/settings';
import { FileUpload, Text, Switch, Dropdown } from 'components/Form/Settings';
-import ResetModal from '../ResetModal';
+import { ResetModal } from 'components/Elements';
import { Header, Section, Row, Content, Action } from 'components/Layout/Settings';
diff --git a/src/features/misc/modals/main/settings/sections/QuickLinks.jsx b/src/features/misc/modals/main/settings/sections/QuickLinks.jsx
deleted file mode 100644
index fe7a05f3..00000000
--- a/src/features/misc/modals/main/settings/sections/QuickLinks.jsx
+++ /dev/null
@@ -1,273 +0,0 @@
-import variables from 'config/variables';
-import { PureComponent, createRef } from 'react';
-import { MdAddLink, MdLinkOff } from 'react-icons/md';
-import { Header, Row, Content, Action, PreferencesWrapper } from 'components/Layout/Settings';
-import { Checkbox, Dropdown } from 'components/Form/Settings';
-import { Button } from 'components/Elements';
-import Modal from 'react-modal';
-
-import AddModal from './quicklinks/AddModal';
-
-import EventBus from 'utils/eventbus';
-import QuickLink from './quicklinks/QuickLink';
-import { getTitleFromUrl, isValidUrl } from 'utils/links';
-
-export default class QuickLinks extends PureComponent {
- constructor() {
- super();
- this.state = {
- items: JSON.parse(localStorage.getItem('quicklinks')),
- showAddModal: false,
- urlError: '',
- iconError: '',
- edit: false,
- editData: '',
- };
- this.quicklinksContainer = createRef();
- }
-
- deleteLink(key, event) {
- event.preventDefault();
-
- // remove link from array
- const data = JSON.parse(localStorage.getItem('quicklinks')).filter((i) => i.key !== key);
-
- localStorage.setItem('quicklinks', JSON.stringify(data));
- this.setState({
- items: data,
- });
-
- variables.stats.postEvent('feature', 'Quicklink delete');
- }
-
- async addLink(name, url, icon) {
- const data = JSON.parse(localStorage.getItem('quicklinks'));
-
- if (!url.startsWith('http://') && !url.startsWith('https://')) {
- url = 'http://' + url;
- }
-
- if (url.length <= 0 || isValidUrl(url) === false) {
- return this.setState({
- urlError: variables.getMessage('widgets.quicklinks.url_error'),
- });
- }
-
- if (icon.length > 0 && isValidUrl(icon) === false) {
- return this.setState({
- iconError: variables.getMessage('widgets.quicklinks.url_error'),
- });
- }
-
- data.push({
- name: name || (await getTitleFromUrl(url)),
- url,
- icon: icon || '',
- key: Math.random().toString(36).substring(7) + 1,
- });
-
- localStorage.setItem('quicklinks', JSON.stringify(data));
-
- this.setState({
- items: data,
- showAddModal: false,
- urlError: '',
- iconError: '',
- });
-
- variables.stats.postEvent('feature', 'Quicklink add');
- }
-
- startEditLink(data) {
- this.setState({
- edit: true,
- editData: data,
- showAddModal: true,
- });
- }
-
- async editLink(og, name, url, icon) {
- const data = JSON.parse(localStorage.getItem('quicklinks'));
- const dataobj = data.find((i) => i.key === og.key);
- dataobj.name = name || (await getTitleFromUrl(url));
- dataobj.url = url;
- dataobj.icon = icon || '';
-
- localStorage.setItem('quicklinks', JSON.stringify(data));
-
- this.setState({
- items: data,
- showAddModal: false,
- edit: false,
- });
- }
-
- componentDidMount() {
- EventBus.on('refresh', (data) => {
- if (data === 'quicklinks') {
- if (localStorage.getItem('quicklinksenabled') === 'false') {
- return (this.quicklinksContainer.current.style.display = 'none');
- }
-
- this.quicklinksContainer.current.style.display = 'block';
-
- this.setState({
- items: JSON.parse(localStorage.getItem('quicklinks')),
- });
- }
- });
- }
-
- componentWillUnmount() {
- EventBus.off('refresh');
- }
-
- render() {
- const QUICKLINKS_SECTION = 'modals.main.settings.sections.quicklinks';
-
- const AdditionalSettings = () => {
- return (
-