From 8a0326d41f551bcc2903e488e47d0595ff9c4609 Mon Sep 17 00:00:00 2001 From: arpitnath Date: Wed, 27 Sep 2023 22:26:07 +0530 Subject: [PATCH] fixes: app resource mapping for imported apps --- .../src/services/app_import_export.service.ts | 49 ++++++++++++++++++- server/src/services/apps.service.ts | 6 +-- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/server/src/services/app_import_export.service.ts b/server/src/services/app_import_export.service.ts index 474a613e4f..c3839f310d 100644 --- a/server/src/services/app_import_export.service.ts +++ b/server/src/services/app_import_export.service.ts @@ -29,6 +29,8 @@ interface AppResourceMappings { appVersionMapping: Record; appEnvironmentMapping: Record; appDefaultEnvironmentMapping: Record; + pagesMapping: Record; + componentsMapping: Record; } type DefaultDataSourceKind = 'restapi' | 'runjs' | 'runpy' | 'tooljetdb' | 'workflows'; @@ -310,6 +312,8 @@ export class AppImportExportService { appVersionMapping: {}, appEnvironmentMapping: {}, appDefaultEnvironmentMapping: {}, + pagesMapping: {}, + componentsMapping: {}, }; const { importingDataSources, @@ -349,7 +353,7 @@ export class AppImportExportService { importingComponents, importingEvents ); - // console.log('-----arpit extract import data:: ', { appResourceMappings }); + console.log('-----arpit extract import data:: ', { appResourceMappings }); if (!isNormalizedAppDefinitionSchema) { for (const importingAppVersion of importingAppVersions) { const updatedDefinition = this.replaceDataQueryIdWithinDefinitions( @@ -587,6 +591,8 @@ export class AppImportExportService { const pageCreated = await manager.save(newPage); + appResourceMappings.pagesMapping[page.id] = pageCreated.id; + isHomePage = importingAppVersion.homePageId === page.id; if (isHomePage) { @@ -609,6 +615,7 @@ export class AppImportExportService { const savedComponent = await manager.save(newComponent); + appResourceMappings.componentsMapping[component.id] = savedComponent.id; const componentLayout = component.layouts; componentLayout.forEach(async (layout) => { @@ -658,6 +665,14 @@ export class AppImportExportService { } } + this.updateEventActionsForNewVersionWithNewMappingIds( + manager, + appResourceMappings.appVersionMapping[importingAppVersion.id], + appResourceMappings.dataQueryMapping, + appResourceMappings.componentsMapping, + appResourceMappings.pagesMapping + ); + await manager.update( AppVersion, { id: appResourceMappings.appVersionMapping[importingAppVersion.id] }, @@ -1352,6 +1367,38 @@ export class AppImportExportService { replaceTooljetDbTableIds(queryOptions: any, tooljetDatabaseMapping: any) { return { ...queryOptions, table_id: tooljetDatabaseMapping[queryOptions.table_id]?.id }; } + + async updateEventActionsForNewVersionWithNewMappingIds( + manager: EntityManager, + versionId: string, + oldDataQueryToNewMapping: Record, + oldComponentToNewComponentMapping: Record, + oldPageToNewPageMapping: Record + ) { + const allEvents = await manager.find(EventHandler, { + where: { appVersionId: versionId }, + }); + + for (const event of allEvents) { + const eventDefinition = event.event; + + if (eventDefinition?.actionId === 'run-query') { + eventDefinition.queryId = oldDataQueryToNewMapping[eventDefinition.queryId]; + } + + if (eventDefinition?.actionId === 'control-component') { + eventDefinition.componentId = oldComponentToNewComponentMapping[eventDefinition.componentId]; + } + + if (eventDefinition?.actionId === 'switch-page') { + eventDefinition.pageId = oldPageToNewPageMapping[eventDefinition.pageId]; + } + + event.event = eventDefinition; + + await manager.save(event); + } + } } function convertSinglePageSchemaToMultiPageSchema(appParams: any) { diff --git a/server/src/services/apps.service.ts b/server/src/services/apps.service.ts index 646a075515..ee3211ecc4 100644 --- a/server/src/services/apps.service.ts +++ b/server/src/services/apps.service.ts @@ -406,9 +406,9 @@ export class AppsService { async updateEventActionsForNewVersionWithNewMappingIds( manager: EntityManager, versionId: string, - oldDataQueryToNewMapping: any, - oldComponentToNewComponentMapping: any, - oldPageToNewPageMapping: any + oldDataQueryToNewMapping: Record, + oldComponentToNewComponentMapping: Record, + oldPageToNewPageMapping: Record ) { const allEvents = await manager.find(EventHandler, { where: { appVersionId: versionId },