diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useFilteredObjectMetadataItems.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useFilteredObjectMetadataItems.ts index 966260562..80899b47b 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/useFilteredObjectMetadataItems.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/useFilteredObjectMetadataItems.ts @@ -3,6 +3,7 @@ import { useRecoilValue } from 'recoil'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { isWorkflowRelatedObjectMetadata } from '@/object-metadata/utils/isWorkflowRelatedObjectMetadata'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; +import { useCallback, useMemo } from 'react'; import { FeatureFlagKey } from '~/generated-metadata/graphql'; export const useFilteredObjectMetadataItems = () => { @@ -12,13 +13,22 @@ export const useFilteredObjectMetadataItems = () => { FeatureFlagKey.IsWorkflowEnabled, ); - const isWorkflowToBeFiltered = (nameSingular: string) => { - return !isWorkflowEnabled && isWorkflowRelatedObjectMetadata(nameSingular); - }; + const isWorkflowToBeFiltered = useCallback( + (nameSingular: string) => { + return ( + !isWorkflowEnabled && isWorkflowRelatedObjectMetadata(nameSingular) + ); + }, + [isWorkflowEnabled], + ); - const activeObjectMetadataItems = objectMetadataItems.filter( - ({ isActive, isSystem, nameSingular }) => - isActive && !isSystem && !isWorkflowToBeFiltered(nameSingular), + const activeObjectMetadataItems = useMemo( + () => + objectMetadataItems.filter( + ({ isActive, isSystem, nameSingular }) => + isActive && !isSystem && !isWorkflowToBeFiltered(nameSingular), + ), + [isWorkflowToBeFiltered, objectMetadataItems], ); const alphaSortedActiveObjectMetadataItems = activeObjectMetadataItems.sort( diff --git a/packages/twenty-front/src/modules/settings/data-model/graph-overview/components/SettingsDataModelOverviewEffect.tsx b/packages/twenty-front/src/modules/settings/data-model/graph-overview/components/SettingsDataModelOverviewEffect.tsx index 829e2adb7..d22061d8e 100644 --- a/packages/twenty-front/src/modules/settings/data-model/graph-overview/components/SettingsDataModelOverviewEffect.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/graph-overview/components/SettingsDataModelOverviewEffect.tsx @@ -2,9 +2,8 @@ import dagre from '@dagrejs/dagre'; import { useTheme } from '@emotion/react'; import { Edge, Node } from '@xyflow/react'; import { useEffect } from 'react'; -import { useRecoilValue } from 'recoil'; -import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; +import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; import { isDefined } from 'twenty-shared'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; @@ -18,11 +17,9 @@ export const SettingsDataModelOverviewEffect = ({ setNodes, }: SettingsDataModelOverviewEffectProps) => { const theme = useTheme(); - const objectMetadataItems = useRecoilValue(objectMetadataItemsState); + const { activeObjectMetadataItems: items } = useFilteredObjectMetadataItems(); useEffect(() => { - const items = objectMetadataItems.filter((x) => !x.isSystem && x.isActive); - const g = new dagre.graphlib.Graph(); g.setGraph({ rankdir: 'LR' }); g.setDefaultEdgeLabel(() => ({})); @@ -98,7 +95,7 @@ export const SettingsDataModelOverviewEffect = ({ setNodes(nodes); setEdges(edges); - }, [objectMetadataItems, setEdges, setNodes, theme]); + }, [items, setEdges, setNodes, theme]); return <>; };