import { t } from '@lingui/core/macro'; import { useStore } from 'jotai'; import { useCallback } from 'react'; import { SidePanelPages } from 'twenty-shared/types'; import { IconPencil } from 'twenty-ui/display'; import { commandMenuItemsDraftState } from '@/command-menu-item/server-items/edit/states/commandMenuItemsDraftState'; import { commandMenuItemsSelector } from '@/command-menu-item/server-items/common/states/commandMenuItemsSelector'; import { activeCustomizationPageLayoutIdsState } from '@/layout-customization/states/activeCustomizationPageLayoutIdsState'; import { isLayoutCustomizationModeEnabledState } from '@/layout-customization/states/isLayoutCustomizationModeEnabledState'; import { navigationMenuItemsDraftState } from '@/navigation-menu-item/common/states/navigationMenuItemsDraftState'; import { navigationMenuItemsSelector } from '@/navigation-menu-item/common/states/navigationMenuItemsSelector'; import { filterWorkspaceNavigationMenuItems } from '@/navigation-menu-item/common/utils/filterWorkspaceNavigationMenuItems'; import { useNavigateSidePanel } from '@/side-panel/hooks/useNavigateSidePanel'; import { isSidePanelOpenedState } from '@/side-panel/states/isSidePanelOpenedState'; import { sidePanelPageState } from '@/side-panel/states/sidePanelPageState'; export const useEnterLayoutCustomizationMode = () => { const store = useStore(); const { navigateSidePanel } = useNavigateSidePanel(); const enterLayoutCustomizationMode = useCallback(() => { const isLayoutCustomizationModeAlreadyEnabled = store.get( isLayoutCustomizationModeEnabledState.atom, ); if (isLayoutCustomizationModeAlreadyEnabled) { return; } const prefetchNavigationMenuItems = store.get( navigationMenuItemsSelector.atom, ); const workspaceNavigationMenuItems = filterWorkspaceNavigationMenuItems( prefetchNavigationMenuItems, ); store.set(navigationMenuItemsDraftState.atom, workspaceNavigationMenuItems); const persistedCommandMenuItems = store.get(commandMenuItemsSelector.atom); store.set(commandMenuItemsDraftState.atom, persistedCommandMenuItems); store.set(activeCustomizationPageLayoutIdsState.atom, []); store.set(isLayoutCustomizationModeEnabledState.atom, true); const isSidePanelOpened = store.get(isSidePanelOpenedState.atom); const currentSidePanelPage = store.get(sidePanelPageState.atom); if ( isSidePanelOpened && currentSidePanelPage === SidePanelPages.CommandMenuDisplay ) { navigateSidePanel({ page: SidePanelPages.CommandMenuEdit, pageTitle: t`Edit actions`, pageIcon: IconPencil, resetNavigationStack: true, }); } }, [navigateSidePanel, store]); return { enterLayoutCustomizationMode }; };