ToolJet/server/migrations/1625814801430-UpdateDefinitionsForEvents.ts
Sherfin Shamsudeen 91b32adaed
Multi-events for action buttons, query params option for Go-to-app action (#560)
* Add query params option to Go-to-app action

This commit adds support for setting query params for the
go-to-app action. When the new app is launched, the passed in
object will be sent as search query params.

* Allow user to enter URL params in multiple input boxes

* Abstract goto-app action logic to a separate container

* Supply necessary newline

* Set 'type' of 'app' property of go-to-app action to 'text'

* List only those apps that has proper slugs for goto-app action

* Modify goto-app action config panel to support Event Manager

* Use EventManager instead of EventSelector for table action config

* Add data migration to make old apps support multiple event handlers

* Fix UpdateDefinitionsForTableActionEvent migration

This commit ensures that the migration recreates onClick event properly

* Fix bug that caused an 'onBulkUpdate' event to be created during migration

* Remove EventSelector

* Add margin above `remove handler` button on Table actions inspector panel
2021-08-26 20:33:59 +05:30

71 lines
2.2 KiB
TypeScript

import { AppVersion } from "../src/entities/app_version.entity";
import { MigrationInterface, QueryRunner } from "typeorm";
export class UpdateDefinitionsForEvents1625814801430 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
const entityManager = queryRunner.manager;
const queryBuilder = queryRunner.connection.createQueryBuilder();
const appVersionRepository = entityManager.getRepository(AppVersion);
const appVersions = await appVersionRepository.find();
for(const version of appVersions) {
const definition = version['definition'];
if(definition) {
const components = definition['components']
for(const componentId of Object.keys(components)) {
const component = components[componentId];
const events = component.component.definition.events;
if(events) {
const newEvents = [];
for(const eventId of Object.keys(events)) {
const actionId = events[eventId]['actionId'];
if(actionId) {
const newEvent = { ...events[eventId]['options'], actionId, eventId };
newEvents.push(newEvent);
} else {
if(eventId === 'onBulkUpdate' && (Object.keys(events[eventId]?.options || {} ).length != 0)) {
const newEvent = { ...events[eventId]['options'], actionId: 'run-query', eventId };
newEvents.push(newEvent);
}
}
}
component.component.definition.events = newEvents;
components[componentId] = {
...component,
component: {
...component.component,
definition: {
...component.component.definition,
events: newEvents
}
}
};
}
}
definition['components'] = components;
version.definition = definition;
await queryBuilder.update(AppVersion)
.set({ definition })
.where('id = :id', { id: version.id })
.execute();
}
}
}
public async down(queryRunner: QueryRunner): Promise<void> {
}
}