04eb913551
## Summary
- Both \`IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED\` and
\`IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED\` are force-enabled on
every existing workspace by the 1.23.0 upgrade command
\`BackfillRecordPageLayoutsCommand\` and seeded enabled for new
workspaces via \`DEFAULT_FEATURE_FLAGS\` +
\`seed-feature-flags.util.ts\`. They are no longer load-bearing.
- Unwrap all \`if (flag) { … }\` conditionals to their enabled branch on
both server and front.
- Delete legacy fallback files that only the disabled branch reached:
\`PageLayoutRelationWidgetsSyncEffect\`,
\`usePageLayoutWithRelationWidgets\`,
\`reInjectDynamicRelationWidgetsFromDraft\`,
\`injectRelationWidgetsIntoLayout\`, \`isDynamicRelationWidget\` (and
their tests).
- Strip the two \`enableFeatureFlags\` calls from the 1.23 upgrade
command — the page-layout backfill data logic itself is kept intact
since old workspaces upgrading from < 1.23 still need it.
- No DB cleanup migration: stale \`featureFlag\` rows are left in place,
matching the precedent set by #20531 and #20460.
Net diff: 37 files, +106 / -1727.
## Test plan
- [x] \`npx nx typecheck twenty-shared twenty-server twenty-front\` —
all pass
- [x] \`npx nx lint:diff-with-main twenty-server twenty-front\` — all
pass
- [x] \`cd packages/twenty-front && npx jest page-layout\` — 1240 tests,
all pass
- [x] \`cd packages/twenty-server && npx jest
workspace-entity-manager.spec\` — pass
- [ ] Manual smoke: open a record page, verify tabs render and \"Edit
Layout\" command-menu action is available
- [ ] Manual smoke: Settings → Data model → object → Layout tab is
visible (and hidden for remote / Dashboard objects)
- [ ] Manual smoke: edit a tab title, save, reload — confirm persistence
50 lines
2.0 KiB
TypeScript
50 lines
2.0 KiB
TypeScript
import { PageLayoutEditModeProvider } from '@/page-layout/components/PageLayoutEditModeProvider';
|
|
import { PageLayoutInitializationQueryEffect } from '@/page-layout/components/PageLayoutInitializationQueryEffect';
|
|
import { PageLayoutRecordPageCustomizationSessionRegistrationEffect } from '@/page-layout/components/PageLayoutRecordPageCustomizationSessionRegistrationEffect';
|
|
import { PageLayoutRendererContent } from '@/page-layout/components/PageLayoutRendererContent';
|
|
import { PageLayoutComponentInstanceContext } from '@/page-layout/states/contexts/PageLayoutComponentInstanceContext';
|
|
import { getTabListInstanceIdFromPageLayoutAndRecord } from '@/page-layout/utils/getTabListInstanceIdFromPageLayoutAndRecord';
|
|
import { useLayoutRenderingContext } from '@/ui/layout/contexts/LayoutRenderingContext';
|
|
import { TabListComponentInstanceContext } from '@/ui/layout/tab-list/states/contexts/TabListComponentInstanceContext';
|
|
import 'react-grid-layout/css/styles.css';
|
|
import 'react-resizable/css/styles.css';
|
|
|
|
type PageLayoutRendererProps = {
|
|
pageLayoutId: string;
|
|
};
|
|
|
|
export const PageLayoutRenderer = ({
|
|
pageLayoutId,
|
|
}: PageLayoutRendererProps) => {
|
|
const { targetRecordIdentifier, layoutType } = useLayoutRenderingContext();
|
|
|
|
const tabListInstanceId = getTabListInstanceIdFromPageLayoutAndRecord({
|
|
pageLayoutId,
|
|
layoutType,
|
|
targetRecordIdentifier,
|
|
});
|
|
|
|
return (
|
|
<PageLayoutComponentInstanceContext.Provider
|
|
value={{
|
|
instanceId: pageLayoutId,
|
|
}}
|
|
>
|
|
<TabListComponentInstanceContext.Provider
|
|
value={{
|
|
instanceId: tabListInstanceId,
|
|
}}
|
|
>
|
|
<PageLayoutEditModeProvider
|
|
layoutType={layoutType}
|
|
pageLayoutId={pageLayoutId}
|
|
>
|
|
<PageLayoutInitializationQueryEffect pageLayoutId={pageLayoutId} />
|
|
<PageLayoutRecordPageCustomizationSessionRegistrationEffect />
|
|
<PageLayoutRendererContent />
|
|
</PageLayoutEditModeProvider>
|
|
</TabListComponentInstanceContext.Provider>
|
|
</PageLayoutComponentInstanceContext.Provider>
|
|
);
|
|
};
|