Enable workflow in lab (#9997)

Refresh of `objectmetadataitems` was not happening fast enough. Page was
breaking when enabling the feature flag. Instead of not storing worklow
objects in state, we will use the feature flag to block on read. This
way we avoid race conditions

<img width="1511" alt="Capture d’écran 2025-02-04 à 14 11 56"
src="https://github.com/user-attachments/assets/912cc59a-f422-48ab-84b7-7fdd7bbc35c1"
/>
This commit is contained in:
Thomas Trompette
2025-02-04 15:25:04 +01:00
committed by GitHub
parent 53b51c8bba
commit 2368dad9ad
9 changed files with 111 additions and 277 deletions

View File

@ -2,16 +2,10 @@ import { FIND_MANY_OBJECT_METADATA_ITEMS } from '@/object-metadata/graphql/queri
import { useApolloMetadataClient } from '@/object-metadata/hooks/useApolloMetadataClient';
import { isAppWaitingForFreshObjectMetadataState } from '@/object-metadata/states/isAppWaitingForFreshObjectMetadataState';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { isWorkflowSubObjectMetadata } from '@/object-metadata/utils/isWorkflowSubObjectMetadata';
import { mapPaginatedObjectMetadataItemsToObjectMetadataItems } from '@/object-metadata/utils/mapPaginatedObjectMetadataItemsToObjectMetadataItems';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
import { useRecoilCallback } from 'recoil';
import {
FeatureFlagKey,
ObjectMetadataItemsQuery,
} from '~/generated-metadata/graphql';
import { ObjectMetadataItemsQuery } from '~/generated-metadata/graphql';
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
type FetchPolicy = 'network-only' | 'cache-first';
@ -20,9 +14,6 @@ export const useRefreshObjectMetadataItems = (
fetchPolicy: FetchPolicy = 'cache-first',
) => {
const client = useApolloMetadataClient();
const isWorkflowEnabled = useIsFeatureEnabled(
FeatureFlagKey.IsWorkflowEnabled,
);
const refreshObjectMetadataItems = async () => {
const result = await client.query<ObjectMetadataItemsQuery>({
@ -36,15 +27,7 @@ export const useRefreshObjectMetadataItems = (
pagedObjectMetadataItems: result.data,
});
const filteredObjectMetadataItems = objectMetadataItems.filter((object) => {
return (
isWorkflowEnabled ||
(object.nameSingular !== CoreObjectNameSingular.Workflow &&
!isWorkflowSubObjectMetadata(object.nameSingular))
);
});
replaceObjectMetadataItemIfDifferent(filteredObjectMetadataItems);
replaceObjectMetadataItemIfDifferent(objectMetadataItems);
};
const replaceObjectMetadataItemIfDifferent = useRecoilCallback(