import variables from 'config/variables'; import { useState } from 'react'; import { useT } from 'contexts'; import Modal from 'react-modal'; import EventBus from 'utils/eventbus'; import { MdAddLink } from 'react-icons/md'; import { AddModal } from 'components/Elements/AddModal'; import { Button } from 'components/Elements'; import { Row, Content, Action } from 'components/Layout/Settings/Item'; import { getTitleFromUrl, isValidUrl } from 'utils/links'; import { QuickLink } from 'features/quicklinks/options/QuickLink'; function AppsOptions({ appsEnabled }) { const t = useT(); const [appsModalInfo, setAppsModalInfo] = useState({ newLink: false, edit: false, items: JSON.parse(localStorage.getItem('applinks')), urlError: '', iconError: '', editData: null, }); const addLink = async (name, url, icon) => { const data = JSON.parse(localStorage.getItem('applinks')); if (!url.startsWith('http://') && !url.startsWith('https://')) { url = 'https://' + url; } if (url.length <= 0 || isValidUrl(url) === false) { return setAppsModalInfo((oldState) => ({ ...oldState, urlError: t('widgets.quicklinks.url_error'), })); } if (icon.length > 0 && isValidUrl(icon) === false) { return setAppsModalInfo((oldState) => ({ ...oldState, iconError: t('widgets.quicklinks.icon_error'), })); } data.push({ name: name || (await getTitleFromUrl(url)), url, icon: icon || '', key: Math.random().toString(36).substring(7) + 1, }); localStorage.setItem('applinks', JSON.stringify(data)); setAppsModalInfo({ newLink: false, edit: false, items: data, urlError: '', iconError: '', }); EventBus.emit('refresh', 'navbar'); variables.stats.postEvent('feature', 'App link add'); }; const startEditLink = (data) => { setAppsModalInfo((oldState) => ({ ...oldState, edit: true, editData: data, })); }; const editLink = async (og, name, url, icon) => { const data = JSON.parse(localStorage.getItem('applinks')); const dataobj = data.find((i) => i.key === og.key); dataobj.name = name || (await getTitleFromUrl(url)); dataobj.url = url; dataobj.icon = icon || ''; localStorage.setItem('applinks', JSON.stringify(data)); setAppsModalInfo((oldState) => ({ ...oldState, items: data, edit: false, newLink: false, })); EventBus.emit('refresh', 'navbar'); }; const deleteLink = (key, event) => { event.preventDefault(); // remove link from array const data = JSON.parse(localStorage.getItem('applinks')).filter((i) => i.key !== key); localStorage.setItem('applinks', JSON.stringify(data)); setAppsModalInfo((oldState) => ({ ...oldState, items: data, })); EventBus.emit('refresh', 'navbar'); variables.stats.postEvent('feature', 'App link delete'); }; return ( <>