diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index ce0ff121b4..88d600fa29 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -1250,6 +1250,7 @@ export enum FeatureFlagKey { IS_PAGE_LAYOUT_ENABLED = 'IS_PAGE_LAYOUT_ENABLED', IS_POSTGRESQL_INTEGRATION_ENABLED = 'IS_POSTGRESQL_INTEGRATION_ENABLED', IS_PUBLIC_DOMAIN_ENABLED = 'IS_PUBLIC_DOMAIN_ENABLED', + IS_RECORD_PAGE_LAYOUT_ENABLED = 'IS_RECORD_PAGE_LAYOUT_ENABLED', IS_RELATION_CONNECT_ENABLED = 'IS_RELATION_CONNECT_ENABLED', IS_STRIPE_INTEGRATION_ENABLED = 'IS_STRIPE_INTEGRATION_ENABLED', IS_UNIQUE_INDEXES_ENABLED = 'IS_UNIQUE_INDEXES_ENABLED', diff --git a/packages/twenty-front/src/generated/graphql.ts b/packages/twenty-front/src/generated/graphql.ts index c7c1cf9eaa..a7638b2253 100644 --- a/packages/twenty-front/src/generated/graphql.ts +++ b/packages/twenty-front/src/generated/graphql.ts @@ -1214,6 +1214,7 @@ export enum FeatureFlagKey { IS_PAGE_LAYOUT_ENABLED = 'IS_PAGE_LAYOUT_ENABLED', IS_POSTGRESQL_INTEGRATION_ENABLED = 'IS_POSTGRESQL_INTEGRATION_ENABLED', IS_PUBLIC_DOMAIN_ENABLED = 'IS_PUBLIC_DOMAIN_ENABLED', + IS_RECORD_PAGE_LAYOUT_ENABLED = 'IS_RECORD_PAGE_LAYOUT_ENABLED', IS_RELATION_CONNECT_ENABLED = 'IS_RELATION_CONNECT_ENABLED', IS_STRIPE_INTEGRATION_ENABLED = 'IS_STRIPE_INTEGRATION_ENABLED', IS_UNIQUE_INDEXES_ENABLED = 'IS_UNIQUE_INDEXES_ENABLED', diff --git a/packages/twenty-front/src/modules/object-record/record-show/components/PageLayoutDispatcher.tsx b/packages/twenty-front/src/modules/object-record/record-show/components/PageLayoutDispatcher.tsx index 8b4b7a181d..1a01e77d9b 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/components/PageLayoutDispatcher.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/components/PageLayoutDispatcher.tsx @@ -4,7 +4,8 @@ import { RecordShowContainer } from '@/object-record/record-show/components/Reco import { RecordShowEffect } from '@/object-record/record-show/components/RecordShowEffect'; import { LayoutRenderingProvider } from '@/ui/layout/contexts/LayoutRenderingContext'; import { type TargetRecordIdentifier } from '@/ui/layout/contexts/TargetRecordIdentifier'; -import { PageLayoutType } from '~/generated/graphql'; +import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; +import { FeatureFlagKey, PageLayoutType } from '~/generated/graphql'; export const PageLayoutDispatcher = ({ targetRecordIdentifier, @@ -13,9 +14,16 @@ export const PageLayoutDispatcher = ({ targetRecordIdentifier: TargetRecordIdentifier; isInRightDrawer?: boolean; }) => { + const isRecordPageEnabled = useIsFeatureEnabled( + FeatureFlagKey.IS_RECORD_PAGE_LAYOUT_ENABLED, + ); + if ( targetRecordIdentifier.targetObjectNameSingular === - CoreObjectNameSingular.Dashboard + CoreObjectNameSingular.Dashboard || + (targetRecordIdentifier.targetObjectNameSingular === + CoreObjectNameSingular.Company && + isRecordPageEnabled) ) { return ( theme.background.primary}; @@ -55,7 +57,17 @@ const ResponsiveGridLayout = WidthProvider( Responsive, ) as React.ComponentType; +const StyledVerticalListContainer = styled.div` + display: flex; + flex-direction: column; + gap: ${({ theme }) => theme.spacing(2)}; +`; + export const PageLayoutGridLayout = () => { + const isRecordPageEnabled = useIsFeatureEnabled( + FeatureFlagKey.IS_RECORD_PAGE_LAYOUT_ENABLED, + ); + const setPageLayoutCurrentBreakpoint = useSetRecoilComponentState( pageLayoutCurrentBreakpointComponentState, ); @@ -76,20 +88,38 @@ export const PageLayoutGridLayout = () => { const { currentPageLayout } = useCurrentPageLayout(); - if (!isDefined(activeTabId) || !isDefined(currentPageLayout)) { + const activeTab = currentPageLayout?.tabs.find( + (tab) => tab.id === activeTabId, + ); + + if ( + !isDefined(activeTabId) || + !isDefined(currentPageLayout) || + !isDefined(activeTab) + ) { return null; } - const activeTabWidgets = currentPageLayout.tabs.find( - (tab) => tab.id === activeTabId, - )?.widgets; + const activeTabWidgets = activeTab.widgets; const isLayoutEmpty = !isDefined(activeTabWidgets) || activeTabWidgets.length === 0; const layouts = isLayoutEmpty ? EMPTY_LAYOUT - : pageLayoutCurrentLayouts[activeTabId] || EMPTY_LAYOUT; + : (pageLayoutCurrentLayouts[activeTabId] ?? EMPTY_LAYOUT); + + const Widgets = isLayoutEmpty ? ( +
+ +
+ ) : ( + activeTabWidgets?.map((widget) => ( +
+ +
+ )) + ); return ( <> @@ -102,43 +132,42 @@ export const PageLayoutGridLayout = () => { /> )} - : undefined - } - resizeHandles={['se']} - onLayoutChange={handleLayoutChange} - onBreakpointChange={(newBreakpoint) => - setPageLayoutCurrentBreakpoint( - newBreakpoint as PageLayoutBreakpoint, - ) - } - > - {isLayoutEmpty ? ( -
- -
- ) : ( - activeTabWidgets?.map((widget) => ( -
- -
- )) - )} -
+ + {isRecordPageEnabled && + !isPageLayoutInEditMode && + activeTab.layoutMode === 'vertical-list' ? ( + {Widgets} + ) : ( + + ) : undefined + } + resizeHandles={['se']} + onLayoutChange={handleLayoutChange} + onBreakpointChange={(newBreakpoint) => + setPageLayoutCurrentBreakpoint( + newBreakpoint as PageLayoutBreakpoint, + ) + } + > + {Widgets} + + )} ); diff --git a/packages/twenty-front/src/modules/page-layout/components/PageLayoutInitializationQueryEffect.tsx b/packages/twenty-front/src/modules/page-layout/components/PageLayoutInitializationQueryEffect.tsx index 480e9fec26..f22113f52b 100644 --- a/packages/twenty-front/src/modules/page-layout/components/PageLayoutInitializationQueryEffect.tsx +++ b/packages/twenty-front/src/modules/page-layout/components/PageLayoutInitializationQueryEffect.tsx @@ -1,4 +1,6 @@ import { FIND_ONE_PAGE_LAYOUT } from '@/dashboards/graphql/queries/findOnePageLayout'; +import { DEFAULT_PAGE_LAYOUT } from '@/page-layout/constants/DefaultPageLayout'; +import { DEFAULT_PAGE_LAYOUT_ID } from '@/page-layout/constants/DefaultPageLayoutId'; import { pageLayoutCurrentLayoutsComponentState } from '@/page-layout/states/pageLayoutCurrentLayoutsComponentState'; import { pageLayoutDraftComponentState } from '@/page-layout/states/pageLayoutDraftComponentState'; import { pageLayoutPersistedComponentState } from '@/page-layout/states/pageLayoutPersistedComponentState'; @@ -24,15 +26,20 @@ export const PageLayoutInitializationQueryEffect = ({ }: PageLayoutInitializationQueryEffectProps) => { const [isInitialized, setIsInitialized] = useState(false); + const isDefaultLayout = pageLayoutId === DEFAULT_PAGE_LAYOUT_ID; + const { data } = useQuery(FIND_ONE_PAGE_LAYOUT, { variables: { id: pageLayoutId, }, + skip: isDefaultLayout, }); - const pageLayout: PageLayout | undefined = data?.getPageLayout - ? transformPageLayout(data.getPageLayout) - : undefined; + const pageLayout: PageLayout | undefined = isDefaultLayout + ? DEFAULT_PAGE_LAYOUT + : data?.getPageLayout + ? transformPageLayout(data.getPageLayout) + : undefined; const pageLayoutPersistedComponentCallbackState = useRecoilComponentCallbackState(pageLayoutPersistedComponentState); diff --git a/packages/twenty-front/src/modules/page-layout/constants/DefaultPageLayout.ts b/packages/twenty-front/src/modules/page-layout/constants/DefaultPageLayout.ts new file mode 100644 index 0000000000..9ae322cb43 --- /dev/null +++ b/packages/twenty-front/src/modules/page-layout/constants/DefaultPageLayout.ts @@ -0,0 +1,252 @@ +import { DEFAULT_PAGE_LAYOUT_ID } from '@/page-layout/constants/DefaultPageLayoutId'; +import { type PageLayout } from '@/page-layout/types/PageLayout'; +import { PageLayoutType, WidgetType } from '~/generated/graphql'; + +/** + * Default mock PageLayout used when pageLayoutId equals DEFAULT_PAGE_LAYOUT_ID. + * This combines base record layout tabs (fields, timeline, tasks, notes, files) + * with company-specific tabs (emails, calendar). + */ +export const DEFAULT_PAGE_LAYOUT: PageLayout = { + __typename: 'PageLayout', + id: DEFAULT_PAGE_LAYOUT_ID, + name: 'Default Record Layout', + type: PageLayoutType.RECORD_PAGE, + objectMetadataId: null, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + tabs: [ + // Fields tab (position 100) + { + __typename: 'PageLayoutTab', + id: 'default-tab-fields', + title: 'Fields', + position: 100, + layoutMode: 'vertical-list', + pageLayoutId: DEFAULT_PAGE_LAYOUT_ID, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + widgets: [ + { + __typename: 'PageLayoutWidget', + id: 'default-widget-fields', + pageLayoutTabId: 'default-tab-fields', + title: 'Fields', + type: WidgetType.FIELDS, + objectMetadataId: null, + gridPosition: { + __typename: 'GridPosition', + row: 0, + column: 0, + rowSpan: 12, + columnSpan: 12, + }, + configuration: null, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + }, + ], + }, + // Timeline tab (position 200) + { + __typename: 'PageLayoutTab', + id: 'default-tab-timeline', + title: 'Timeline', + position: 200, + layoutMode: 'vertical-list', + pageLayoutId: DEFAULT_PAGE_LAYOUT_ID, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + widgets: [ + { + __typename: 'PageLayoutWidget', + id: 'default-widget-timeline', + pageLayoutTabId: 'default-tab-timeline', + title: 'Timeline', + type: WidgetType.VIEW, + objectMetadataId: null, + gridPosition: { + __typename: 'GridPosition', + row: 0, + column: 0, + rowSpan: 6, + columnSpan: 12, + }, + configuration: null, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + }, + ], + }, + // Tasks tab (position 300) + { + __typename: 'PageLayoutTab', + id: 'default-tab-tasks', + title: 'Tasks', + position: 300, + layoutMode: 'vertical-list', + pageLayoutId: DEFAULT_PAGE_LAYOUT_ID, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + widgets: [ + { + __typename: 'PageLayoutWidget', + id: 'default-widget-tasks', + pageLayoutTabId: 'default-tab-tasks', + title: 'Tasks', + type: WidgetType.VIEW, + objectMetadataId: null, + gridPosition: { + __typename: 'GridPosition', + row: 0, + column: 0, + rowSpan: 6, + columnSpan: 12, + }, + configuration: null, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + }, + ], + }, + // Notes tab (position 400) + { + __typename: 'PageLayoutTab', + id: 'default-tab-notes', + title: 'Notes', + position: 400, + layoutMode: 'vertical-list', + pageLayoutId: DEFAULT_PAGE_LAYOUT_ID, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + widgets: [ + { + __typename: 'PageLayoutWidget', + id: 'default-widget-notes', + pageLayoutTabId: 'default-tab-notes', + title: 'Notes', + type: WidgetType.VIEW, + objectMetadataId: null, + gridPosition: { + __typename: 'GridPosition', + row: 0, + column: 0, + rowSpan: 6, + columnSpan: 12, + }, + configuration: null, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + }, + ], + }, + // Files tab (position 500) + { + __typename: 'PageLayoutTab', + id: 'default-tab-files', + title: 'Files', + position: 500, + layoutMode: 'vertical-list', + pageLayoutId: DEFAULT_PAGE_LAYOUT_ID, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + widgets: [ + { + __typename: 'PageLayoutWidget', + id: 'default-widget-files', + pageLayoutTabId: 'default-tab-files', + title: 'Files', + type: WidgetType.VIEW, + objectMetadataId: null, + gridPosition: { + __typename: 'GridPosition', + row: 0, + column: 0, + rowSpan: 6, + columnSpan: 12, + }, + configuration: null, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + }, + ], + }, + // Emails tab (position 600) - Company specific + { + __typename: 'PageLayoutTab', + id: 'default-tab-emails', + title: 'Emails', + position: 600, + layoutMode: 'vertical-list', + pageLayoutId: DEFAULT_PAGE_LAYOUT_ID, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + widgets: [ + { + __typename: 'PageLayoutWidget', + id: 'default-widget-emails', + pageLayoutTabId: 'default-tab-emails', + title: 'Emails', + type: WidgetType.VIEW, + objectMetadataId: null, + gridPosition: { + __typename: 'GridPosition', + row: 0, + column: 0, + rowSpan: 6, + columnSpan: 12, + }, + configuration: null, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + }, + ], + }, + // Calendar tab (position 700) - Company specific + { + __typename: 'PageLayoutTab', + id: 'default-tab-calendar', + title: 'Calendar', + position: 700, + layoutMode: 'vertical-list', + pageLayoutId: DEFAULT_PAGE_LAYOUT_ID, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + widgets: [ + { + __typename: 'PageLayoutWidget', + id: 'default-widget-calendar', + pageLayoutTabId: 'default-tab-calendar', + title: 'Calendar', + type: WidgetType.VIEW, + objectMetadataId: null, + gridPosition: { + __typename: 'GridPosition', + row: 0, + column: 0, + rowSpan: 6, + columnSpan: 12, + }, + configuration: null, + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), + deletedAt: null, + }, + ], + }, + ], +}; diff --git a/packages/twenty-front/src/modules/page-layout/constants/DefaultPageLayoutId.ts b/packages/twenty-front/src/modules/page-layout/constants/DefaultPageLayoutId.ts new file mode 100644 index 0000000000..dc46202365 --- /dev/null +++ b/packages/twenty-front/src/modules/page-layout/constants/DefaultPageLayoutId.ts @@ -0,0 +1 @@ +export const DEFAULT_PAGE_LAYOUT_ID = 'DEFAULT_LAYOUT_ID'; diff --git a/packages/twenty-front/src/modules/page-layout/hooks/useRecordPageLayoutId.ts b/packages/twenty-front/src/modules/page-layout/hooks/useRecordPageLayoutId.ts index 821d18b73d..9c9081a583 100644 --- a/packages/twenty-front/src/modules/page-layout/hooks/useRecordPageLayoutId.ts +++ b/packages/twenty-front/src/modules/page-layout/hooks/useRecordPageLayoutId.ts @@ -1,5 +1,6 @@ import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { type ObjectRecord } from '@/object-record/types/ObjectRecord'; +import { DEFAULT_PAGE_LAYOUT_ID } from '@/page-layout/constants/DefaultPageLayoutId'; import { type TargetRecordIdentifier } from '@/ui/layout/contexts/TargetRecordIdentifier'; import { isDefined } from 'twenty-shared/utils'; @@ -28,6 +29,6 @@ export const useRecordPageLayoutId = ({ // TODO: implement a default layout return { - pageLayoutId: 'DEFAULT_LAYOUT_ID', + pageLayoutId: DEFAULT_PAGE_LAYOUT_ID, }; }; diff --git a/packages/twenty-front/src/modules/page-layout/types/PageLayoutTab.ts b/packages/twenty-front/src/modules/page-layout/types/PageLayoutTab.ts index d279c70d87..cf3dd8f133 100644 --- a/packages/twenty-front/src/modules/page-layout/types/PageLayoutTab.ts +++ b/packages/twenty-front/src/modules/page-layout/types/PageLayoutTab.ts @@ -5,4 +5,8 @@ import { export type PageLayoutTab = Omit & { widgets: PageLayoutWidget[]; + /** + * Only available behind IS_RECORD_PAGE_LAYOUT_ENABLED for now. + */ + layoutMode?: 'grid' | 'vertical-list'; }; diff --git a/packages/twenty-front/src/modules/page-layout/widgets/components/WidgetContentRenderer.tsx b/packages/twenty-front/src/modules/page-layout/widgets/components/WidgetContentRenderer.tsx index 86ae9aa875..e543059114 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/components/WidgetContentRenderer.tsx +++ b/packages/twenty-front/src/modules/page-layout/widgets/components/WidgetContentRenderer.tsx @@ -1,3 +1,4 @@ +import { FieldsWidget } from '@/page-layout/widgets/fields/components/FieldsWidget'; import { GraphWidgetRenderer } from '@/page-layout/widgets/graph/components/GraphWidgetRenderer'; import { IframeWidget } from '@/page-layout/widgets/iframe/components/IframeWidget'; import { type PageLayoutWidget, WidgetType } from '~/generated/graphql'; @@ -16,6 +17,9 @@ export const WidgetContentRenderer = ({ case WidgetType.IFRAME: return ; + case WidgetType.FIELDS: + return ; + default: return null; } diff --git a/packages/twenty-front/src/modules/page-layout/widgets/fields/components/FieldsWidget.tsx b/packages/twenty-front/src/modules/page-layout/widgets/fields/components/FieldsWidget.tsx new file mode 100644 index 0000000000..75d1cb74dc --- /dev/null +++ b/packages/twenty-front/src/modules/page-layout/widgets/fields/components/FieldsWidget.tsx @@ -0,0 +1,34 @@ +import { RecordFieldList } from '@/object-record/record-field-list/components/RecordFieldList'; +import { useLayoutRenderingContext } from '@/ui/layout/contexts/LayoutRenderingContext'; +import { useTargetRecord } from '@/ui/layout/contexts/useTargetRecord'; +import { RightDrawerProvider } from '@/ui/layout/right-drawer/contexts/RightDrawerContext'; +import styled from '@emotion/styled'; +import { type PageLayoutWidget } from '~/generated/graphql'; + +const StyledContainer = styled.div` + display: flex; + flex-direction: column; +`; + +type FieldsWidgetProps = { + widget: PageLayoutWidget; +}; + +export const FieldsWidget = ({ widget: _widget }: FieldsWidgetProps) => { + const targetRecord = useTargetRecord(); + const { isInRightDrawer } = useLayoutRenderingContext(); + + return ( + + + + + + ); +}; diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts index 3f68a5a268..d8ebff83ae 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts @@ -13,6 +13,7 @@ export enum FeatureFlagKey { IS_CORE_VIEW_ENABLED = 'IS_CORE_VIEW_ENABLED', IS_WORKSPACE_MIGRATION_V2_ENABLED = 'IS_WORKSPACE_MIGRATION_V2_ENABLED', IS_PAGE_LAYOUT_ENABLED = 'IS_PAGE_LAYOUT_ENABLED', + IS_RECORD_PAGE_LAYOUT_ENABLED = 'IS_RECORD_PAGE_LAYOUT_ENABLED', IS_MESSAGE_FOLDER_CONTROL_ENABLED = 'IS_MESSAGE_FOLDER_CONTROL_ENABLED', IS_WORKFLOW_ITERATOR_ENABLED = 'IS_WORKFLOW_ITERATOR_ENABLED', IS_CALENDAR_VIEW_ENABLED = 'IS_CALENDAR_VIEW_ENABLED', diff --git a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts index 1e63ebcf8d..993b742d48 100644 --- a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts +++ b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts @@ -136,6 +136,7 @@ describe('WorkspaceEntityManager', () => { IS_CORE_VIEW_ENABLED: false, IS_WORKSPACE_MIGRATION_V2_ENABLED: false, IS_PAGE_LAYOUT_ENABLED: false, + IS_RECORD_PAGE_LAYOUT_ENABLED: false, IS_MESSAGE_FOLDER_CONTROL_ENABLED: false, IS_WORKFLOW_ITERATOR_ENABLED: false, IS_CALENDAR_VIEW_ENABLED: false, @@ -168,6 +169,14 @@ describe('WorkspaceEntityManager', () => { IS_CORE_VIEW_ENABLED: false, IS_WORKSPACE_MIGRATION_V2_ENABLED: false, IS_PAGE_LAYOUT_ENABLED: false, + IS_RECORD_PAGE_LAYOUT_ENABLED: false, + IS_MESSAGE_FOLDER_CONTROL_ENABLED: false, + IS_CALENDAR_VIEW_ENABLED: false, + IS_GROUP_BY_ENABLED: false, + IS_PUBLIC_DOMAIN_ENABLED: false, + IS_EMAILING_DOMAIN_ENABLED: false, + IS_DYNAMIC_SEARCH_FIELDS_ENABLED: false, + IS_COMMON_API_ENABLED: false, IS_WORKFLOW_ITERATOR_ENABLED: false, }, permissionsPerRoleId: {}, diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-feature-flags.util.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-feature-flags.util.ts index e198e90619..a851a0a59c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-feature-flags.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/seed-feature-flags.util.ts @@ -71,6 +71,11 @@ export const seedFeatureFlags = async ( workspaceId: workspaceId, value: true, }, + { + key: FeatureFlagKey.IS_RECORD_PAGE_LAYOUT_ENABLED, + workspaceId: workspaceId, + value: false, + }, { key: FeatureFlagKey.IS_WORKFLOW_ITERATOR_ENABLED, workspaceId: workspaceId,