Create twenty app improvements (#20688)

create-twenty-app updates:
- remove --example option
- sync --once when scaffolding an applicaiton
- rename --api-url option to --workspace-url
- create a standalone page when scaffolding an app
<img width="1494" height="765" alt="image"
src="https://github.com/user-attachments/assets/0e35ed0c-b0aa-466c-9f56-7939294fd2cf"
/>

---------

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
This commit is contained in:
martmull
2026-05-19 15:12:47 +02:00
committed by GitHub
parent 71a7a3c42d
commit d5ff9eb515
52 changed files with 812 additions and 715 deletions
@@ -8,6 +8,7 @@ export const PAGE_LAYOUT_FRAGMENT = gql`
name
objectMetadataId
type
universalIdentifier
defaultTabToFocusOnMobileAndSidePanelId
createdAt
updatedAt
@@ -24,6 +24,7 @@ const MOCK_PAGE_LAYOUT: PageLayout = {
name: 'Test Layout',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: 'obj-1',
universalIdentifier: '20202020-0000-0000-0000-000000000001',
tabs: [],
createdAt: '2024-01-01',
updatedAt: '2024-01-01',
@@ -13,6 +13,7 @@ export const DEFAULT_COMPANY_RECORD_PAGE_LAYOUT: PageLayout = {
name: 'Default Company Layout',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: null,
universalIdentifier: '00000000-0000-0000-0000-000000000000',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -13,6 +13,7 @@ export const DEFAULT_MESSAGE_THREAD_RECORD_PAGE_LAYOUT: PageLayout = {
name: 'Default Message Thread Layout',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: null,
universalIdentifier: '00000000-0000-0000-0000-000000000000',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -13,6 +13,7 @@ export const DEFAULT_NOTE_RECORD_PAGE_LAYOUT: PageLayout = {
name: 'Default Note Layout',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: null,
universalIdentifier: '00000000-0000-0000-0000-000000000000',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -13,6 +13,7 @@ export const DEFAULT_OPPORTUNITY_RECORD_PAGE_LAYOUT: PageLayout = {
name: 'Default Opportunity Layout',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: null,
universalIdentifier: '00000000-0000-0000-0000-000000000000',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -13,6 +13,7 @@ export const DEFAULT_PERSON_RECORD_PAGE_LAYOUT: PageLayout = {
name: 'Default Person Layout',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: null,
universalIdentifier: '00000000-0000-0000-0000-000000000000',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -13,6 +13,7 @@ export const DEFAULT_RECORD_PAGE_LAYOUT: PageLayout = {
name: 'Default Record Layout',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: null,
universalIdentifier: '00000000-0000-0000-0000-000000000000',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -13,6 +13,7 @@ export const DEFAULT_TASK_RECORD_PAGE_LAYOUT: PageLayout = {
name: 'Default Task Layout',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: null,
universalIdentifier: '00000000-0000-0000-0000-000000000000',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -17,6 +17,7 @@ export const DEFAULT_WORKFLOW_PAGE_LAYOUT: PageLayout = {
name: 'Default Workflow Layout',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: null,
universalIdentifier: '00000000-0000-0000-0000-000000000000',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -17,6 +17,7 @@ export const DEFAULT_WORKFLOW_RUN_PAGE_LAYOUT: PageLayout = {
name: 'Default Workflow Run Layout',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: null,
universalIdentifier: '00000000-0000-0000-0000-000000000000',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -17,6 +17,7 @@ export const DEFAULT_WORKFLOW_VERSION_PAGE_LAYOUT: PageLayout = {
name: 'Default Workflow Version Layout',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: null,
universalIdentifier: '00000000-0000-0000-0000-000000000000',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -12,6 +12,7 @@ export const UPDATE_PAGE_LAYOUT_WITH_TABS_AND_WIDGETS = gql`
name
type
objectMetadataId
universalIdentifier
defaultTabToFocusOnMobileAndSidePanelId
createdAt
updatedAt
@@ -75,6 +75,7 @@ describe('useIsPageLayoutInEditMode', () => {
name: 'Record Page',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: 'company-id',
universalIdentifier: '20202020-0000-0000-0000-000000000001',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -18,6 +18,7 @@ const MOCK_DASHBOARD_LAYOUT: PageLayout = {
name: 'Dashboard Layout',
type: PageLayoutType.DASHBOARD,
objectMetadataId: 'object-metadata-id',
universalIdentifier: '20202020-0000-0000-0000-000000000001',
tabs: [],
createdAt: '2024-01-01',
updatedAt: '2024-01-01',
@@ -16,6 +16,7 @@ describe('convertPageLayoutToTabLayouts', () => {
name: 'Page Layout 1',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: 'object-metadata-1',
universalIdentifier: '20202020-0000-0000-0000-000000000001',
tabs: [
{
id: 'tab-1',
@@ -100,6 +101,7 @@ describe('convertPageLayoutToTabLayouts', () => {
name: 'Page Layout 1',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId: 'object-metadata-1',
universalIdentifier: '20202020-0000-0000-0000-000000000001',
tabs: [
{
id: 'tab-1',
@@ -23,6 +23,7 @@ const mockPageLayout: PageLayout = {
name: 'Test Layout',
type: PageLayoutType.DASHBOARD,
objectMetadataId: null,
universalIdentifier: '20202020-0000-0000-0000-000000000001',
tabs: [],
createdAt: '2024-01-01T00:00:00.000Z',
updatedAt: '2024-01-01T00:00:00.000Z',
@@ -140,6 +140,7 @@ const createPageLayoutWithWidget = (
name: 'Mock Page Layout',
type: pageLayoutType,
objectMetadataId: companyObjectMetadataItem.id,
universalIdentifier: '20202020-0000-0000-0000-000000000001',
tabs: [
{
__typename: 'PageLayoutTab',
@@ -1747,6 +1748,7 @@ export const Catalog: CatalogStory<Story, typeof WidgetRenderer> = {
name: 'Mock Page Layout',
type: pageLayoutType,
objectMetadataId: companyObjectMetadataItem.id,
universalIdentifier: '20202020-0000-0000-0000-000000000001',
tabs:
variant === 'side-column'
? [
@@ -288,6 +288,7 @@ const createPageLayoutWithWidget = (
name: 'Mock Page Layout',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId,
universalIdentifier: '20202020-0000-0000-0000-000000000001',
tabs: [
{
__typename: 'PageLayoutTab' as const,
@@ -138,6 +138,7 @@ const createPageLayoutWithWidget = (
name: 'Mock Page Layout',
type: PageLayoutType.RECORD_PAGE,
objectMetadataId,
universalIdentifier: '20202020-0000-0000-0000-000000000001',
tabs: [
{
__typename: 'PageLayoutTab' as const,