From 743fc2aadfd4ad9fecbd0d86b55812a7afb21c76 Mon Sep 17 00:00:00 2001 From: arpitnath Date: Mon, 4 Sep 2023 19:13:09 +0530 Subject: [PATCH] versioning for query events --- .../AppVersionsManager/CreateVersionModal.jsx | 13 +++- server/src/controllers/apps.controller.ts | 3 + server/src/services/apps.service.ts | 66 ++++++++++++++++++- 3 files changed, 78 insertions(+), 4 deletions(-) diff --git a/frontend/src/Editor/AppVersionsManager/CreateVersionModal.jsx b/frontend/src/Editor/AppVersionsManager/CreateVersionModal.jsx index bca4fa74a0..ac44f077c6 100644 --- a/frontend/src/Editor/AppVersionsManager/CreateVersionModal.jsx +++ b/frontend/src/Editor/AppVersionsManager/CreateVersionModal.jsx @@ -38,16 +38,23 @@ export const CreateVersion = ({ setIsCreatingVersion(true); appVersionService .create(appId, versionName, editingVersion.id) - .then(() => { + .then((data) => { toast.success('Version Created'); appVersionService.getAll(appId).then((data) => { setVersionName(''); setIsCreatingVersion(false); setAppVersions(data.versions); - const latestVersion = data.versions.at(0); - setAppDefinitionFromVersion(latestVersion); setShowCreateAppVersion(false); }); + + appVersionService + .getOne(appId, data.id) + .then((data) => { + setAppDefinitionFromVersion(data); + }) + .catch((error) => { + toast.error(error); + }); }) .catch((error) => { toast.error(error?.error); diff --git a/server/src/controllers/apps.controller.ts b/server/src/controllers/apps.controller.ts index 1a9e1f146a..ef50025907 100644 --- a/server/src/controllers/apps.controller.ts +++ b/server/src/controllers/apps.controller.ts @@ -301,6 +301,8 @@ export class AppsController { } const pagesForVersion = await this.pageService.findPagesForVersion(versionId); + const eventsForVersion = await this.eventsService.findEventsForVersion(versionId); + const appCurrentEditingVersion = JSON.parse(JSON.stringify(appVersion)); delete appCurrentEditingVersion['app']; @@ -315,6 +317,7 @@ export class AppsController { ...appData, editing_version: camelizeKeys(appCurrentEditingVersion), pages: pagesForVersion, + events: eventsForVersion, }; } diff --git a/server/src/services/apps.service.ts b/server/src/services/apps.service.ts index 9737cdb35a..f86470e26a 100644 --- a/server/src/services/apps.service.ts +++ b/server/src/services/apps.service.ts @@ -33,6 +33,7 @@ import { AppVersionUpdateDto } from '@dto/app-version-update.dto'; import { Layout } from 'src/entities/layout.entity'; import { Component } from 'src/entities/component.entity'; +import { EventHandler } from 'src/entities/event_handler.entity'; const uuid = require('uuid'); @Injectable() @@ -401,6 +402,10 @@ export class AppsService { .where('page.appVersionId = :appVersionId', { appVersionId: versionFromId }) .getMany(); + const allEvents = await manager.find(EventHandler, { + where: { appVersionId: versionFromId }, + }); + let homePageId = prevHomePagePage; const newComponents = []; @@ -420,8 +425,24 @@ export class AppsService { homePageId = savedPage.id; } + const pageEvents = allEvents.filter((event) => event.sourceId === page.id); + + pageEvents.forEach(async (event) => { + const newEvent = new EventHandler(); + + newEvent.id = uuid.v4(); + newEvent.name = event.name; + newEvent.sourceId = savedPage.id; + newEvent.target = event.target; + newEvent.event = event.event; + newEvent.appVersionId = appVersion.id; + + await manager.save(newEvent); + }); + page.components.forEach(async (component) => { const newComponent = new Component(); + const componentEvents = allEvents.filter((event) => event.sourceId === component.id); newComponent.id = uuid.v4(); newComponent.name = component.name; @@ -448,6 +469,19 @@ export class AppsService { newComponentLayouts.push(newLayout); }); + + componentEvents.forEach(async (event) => { + const newEvent = new EventHandler(); + + newEvent.id = uuid.v4(); + newEvent.name = event.name; + newEvent.sourceId = newComponent.id; + newEvent.target = event.target; + newEvent.event = event.event; + newEvent.appVersionId = appVersion.id; + + await manager.save(newEvent); + }); }); await manager.save(newComponents); @@ -506,6 +540,9 @@ export class AppsService { const dataSources = versionFrom?.dataSources; const dataSourceMapping = {}; const newDataQueries = []; + const allEvents = await manager.find(EventHandler, { + where: { appVersionId: versionFrom?.id }, + }); if (dataSources?.length) { for (const dataSource of dataSources) { @@ -527,8 +564,22 @@ export class AppsService { dataSourceId: newDataSource.id, appVersionId: appVersion.id, }; - const newQuery = await manager.save(manager.create(DataQuery, dataQueryParams)); + + const dataQueryEvents = allEvents.filter((event) => event.sourceId === dataQuery.id); + for (const event of dataQueryEvents) { + const newEvent = new EventHandler(); + + newEvent.id = uuid.v4(); + newEvent.name = event.name; + newEvent.sourceId = newQuery.id; + newEvent.target = event.target; + newEvent.event = event.event; + newEvent.appVersionId = appVersion.id; + + await manager.save(newEvent); + } + oldDataQueryToNewMapping[dataQuery.id] = newQuery.id; newDataQueries.push(newQuery); } @@ -544,6 +595,19 @@ export class AppsService { }; const newQuery = await manager.save(manager.create(DataQuery, dataQueryParams)); + const dataQueryEvents = allEvents.filter((event) => event.sourceId === globalQuery.id); + for (const event of dataQueryEvents) { + const newEvent = new EventHandler(); + + newEvent.id = uuid.v4(); + newEvent.name = event.name; + newEvent.sourceId = newQuery.id; + newEvent.target = event.target; + newEvent.event = event.event; + newEvent.appVersionId = appVersion.id; + + await manager.save(newEvent); + } oldDataQueryToNewMapping[globalQuery.id] = newQuery.id; newDataQueries.push(newQuery); }