diff --git a/src/components/Dashboard/Modals/SelectElement/Components/Overview/AvailableElementsOverview.tsx b/src/components/Dashboard/Modals/SelectElement/Components/Overview/AvailableElementsOverview.tsx index 555373bfa..1738568c9 100644 --- a/src/components/Dashboard/Modals/SelectElement/Components/Overview/AvailableElementsOverview.tsx +++ b/src/components/Dashboard/Modals/SelectElement/Components/Overview/AvailableElementsOverview.tsx @@ -1,27 +1,62 @@ import { Group, Space, Stack, Text, UnstyledButton } from '@mantine/core'; -import { IconBox, IconStack } from '@tabler/icons'; +import { closeModal } from '@mantine/modals'; +import { IconBox, IconBoxAlignTop, IconStack } from '@tabler/icons'; import { useTranslation } from 'next-i18next'; import { ReactNode } from 'react'; import { v4 as uuidv4 } from 'uuid'; import { useConfigContext } from '../../../../../../config/provider'; +import { useConfigStore } from '../../../../../../config/store'; import { openContextModalGeneric } from '../../../../../../tools/mantineModalManagerExtensions'; import { AppType } from '../../../../../../types/app'; import { appTileDefinition } from '../../../../Tiles/Apps/AppTile'; import { useStyles } from '../Shared/styles'; interface AvailableElementTypesProps { + modalId: string; onOpenIntegrations: () => void; onOpenStaticElements: () => void; } export const AvailableElementTypes = ({ + modalId, onOpenIntegrations: onOpenWidgets, onOpenStaticElements, }: AvailableElementTypesProps) => { const { t } = useTranslation('layout/element-selector/selector'); - const { config } = useConfigContext(); + const { config, name: configName } = useConfigContext(); + const { updateConfig } = useConfigStore(); const getLowestWrapper = () => config?.wrappers.sort((a, b) => a.position - b.position)[0]; + const onClickCreateCategory = async () => { + if (!configName) { + return; + } + + await updateConfig(configName, (previousConfig) => ({ + ...previousConfig, + wrappers: + previousConfig.wrappers.length <= previousConfig.categories.length + ? [ + ...previousConfig.wrappers, + { + id: uuidv4(), + position: previousConfig.categories.length, + }, + ] + : previousConfig.wrappers, + categories: [ + ...previousConfig.categories, + { + id: uuidv4(), + name: `Category ${previousConfig.categories.length + 1}`, + position: previousConfig.categories.length, + }, + ], + })); + + closeModal(modalId); + }; + return ( <> {t('modal.text')} @@ -82,6 +117,11 @@ export const AvailableElementTypes = ({ icon={} onClick={onOpenWidgets} /> + } + onClick={onClickCreateCategory} + /> {/*} diff --git a/src/components/Dashboard/Modals/SelectElement/SelectElementModal.tsx b/src/components/Dashboard/Modals/SelectElement/SelectElementModal.tsx index bf2836636..0f288c1ce 100644 --- a/src/components/Dashboard/Modals/SelectElement/SelectElementModal.tsx +++ b/src/components/Dashboard/Modals/SelectElement/SelectElementModal.tsx @@ -11,6 +11,7 @@ export const SelectElementModal = ({ context, id }: ContextModalProps) => { case undefined: return ( setActiveTab('integrations')} onOpenStaticElements={() => setActiveTab('static_elements')} />