import { ActionIcon, Alert, Center, createStyles, Flex, Text, useMantineTheme, } from '@mantine/core'; import { useDisclosure } from '@mantine/hooks'; import { openConfirmModal } from '@mantine/modals'; import { showNotification } from '@mantine/notifications'; import { IconAlertTriangle, IconCheck, IconCopy, IconDownload, IconTrash } from '@tabler/icons-react'; import fileDownload from 'js-file-download'; import { Trans, useTranslation } from 'next-i18next'; import { useRouter } from 'next/router'; import { useConfigContext } from '../../../../config/provider'; import { useConfigStore } from '../../../../config/store'; import { useDeleteConfigMutation } from '../../../../tools/config/mutations/useDeleteConfigMutation'; import Tip from '../../../layout/Tip'; import { CreateConfigCopyModal } from './CreateCopyModal'; export default function ConfigActions() { const router = useRouter(); const { t } = useTranslation(['settings/general/config-changer', 'settings/common', 'common']); const [createCopyModalOpened, createCopyModal] = useDisclosure(false); const { config } = useConfigContext(); const { removeConfig } = useConfigStore(); const { mutateAsync } = useDeleteConfigMutation(config?.configProperties.name ?? 'default'); if (!config) return null; const handleDownload = () => { fileDownload(JSON.stringify(config, null, '\t'), `${config?.configProperties.name}.json`); }; const handleDeletion = async () => { openConfirmModal({ title: t('modal.confirmDeletion.title'), children: ( <> } mb="md"> , code: }} /> {t('modal.confirmDeletion.text')} ), labels: { confirm: ( , code: }} /> ), cancel: t('common:cancel'), }, zIndex: 201, onConfirm: async () => { const response = await mutateAsync(); if (response.message) { showNotification({ title: t('buttons.delete.notifications.deleteFailedDefaultConfig.title'), message: t('buttons.delete.notifications.deleteFailedDefaultConfig.message'), }); return; } showNotification({ title: t('buttons.delete.notifications.deleted.title'), icon: , color: 'green', autoClose: 1500, radius: 'md', message: t('buttons.delete.notifications.deleted.message'), }); removeConfig(config?.configProperties.name ?? 'default'); router.push('/'); }, }); }; const { classes } = useStyles(); const { colors } = useMantineTheme(); return ( <> {t('buttons.download')} {t('buttons.delete.text')} {t('buttons.saveCopy')}
{t('settings/common:tips.configTip')}
); } const useStyles = createStyles(() => ({ actionIcon: { width: 'auto', height: 'auto', maxWidth: 'auto', maxHeight: 'auto', flexGrow: 1, display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', textAlign: 'center', rowGap: 10, padding: 10, }, }));