import { CommandMenuContext, type CommandMenuContextType, } from '@/command-menu-item/contexts/CommandMenuContext'; import { commandMenuItemsSelector } from '@/command-menu-item/states/commandMenuItemsSelector'; import { doesCommandMenuItemMatchObjectMetadataId } from '@/command-menu-item/utils/doesCommandMenuItemMatchObjectMetadataId'; import { doesCommandMenuItemMatchPageLayoutId } from '@/command-menu-item/utils/doesCommandMenuItemMatchPageLayoutId'; import { doesCommandMenuItemMatchPageType } from '@/command-menu-item/utils/doesCommandMenuItemMatchPageType'; import { currentPageLayoutIdState } from '@/page-layout/states/currentPageLayoutIdState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useMemo } from 'react'; import { type CommandMenuContextApi } from 'twenty-shared/types'; import { evaluateConditionalAvailabilityExpression } from 'twenty-shared/utils'; type CommandMenuContextProviderContentProps = { displayType: CommandMenuContextType['displayType']; containerType: CommandMenuContextType['containerType']; children: React.ReactNode; commandMenuContextApi: CommandMenuContextApi; }; export const CommandMenuContextProviderContent = ({ displayType, containerType, children, commandMenuContextApi, }: CommandMenuContextProviderContentProps) => { const commandMenuItems = useAtomStateValue(commandMenuItemsSelector); const currentPageLayoutId = useAtomStateValue(currentPageLayoutIdState); const filteredCommandMenuItems = useMemo(() => { const currentObjectMetadataItemId = commandMenuContextApi.objectMetadataItem.id; return commandMenuItems .filter( doesCommandMenuItemMatchObjectMetadataId(currentObjectMetadataItemId), ) .filter(doesCommandMenuItemMatchPageType(commandMenuContextApi.pageType)) .filter(doesCommandMenuItemMatchPageLayoutId(currentPageLayoutId)) .filter((item) => evaluateConditionalAvailabilityExpression( item.conditionalAvailabilityExpression, commandMenuContextApi, ), ) .sort( (firstItem, secondItem) => firstItem.position - secondItem.position, ); }, [commandMenuItems, commandMenuContextApi, currentPageLayoutId]); return ( {children} ); };