Introduce standalone page (#19675)
Add support for standalone pages: a new `PageLayout` type (`STANDALONE_PAGE`) that can be rendered independently at `/page/:pageLayoutId`, not tied to any record or object context. - New `STANDALONE_PAGE` page layout type - New `PAGE_LAYOUT` navigation menu item type: adds a `pageLayoutId` foreign key to `NavigationMenuItemEntity`, allowing sidebar items to link directly to standalone pages - New `GLOBAL_OBJECT_CONTEXT` command menu availability type: separates object-context-dependent commands (Create Record, Import, Export, See Deleted, Create View, Hide Deleted) from truly global ones, so standalone pages only show relevant commands - Frontend routing & rendering: adds a `/page/:pageLayoutId` route with its own page component, header, and command menu - Widget rendering refactor - Instance commands: two fast 1.22 migrations: `pageLayoutId` column + `STANDALONE_PAGE` enum, and `GLOBAL_OBJECT_CONTEXT` availability type enum - Workspace command: backfills existing command menu items from `GLOBAL` to `GLOBAL_OBJECT_CONTEXT` where appropriate - Dev seeds: adds a sample "Star History" standalone page with an iframe widget for local development
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
import { ContextStorePageType } from 'twenty-shared/types';
|
||||
|
||||
export const getPageType = ({
|
||||
isSettingsPage,
|
||||
isRecordShowPage,
|
||||
isRecordIndexPage,
|
||||
isStandalonePage,
|
||||
}: {
|
||||
isSettingsPage: boolean;
|
||||
isRecordShowPage: boolean;
|
||||
isRecordIndexPage: boolean;
|
||||
isStandalonePage: boolean;
|
||||
}): ContextStorePageType | null => {
|
||||
if (isSettingsPage) {
|
||||
return ContextStorePageType.Settings;
|
||||
}
|
||||
|
||||
if (isRecordIndexPage) {
|
||||
return ContextStorePageType.Index;
|
||||
}
|
||||
|
||||
if (isRecordShowPage) {
|
||||
return ContextStorePageType.Record;
|
||||
}
|
||||
|
||||
if (isStandalonePage) {
|
||||
return ContextStorePageType.Standalone;
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
@@ -3,29 +3,17 @@ import { type View } from '@/views/types/View';
|
||||
import { ViewType } from '@/views/types/ViewType';
|
||||
|
||||
export const getViewType = ({
|
||||
isSettingsPage,
|
||||
isRecordShowPage,
|
||||
isRecordIndexPage,
|
||||
view,
|
||||
}: {
|
||||
isSettingsPage: boolean;
|
||||
isRecordShowPage: boolean;
|
||||
isRecordIndexPage: boolean;
|
||||
view?: View;
|
||||
}) => {
|
||||
if (isSettingsPage) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (isRecordIndexPage) {
|
||||
return view?.type === ViewType.KANBAN
|
||||
? ContextStoreViewType.Kanban
|
||||
: ContextStoreViewType.Table;
|
||||
}
|
||||
|
||||
if (isRecordShowPage) {
|
||||
return ContextStoreViewType.ShowPage;
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user