versioning for query events

This commit is contained in:
arpitnath 2023-09-04 19:13:09 +05:30
parent 04e40a013e
commit 743fc2aadf
3 changed files with 78 additions and 4 deletions

View file

@ -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);

View file

@ -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,
};
}

View file

@ -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);
}