From 8564bc1cfcb20e6a6dbf615cf362f8af2055be57 Mon Sep 17 00:00:00 2001 From: Nakul Nagargade Date: Tue, 1 Jul 2025 12:32:07 +0530 Subject: [PATCH 1/5] Fix Container and form on import adding header and footer by default --- .../services/app-import-export.service.ts | 81 +++++++++++-------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/server/src/modules/apps/services/app-import-export.service.ts b/server/src/modules/apps/services/app-import-export.service.ts index 66bd0b4014..e308bad390 100644 --- a/server/src/modules/apps/services/app-import-export.service.ts +++ b/server/src/modules/apps/services/app-import-export.service.ts @@ -72,7 +72,11 @@ type NewRevampedComponent = | 'VerticalDivider' | 'Link' | 'DaterangePicker' - | 'TextArea'; + | 'TextArea' + | 'Container' + | 'Tabs' + | 'Form' + const DefaultDataSourceNames: DefaultDataSourceName[] = [ 'restapidefault', @@ -94,6 +98,10 @@ const NewRevampedComponents: NewRevampedComponent[] = [ 'Link', 'DaterangePicker', 'TextArea', + 'Container', + 'Tabs', + 'Form' + ]; @Injectable() @@ -104,7 +112,7 @@ export class AppImportExportService { protected appEnvironmentUtilService: AppEnvironmentUtilService, protected usersUtilService: UsersUtilService, protected componentsService: ComponentsService - ) {} + ) { } async export(user: User, id: string, searchParams: any = {}): Promise<{ appV2: App }> { // https://github.com/typeorm/typeorm/issues/3857 @@ -216,10 +224,10 @@ export class AppImportExportService { ...page, permissions: groupPermission ? { - permissionGroup: groupPermission.users - .map((user) => user.permissionGroup?.name) - .filter((name): name is string => Boolean(name)), - } + permissionGroup: groupPermission.users + .map((user) => user.permissionGroup?.name) + .filter((name): name is string => Boolean(name)), + } : undefined, }; }); @@ -231,10 +239,10 @@ export class AppImportExportService { ...query, permissions: groupPermission ? { - permissionGroup: groupPermission.users - .map((user) => user.permissionGroup?.name) - .filter((name): name is string => Boolean(name)), - } + permissionGroup: groupPermission.users + .map((user) => user.permissionGroup?.name) + .filter((name): name is string => Boolean(name)), + } : undefined, }; }); @@ -242,16 +250,16 @@ export class AppImportExportService { const components = pages.length > 0 ? await manager - .createQueryBuilder(Component, 'components') - .leftJoinAndSelect('components.layouts', 'layouts') - .leftJoinAndSelect('components.permissions', 'permission') - .leftJoinAndSelect('permission.users', 'componentUser') - .leftJoinAndSelect('componentUser.permissionGroup', 'permissionGroup') - .where('components.pageId IN(:...pageId)', { - pageId: pages.map((v) => v.id), - }) - .orderBy('components.created_at', 'ASC') - .getMany() + .createQueryBuilder(Component, 'components') + .leftJoinAndSelect('components.layouts', 'layouts') + .leftJoinAndSelect('components.permissions', 'permission') + .leftJoinAndSelect('permission.users', 'componentUser') + .leftJoinAndSelect('componentUser.permissionGroup', 'permissionGroup') + .where('components.pageId IN(:...pageId)', { + pageId: pages.map((v) => v.id), + }) + .orderBy('components.created_at', 'ASC') + .getMany() : []; const componentsWithPermissionGroups = components.map((component) => { @@ -261,10 +269,10 @@ export class AppImportExportService { ...component, permissions: groupPermission ? { - permissionGroup: groupPermission.users - .map((user) => user.permissionGroup?.name) - .filter((name): name is string => Boolean(name)), - } + permissionGroup: groupPermission.users + .map((user) => user.permissionGroup?.name) + .filter((name): name is string => Boolean(name)), + } : undefined, }; }); @@ -1156,10 +1164,10 @@ export class AppImportExportService { const options = importingDataSource.kind === 'tooljetdb' ? this.replaceTooljetDbTableIds( - importingQuery.options, - externalResourceMappings['tooljet_database'], - organizationId - ) + importingQuery.options, + externalResourceMappings['tooljet_database'], + organizationId + ) : importingQuery.options; const newQuery = manager.create(DataQuery, { @@ -1872,10 +1880,10 @@ export class AppImportExportService { options: dataSourceId == defaultDataSourceIds['tooljetdb'] ? this.replaceTooljetDbTableIds( - query.options, - externalResourceMappings['tooljet_database'], - user?.organizationId - ) + query.options, + externalResourceMappings['tooljet_database'], + user?.organizationId + ) : query.options, }); await manager.save(newQuery); @@ -2156,6 +2164,15 @@ function migrateProperties( delete properties.maxValue; } } + + if (componentType === 'Container') { + properties.showHeader = properties?.showHeader || false; + } + + if (componentType === 'Form') { + properties.showHeader = properties?.showHeader || false; + properties.showFooter = properties?.showFooter || false; + } } return { properties, styles, general, generalStyles, validation }; } From 273c06505bc9fd762227578e478e3f6ac3daf9c0 Mon Sep 17 00:00:00 2001 From: Nakul Nagargade Date: Tue, 8 Jul 2025 10:56:24 +0530 Subject: [PATCH 2/5] Fix on import header and footer components would lose thier childrens --- .../apps/services/app-import-export.service.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/server/src/modules/apps/services/app-import-export.service.ts b/server/src/modules/apps/services/app-import-export.service.ts index e308bad390..01458ea112 100644 --- a/server/src/modules/apps/services/app-import-export.service.ts +++ b/server/src/modules/apps/services/app-import-export.service.ts @@ -317,7 +317,6 @@ export class AppImportExportService { if (typeof appParamsObj !== 'object') { throw new BadRequestException('Invalid params for app import'); } - let appParams = appParamsObj; if (appParams?.appV2) { @@ -908,9 +907,9 @@ export class AppImportExportService { const pageComponents = importingComponents.filter((component) => component.pageId === page.id); const newComponentIdsMap = {}; - for (const component of pageComponents) { newComponentIdsMap[component.id] = uuid(); + } for (const component of pageComponents) { @@ -924,6 +923,7 @@ export class AppImportExportService { } const isParentTabOrCalendar = isChildOfTabsOrCalendar(component, pageComponents, parentId, true); + const isParentHeaderOrFooter = component?.parent && (component?.parent.includes('header') || component?.parent.includes('footer')); if (isParentTabOrCalendar) { const childTabId = component?.parent ? component.parent?.match(/([a-fA-F0-9-]{36})-(.+)/)?.[2] : null; @@ -937,6 +937,11 @@ export class AppImportExportService { const mappedParentId = newComponentIdsMap[_parentId]; parentId = `${mappedParentId}-modal`; + } else if (isParentHeaderOrFooter) { + const _parentId = component?.parent ? component.parent?.match(/([a-fA-F0-9-]{36})-(.+)/)?.[1] : null; + const mappedParentId = newComponentIdsMap[_parentId]; + const headerOrFooter = component.parent?.includes('header') ? 'header' : 'footer'; + parentId = `${mappedParentId}-${headerOrFooter}`; } else { if (component.parent && !newComponentIdsMap[parentId]) { skipComponent = true; @@ -2116,7 +2121,6 @@ function migrateProperties( const general = { ...component.general }; const validation = { ...component.validation }; const generalStyles = { ...component.generalStyles }; - if (!tooljetVersion) { return { properties, styles, general, generalStyles, validation }; } @@ -2164,7 +2168,6 @@ function migrateProperties( delete properties.maxValue; } } - if (componentType === 'Container') { properties.showHeader = properties?.showHeader || false; } From a63e4370c920418631b13ccf9cd8a1eef8317bd7 Mon Sep 17 00:00:00 2001 From: Nakul Nagargade Date: Wed, 9 Jul 2025 16:47:05 +0530 Subject: [PATCH 3/5] update reference --- frontend/ee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/ee b/frontend/ee index 9da4f77691..3b2d439f68 160000 --- a/frontend/ee +++ b/frontend/ee @@ -1 +1 @@ -Subproject commit 9da4f776915e328120c3024e551ef6b8032f9f63 +Subproject commit 3b2d439f681f3879da6663f4c9b6d30deffc0380 From 3767156287e1dc56f44530b0d5043f0911d5b4f4 Mon Sep 17 00:00:00 2001 From: Nakul Nagargade Date: Wed, 9 Jul 2025 16:48:16 +0530 Subject: [PATCH 4/5] update reference --- server/ee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/ee b/server/ee index 8c0e6dec37..3bd72a7575 160000 --- a/server/ee +++ b/server/ee @@ -1 +1 @@ -Subproject commit 8c0e6dec37f1b0bb7fb5552d8eef4db3ddc18b31 +Subproject commit 3bd72a7575446d120a3b548e8819be271072407a From 8d09dde3d69fca5f42ad7fe86c1f78dbf6a9345a Mon Sep 17 00:00:00 2001 From: Nakul Nagargade Date: Wed, 9 Jul 2025 16:50:36 +0530 Subject: [PATCH 5/5] update reference --- server/ee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/ee b/server/ee index 3bd72a7575..8c0e6dec37 160000 --- a/server/ee +++ b/server/ee @@ -1 +1 @@ -Subproject commit 3bd72a7575446d120a3b548e8819be271072407a +Subproject commit 8c0e6dec37f1b0bb7fb5552d8eef4db3ddc18b31