refactor: metadata store cleanup, SSE unification, mock metadata loading & login redirect fix (#18651)

## Summary
- **SSE unification**: Replaced 11 individual SSE effect components with
a single generic `MetadataStoreSSEEffect`
- **Metadata store cleanup**: Merged `metadataCollectionHashesState`
into `metadataStoreState` (currentCollectionHash / draftCollectionHash
per entity), moved `objectMetadataItemsSelector` to `object-metadata`
domain, converted `navigationMenuItemsState` to a derived selector
- **Naming clarity**: Renamed `isAppMetadataReadyState` →
`isMinimalMetadataReadyState`, `MetadataGater` → `MinimalMetadataGater`,
`useIsLogged` → `useHasAccessTokenPair`,
`patchMetadataStoreFromSSEEvent` now takes named object params
- **Mock metadata loading**: Added `generate-navigation-menu-items.ts`
script, rewrote `useLoadMockedMinimalMetadata` to load full
objects/fields/indexes/views/navItems from generated mock data, enabling
proper sign-in background rendering (table columns, view picker,
navigation)
- **Login/logout transitions**: `MinimalMetadataLoadEffect` manages
mocked↔real metadata transitions based on auth state,
`MainContextStoreProvider` computes context on auth pages for view
picker support
- **Login redirect fix**: `handleLoadWorkspaceAfterAuthentication` now
re-enables `isAppEffectRedirectEnabled` after `loadCurrentUser()`
completes, fixing the blocked post-login navigation
- **Dead code removal**: Deleted `useRefreshPageLayouts`,
`useApplyPageLayouts`, `useStaleMetadataEntities`,
`metadataCollectionHashesState`, and all individual SSE effects

## Test plan
- [x] Login from welcome page redirects to companies page
- [x] Logout transitions cleanly to mocked metadata on welcome page
- [x] Sign-in background shows table columns, view picker, and
navigation items
- [x] SSE events still update metadata store entries correctly
- [x] Navigation menu items persist across page refreshes
- [ ] CI: lint, typecheck, tests pass
This commit is contained in:
Charles Bochet
2026-03-16 00:38:11 +01:00
committed by GitHub
parent 06efee1eef
commit ba9aa41bba
161 changed files with 3106 additions and 4350 deletions
@@ -1,4 +1,4 @@
import { isAppMetadataReadyState } from '@/metadata-store/states/isAppMetadataReadyState';
import { isMinimalMetadataReadyState } from '@/metadata-store/states/isMinimalMetadataReadyState';
import { setTestObjectMetadataItemsInMetadataStore } from '~/testing/utils/setTestObjectMetadataItemsInMetadataStore';
import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore';
import { PageLayoutContentProvider } from '@/page-layout/contexts/PageLayoutContentContext';
@@ -37,7 +37,7 @@ const meta: Meta<typeof DashboardWidgetPlaceholder> = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
jotaiStore.set(
pageLayoutPersistedComponentState.atomFamily({
instanceId: PAGE_LAYOUT_TEST_INSTANCE_ID,
@@ -8,7 +8,7 @@ import { CatalogDecorator, type CatalogStory } from 'twenty-ui/testing';
import { currentUserWorkspaceState } from '@/auth/states/currentUserWorkspaceState';
import { ApolloCoreClientContext } from '@/object-metadata/contexts/ApolloCoreClientContext';
import { isAppMetadataReadyState } from '@/metadata-store/states/isAppMetadataReadyState';
import { isMinimalMetadataReadyState } from '@/metadata-store/states/isMinimalMetadataReadyState';
import { setTestObjectMetadataItemsInMetadataStore } from '~/testing/utils/setTestObjectMetadataItemsInMetadataStore';
import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore';
import { CoreObjectNameSingular } from 'twenty-shared/types';
@@ -281,7 +281,7 @@ export const WithNumberChart: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(widget);
jotaiStore.set(
pageLayoutPersistedComponentState.atomFamily({
@@ -368,7 +368,7 @@ export const WithGaugeChart: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(widget);
jotaiStore.set(
pageLayoutPersistedComponentState.atomFamily({
@@ -459,7 +459,7 @@ export const WithBarChart: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(widget);
jotaiStore.set(
pageLayoutPersistedComponentState.atomFamily({
@@ -553,7 +553,7 @@ export const SmallWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(widget);
jotaiStore.set(
pageLayoutPersistedComponentState.atomFamily({
@@ -651,7 +651,7 @@ export const MediumWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(widget);
jotaiStore.set(
pageLayoutPersistedComponentState.atomFamily({
@@ -749,7 +749,7 @@ export const LargeWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(widget);
jotaiStore.set(
pageLayoutPersistedComponentState.atomFamily({
@@ -843,7 +843,7 @@ export const WideWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(widget);
jotaiStore.set(
pageLayoutPersistedComponentState.atomFamily({
@@ -941,7 +941,7 @@ export const TallWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(widget);
jotaiStore.set(
pageLayoutPersistedComponentState.atomFamily({
@@ -1035,7 +1035,7 @@ export const WithManyToOneRelationFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
PageLayoutType.RECORD_PAGE,
@@ -1154,7 +1154,7 @@ export const WithOneToManyRelationFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
PageLayoutType.RECORD_PAGE,
@@ -1265,7 +1265,7 @@ export const OneToManyRelationFieldWidgetWithSeeAllButton: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
PageLayoutType.RECORD_PAGE,
@@ -1403,7 +1403,7 @@ export const OnMobile: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
PageLayoutType.RECORD_PAGE,
@@ -1501,7 +1501,7 @@ export const InSidePanel: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
PageLayoutType.RECORD_PAGE,
@@ -1660,7 +1660,7 @@ export const Catalog: CatalogStory<Story, typeof WidgetRenderer> = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
if (state === 'hover') {
jotaiStore.set(
@@ -5,7 +5,7 @@ import { MemoryRouter } from 'react-router-dom';
import { expect, userEvent, waitFor, within } from 'storybook/test';
import { ApolloCoreClientContext } from '@/object-metadata/contexts/ApolloCoreClientContext';
import { isAppMetadataReadyState } from '@/metadata-store/states/isAppMetadataReadyState';
import { isMinimalMetadataReadyState } from '@/metadata-store/states/isMinimalMetadataReadyState';
import { setTestObjectMetadataItemsInMetadataStore } from '~/testing/utils/setTestObjectMetadataItemsInMetadataStore';
import { CoreObjectNameSingular } from 'twenty-shared/types';
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
@@ -360,7 +360,7 @@ export const TextFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
companyObjectMetadataItem.id,
@@ -454,7 +454,7 @@ export const AddressFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
companyObjectMetadataItem.id,
@@ -551,7 +551,7 @@ export const NumberFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
companyObjectMetadataItem.id,
@@ -645,7 +645,7 @@ export const LinkFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
companyObjectMetadataItem.id,
@@ -739,7 +739,7 @@ export const ManyToOneRelationFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
companyObjectMetadataItem.id,
@@ -843,7 +843,7 @@ export const OneToManyRelationFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
companyObjectMetadataItem.id,
@@ -939,7 +939,7 @@ export const BooleanFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
companyObjectMetadataItem.id,
@@ -1032,7 +1032,7 @@ export const CurrencyFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
companyObjectMetadataItem.id,
@@ -1125,7 +1125,7 @@ export const EmailsFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
personObjectMetadataItem.id,
@@ -1219,7 +1219,7 @@ export const PhonesFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
personObjectMetadataItem.id,
@@ -1313,7 +1313,7 @@ export const SelectFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
opportunityObjectMetadataItem.id,
@@ -1408,7 +1408,7 @@ export const MultiSelectFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
companyObjectMetadataItem.id,
@@ -1506,7 +1506,7 @@ export const TimelineActivityRelationFieldWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
timelineActivityObjectMetadataItem.id,
@@ -1605,7 +1605,7 @@ export const ManyToOneRelationCardWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
companyObjectMetadataItem.id,
@@ -1717,7 +1717,7 @@ export const OneToManyRelationCardWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
companyObjectMetadataItem.id,
@@ -1812,7 +1812,7 @@ export const TimelineActivityRelationCardWidget: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
timelineActivityObjectMetadataItem.id,
@@ -1973,7 +1973,7 @@ export const OneToManyRelationCardWidgetWithProgressiveLoading: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
const pageLayoutData = createPageLayoutWithWidget(
widget,
companyObjectMetadataItem.id,
@@ -4,10 +4,8 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
import { MemoryRouter } from 'react-router-dom';
import { expect, waitFor, within } from 'storybook/test';
import { isAppMetadataReadyState } from '@/metadata-store/states/isAppMetadataReadyState';
import { isMinimalMetadataReadyState } from '@/metadata-store/states/isMinimalMetadataReadyState';
import { ApolloCoreClientContext } from '@/object-metadata/contexts/ApolloCoreClientContext';
import { CoreObjectNameSingular } from 'twenty-shared/types';
import { setTestObjectMetadataItemsInMetadataStore } from '~/testing/utils/setTestObjectMetadataItemsInMetadataStore';
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
import { PageLayoutContentProvider } from '@/page-layout/contexts/PageLayoutContentContext';
@@ -23,8 +21,8 @@ import { FieldsWidget } from '@/page-layout/widgets/fields/components/FieldsWidg
import { WidgetComponentInstanceContext } from '@/page-layout/widgets/states/contexts/WidgetComponentInstanceContext';
import { LayoutRenderingProvider } from '@/ui/layout/contexts/LayoutRenderingContext';
import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore';
import { coreViewsState } from '@/views/states/coreViewState';
import { type CoreViewWithRelations } from '@/views/types/CoreViewWithRelations';
import { CoreObjectNameSingular } from 'twenty-shared/types';
import { ComponentDecorator } from 'twenty-ui/testing';
import {
ViewOpenRecordIn as CoreViewOpenRecordIn,
@@ -41,6 +39,8 @@ import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMeta
import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems';
import { getMockFieldMetadataItemOrThrow } from '~/testing/utils/getMockFieldMetadataItemOrThrow';
import { getMockObjectMetadataItemOrThrow } from '~/testing/utils/getMockObjectMetadataItemOrThrow';
import { setTestCoreViewsInMetadataStore } from '~/testing/utils/setTestCoreViewsInMetadataStore';
import { setTestObjectMetadataItemsInMetadataStore } from '~/testing/utils/setTestObjectMetadataItemsInMetadataStore';
const companyObjectMetadataItem = getMockObjectMetadataItemOrThrow(
CoreObjectNameSingular.Company,
@@ -206,6 +206,39 @@ const createCoreView = (
...overrides,
});
const createViewField = (
id: string,
fieldMetadataId: string,
position: number,
viewFieldGroupId?: string,
) => ({
id,
fieldMetadataId,
position,
isVisible: true,
size: 200,
aggregateOperation: null,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
...(viewFieldGroupId !== undefined && { viewFieldGroupId }),
});
const createViewFieldGroup = (
id: string,
name: string,
position: number,
viewFields: ReturnType<typeof createViewField>[],
isVisible = true,
) => ({
id,
name,
position,
isVisible,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
viewFields,
});
const meta: Meta<typeof FieldsWidget> = {
title: 'Modules/PageLayout/Widgets/FieldsWidget',
component: FieldsWidget,
@@ -229,88 +262,38 @@ type Story = StoryObj<typeof FieldsWidget>;
export const WithViewFieldGroups: Story = {
render: () => {
const contactInfoFields = [
createViewField('vf-name', nameField.id, 0, 'group-contact-info'),
createViewField('vf-address', addressField.id, 1, 'group-contact-info'),
createViewField('vf-linkedin', linkedinField.id, 2, 'group-contact-info'),
];
const businessFields = [
createViewField('vf-employees', employeesField.id, 0, 'group-business'),
createViewField(
'vf-arr',
annualRecurringRevenueField.id,
1,
'group-business',
),
createViewField(
'vf-icp',
idealCustomerProfileField.id,
2,
'group-business',
),
];
const coreView = createCoreView({
viewFields: [...contactInfoFields, ...businessFields],
viewFieldGroups: [
{
id: 'group-contact-info',
name: 'Contact Info',
position: 0,
isVisible: true,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
viewFields: [
{
id: 'vf-name',
fieldMetadataId: nameField.id,
position: 0,
isVisible: true,
size: 200,
aggregateOperation: null,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
},
{
id: 'vf-address',
fieldMetadataId: addressField.id,
position: 1,
isVisible: true,
size: 200,
aggregateOperation: null,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
},
{
id: 'vf-linkedin',
fieldMetadataId: linkedinField.id,
position: 2,
isVisible: true,
size: 200,
aggregateOperation: null,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
},
],
},
{
id: 'group-business',
name: 'Business',
position: 1,
isVisible: true,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
viewFields: [
{
id: 'vf-employees',
fieldMetadataId: employeesField.id,
position: 0,
isVisible: true,
size: 200,
aggregateOperation: null,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
},
{
id: 'vf-arr',
fieldMetadataId: annualRecurringRevenueField.id,
position: 1,
isVisible: true,
size: 200,
aggregateOperation: null,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
},
{
id: 'vf-icp',
fieldMetadataId: idealCustomerProfileField.id,
position: 2,
isVisible: true,
size: 200,
aggregateOperation: null,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
},
],
},
createViewFieldGroup(
'group-contact-info',
'Contact Info',
0,
contactInfoFields,
),
createViewFieldGroup('group-business', 'Business', 1, businessFields),
],
});
@@ -325,8 +308,8 @@ export const WithViewFieldGroups: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(coreViewsState.atom, [coreView]);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
setTestCoreViewsInMetadataStore(jotaiStore, [coreView]);
jotaiStore.set(
pageLayoutPersistedComponentState.atomFamily({
instanceId: PAGE_LAYOUT_TEST_INSTANCE_ID,
@@ -394,36 +377,9 @@ export const WithInlineViewFields: Story = {
render: () => {
const coreView = createCoreView({
viewFields: [
{
id: 'vf-name',
fieldMetadataId: nameField.id,
position: 0,
isVisible: true,
size: 200,
aggregateOperation: null,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
},
{
id: 'vf-employees',
fieldMetadataId: employeesField.id,
position: 1,
isVisible: true,
size: 200,
aggregateOperation: null,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
},
{
id: 'vf-address',
fieldMetadataId: addressField.id,
position: 2,
isVisible: true,
size: 200,
aggregateOperation: null,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
},
createViewField('vf-name', nameField.id, 0),
createViewField('vf-employees', employeesField.id, 1),
createViewField('vf-address', addressField.id, 2),
],
});
@@ -438,8 +394,8 @@ export const WithInlineViewFields: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(coreViewsState.atom, [coreView]);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
setTestCoreViewsInMetadataStore(jotaiStore, [coreView]);
jotaiStore.set(
pageLayoutPersistedComponentState.atomFamily({
instanceId: PAGE_LAYOUT_TEST_INSTANCE_ID,
@@ -507,15 +463,7 @@ export const Empty: Story = {
render: () => {
const coreView = createCoreView({
viewFieldGroups: [
{
id: 'group-empty',
name: 'Empty Group',
position: 0,
isVisible: false,
isOverridden: false,
viewId: FIELDS_VIEW_ID,
viewFields: [],
},
createViewFieldGroup('group-empty', 'Empty Group', 0, [], false),
],
});
@@ -530,8 +478,8 @@ export const Empty: Story = {
jotaiStore,
generatedMockObjectMetadataItems,
);
jotaiStore.set(isAppMetadataReadyState.atom, true);
jotaiStore.set(coreViewsState.atom, [coreView]);
jotaiStore.set(isMinimalMetadataReadyState.atom, true);
setTestCoreViewsInMetadataStore(jotaiStore, [coreView]);
jotaiStore.set(
pageLayoutPersistedComponentState.atomFamily({
instanceId: PAGE_LAYOUT_TEST_INSTANCE_ID,