@solidxai/core 0.1.6-beta.1 → 0.1.6-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/controllers/dashboard-layout.controller.d.ts +47 -0
- package/dist/controllers/dashboard-layout.controller.d.ts.map +1 -0
- package/dist/controllers/dashboard-layout.controller.js +204 -0
- package/dist/controllers/dashboard-layout.controller.js.map +1 -0
- package/dist/controllers/scheduled-job.controller.d.ts +1 -0
- package/dist/controllers/scheduled-job.controller.d.ts.map +1 -1
- package/dist/controllers/scheduled-job.controller.js +12 -0
- package/dist/controllers/scheduled-job.controller.js.map +1 -1
- package/dist/dtos/create-dashboard-layout.dto.d.ts +8 -0
- package/dist/dtos/create-dashboard-layout.dto.d.ts.map +1 -0
- package/dist/dtos/create-dashboard-layout.dto.js +53 -0
- package/dist/dtos/create-dashboard-layout.dto.js.map +1 -0
- package/dist/dtos/create-dashboard-variable.dto.d.ts +1 -0
- package/dist/dtos/create-dashboard-variable.dto.d.ts.map +1 -1
- package/dist/dtos/create-dashboard-variable.dto.js +7 -1
- package/dist/dtos/create-dashboard-variable.dto.js.map +1 -1
- package/dist/dtos/update-dashboard-layout.dto.d.ts +8 -0
- package/dist/dtos/update-dashboard-layout.dto.d.ts.map +1 -0
- package/dist/dtos/update-dashboard-layout.dto.js +53 -0
- package/dist/dtos/update-dashboard-layout.dto.js.map +1 -0
- package/dist/dtos/update-dashboard-variable.dto.d.ts +1 -0
- package/dist/dtos/update-dashboard-variable.dto.d.ts.map +1 -1
- package/dist/dtos/update-dashboard-variable.dto.js +7 -1
- package/dist/dtos/update-dashboard-variable.dto.js.map +1 -1
- package/dist/entities/action-metadata.entity.d.ts.map +1 -1
- package/dist/entities/action-metadata.entity.js.map +1 -1
- package/dist/entities/ai-interaction.entity.d.ts.map +1 -1
- package/dist/entities/ai-interaction.entity.js +5 -4
- package/dist/entities/ai-interaction.entity.js.map +1 -1
- package/dist/entities/chatter-message-details.entity.d.ts +1 -0
- package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message-details.entity.js +9 -4
- package/dist/entities/chatter-message-details.entity.js.map +1 -1
- package/dist/entities/chatter-message.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message.entity.js +4 -3
- package/dist/entities/chatter-message.entity.js.map +1 -1
- package/dist/entities/common.entity.js +1 -1
- package/dist/entities/common.entity.js.map +1 -1
- package/dist/entities/dashboard-layout.entity.d.ts +9 -0
- package/dist/entities/dashboard-layout.entity.d.ts.map +1 -0
- package/dist/entities/dashboard-layout.entity.js +41 -0
- package/dist/entities/dashboard-layout.entity.js.map +1 -0
- package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +1 -1
- package/dist/entities/dashboard-question-sql-dataset-config.entity.js +5 -4
- package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +1 -1
- package/dist/entities/dashboard-question.entity.d.ts.map +1 -1
- package/dist/entities/dashboard-question.entity.js +5 -4
- package/dist/entities/dashboard-question.entity.js.map +1 -1
- package/dist/entities/dashboard-variable.entity.d.ts +1 -0
- package/dist/entities/dashboard-variable.entity.d.ts.map +1 -1
- package/dist/entities/dashboard-variable.entity.js +10 -4
- package/dist/entities/dashboard-variable.entity.js.map +1 -1
- package/dist/entities/dashboard.entity.d.ts +2 -0
- package/dist/entities/dashboard.entity.d.ts.map +1 -1
- package/dist/entities/dashboard.entity.js +9 -3
- package/dist/entities/dashboard.entity.js.map +1 -1
- package/dist/entities/email-attachment.entity.d.ts.map +1 -1
- package/dist/entities/email-attachment.entity.js +2 -1
- package/dist/entities/email-attachment.entity.js.map +1 -1
- package/dist/entities/email-template.entity.js +1 -1
- package/dist/entities/email-template.entity.js.map +1 -1
- package/dist/entities/export-transaction.entity.d.ts.map +1 -1
- package/dist/entities/export-transaction.entity.js +2 -1
- package/dist/entities/export-transaction.entity.js.map +1 -1
- package/dist/entities/field-metadata.entity.js +2 -2
- package/dist/entities/field-metadata.entity.js.map +1 -1
- package/dist/entities/import-transaction-error-log.entity.d.ts.map +1 -1
- package/dist/entities/import-transaction-error-log.entity.js +3 -2
- package/dist/entities/import-transaction-error-log.entity.js.map +1 -1
- package/dist/entities/import-transaction.entity.d.ts.map +1 -1
- package/dist/entities/import-transaction.entity.js +2 -1
- package/dist/entities/import-transaction.entity.js.map +1 -1
- package/dist/entities/legacy-common.entity.d.ts.map +1 -1
- package/dist/entities/legacy-common.entity.js +1 -1
- package/dist/entities/legacy-common.entity.js.map +1 -1
- package/dist/entities/mq-message.entity.d.ts.map +1 -1
- package/dist/entities/mq-message.entity.js +4 -3
- package/dist/entities/mq-message.entity.js.map +1 -1
- package/dist/entities/saved-filters.entity.d.ts.map +1 -1
- package/dist/entities/saved-filters.entity.js +3 -2
- package/dist/entities/saved-filters.entity.js.map +1 -1
- package/dist/entities/security-rule.entity.d.ts.map +1 -1
- package/dist/entities/security-rule.entity.js +2 -1
- package/dist/entities/security-rule.entity.js.map +1 -1
- package/dist/entities/sms-template.entity.js +1 -1
- package/dist/entities/sms-template.entity.js.map +1 -1
- package/dist/entities/user-view-metadata.entity.d.ts.map +1 -1
- package/dist/entities/user-view-metadata.entity.js +2 -1
- package/dist/entities/user-view-metadata.entity.js.map +1 -1
- package/dist/entities/view-metadata.entity.d.ts.map +1 -1
- package/dist/entities/view-metadata.entity.js.map +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts +1 -0
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +8 -9
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
- package/dist/helpers/solid-registry.d.ts +3 -1
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/helpers/typeorm-db-helper.d.ts.map +1 -1
- package/dist/helpers/typeorm-db-helper.js +21 -0
- package/dist/helpers/typeorm-db-helper.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +4 -1
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/repository/dashboard-layout.repository.d.ts +12 -0
- package/dist/repository/dashboard-layout.repository.d.ts.map +1 -0
- package/dist/repository/dashboard-layout.repository.js +34 -0
- package/dist/repository/dashboard-layout.repository.js.map +1 -0
- package/dist/seeders/module-metadata-seeder.service.js +4 -4
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +445 -35
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +44 -21
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +26 -0
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.d.ts.map +1 -1
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js +6 -5
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js.map +1 -1
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts.map +1 -1
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js +9 -10
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js.map +1 -1
- package/dist/services/dashboard-layout.service.d.ts +20 -0
- package/dist/services/dashboard-layout.service.d.ts.map +1 -0
- package/dist/services/dashboard-layout.service.js +120 -0
- package/dist/services/dashboard-layout.service.js.map +1 -0
- package/dist/services/dashboard-question.service.d.ts +4 -0
- package/dist/services/dashboard-question.service.d.ts.map +1 -1
- package/dist/services/dashboard-question.service.js +22 -8
- package/dist/services/dashboard-question.service.js.map +1 -1
- package/dist/services/dashboard.service.d.ts +2 -0
- package/dist/services/dashboard.service.d.ts.map +1 -1
- package/dist/services/dashboard.service.js +4 -0
- package/dist/services/dashboard.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +3 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +122 -8
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +2 -4
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +1 -1
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +2 -1
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +1 -1
- package/dist/services/question-data-providers/interfaces.d.ts +1 -0
- package/dist/services/question-data-providers/interfaces.d.ts.map +1 -0
- package/dist/services/question-data-providers/interfaces.js +1 -0
- package/dist/services/question-data-providers/interfaces.js.map +1 -0
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +2 -5
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +1 -1
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +2 -1
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +1 -1
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +2 -5
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +1 -1
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +2 -1
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +1 -1
- package/dist/services/queues/database-subscriber.service.d.ts +4 -2
- package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/database-subscriber.service.js +15 -2
- package/dist/services/queues/database-subscriber.service.js.map +1 -1
- package/dist/services/queues/publisher-factory.service.d.ts.map +1 -1
- package/dist/services/queues/publisher-factory.service.js +4 -6
- package/dist/services/queues/publisher-factory.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts +8 -3
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.js +72 -5
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/services/scheduled-job.service.d.ts +6 -1
- package/dist/services/scheduled-job.service.d.ts.map +1 -1
- package/dist/services/scheduled-job.service.js +26 -2
- package/dist/services/scheduled-job.service.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.interface.d.ts +2 -0
- package/dist/services/scheduled-jobs/scheduler.interface.d.ts.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.interface.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.d.ts +6 -2
- package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.js +75 -17
- package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +1 -1
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +4 -1
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +1 -1
- package/dist/services/solid-ts-morph.service.d.ts +9 -0
- package/dist/services/solid-ts-morph.service.d.ts.map +1 -1
- package/dist/services/solid-ts-morph.service.js +76 -0
- package/dist/services/solid-ts-morph.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +8 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.js +9 -1
- package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts +4 -4
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.js +25 -28
- package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -1
- package/dist-tests/api/authenticate.spec.js +119 -0
- package/dist-tests/api/authenticate.spec.js.map +1 -0
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +97 -0
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +1 -0
- package/dist-tests/api/ping.spec.js +21 -0
- package/dist-tests/api/ping.spec.js.map +1 -0
- package/dist-tests/helpers/auth.js +41 -0
- package/dist-tests/helpers/auth.js.map +1 -0
- package/dist-tests/helpers/env.js +11 -0
- package/dist-tests/helpers/env.js.map +1 -0
- package/package.json +1 -1
- package/sql/default/mariadb/proc_CleanupModelMetadata.sql +153 -0
- package/sql/default/mariadb/proc_CleanupModuleMetadata.sql +56 -0
- package/sql/default/mysql/proc_CleanupModelMetadata.sql +153 -0
- package/sql/default/mysql/proc_CleanupModuleMetadata.sql +56 -0
- package/src/controllers/dashboard-layout.controller.ts +106 -0
- package/src/controllers/scheduled-job.controller.ts +6 -0
- package/src/dtos/create-dashboard-layout.dto.ts +31 -0
- package/src/dtos/create-dashboard-variable.dto.ts +4 -0
- package/src/dtos/update-dashboard-layout.dto.ts +30 -0
- package/src/dtos/update-dashboard-variable.dto.ts +5 -1
- package/src/entities/action-metadata.entity.ts +3 -2
- package/src/entities/ai-interaction.entity.ts +5 -4
- package/src/entities/chatter-message-details.entity.ts +7 -3
- package/src/entities/chatter-message.entity.ts +4 -3
- package/src/entities/common.entity.ts +2 -2
- package/src/entities/dashboard-layout.entity.ts +18 -0
- package/src/entities/dashboard-question-sql-dataset-config.entity.ts +5 -4
- package/src/entities/dashboard-question.entity.ts +5 -4
- package/src/entities/dashboard-variable.entity.ts +9 -4
- package/src/entities/dashboard.entity.ts +7 -2
- package/src/entities/email-attachment.entity.ts +2 -1
- package/src/entities/email-template.entity.ts +1 -1
- package/src/entities/export-transaction.entity.ts +2 -1
- package/src/entities/field-metadata.entity.ts +2 -2
- package/src/entities/import-transaction-error-log.entity.ts +3 -2
- package/src/entities/import-transaction.entity.ts +2 -1
- package/src/entities/legacy-common.entity.ts +3 -4
- package/src/entities/mq-message.entity.ts +4 -3
- package/src/entities/saved-filters.entity.ts +3 -2
- package/src/entities/security-rule.entity.ts +2 -1
- package/src/entities/sms-template.entity.ts +1 -1
- package/src/entities/user-view-metadata.entity.ts +2 -1
- package/src/entities/view-metadata.entity.ts +3 -0
- package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +9 -9
- package/src/helpers/solid-registry.ts +3 -2
- package/src/helpers/typeorm-db-helper.ts +26 -0
- package/src/index.ts +1 -0
- package/src/interfaces.ts +7 -1
- package/src/repository/dashboard-layout.repository.ts +17 -0
- package/src/seeders/module-metadata-seeder.service.ts +5 -5
- package/src/seeders/seed-data/solid-core-metadata.json +446 -36
- package/src/services/authentication.service.ts +46 -24
- package/src/services/chatter-message.service.ts +26 -0
- package/src/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.ts +6 -5
- package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +17 -22
- package/src/services/dashboard-layout.service.ts +111 -0
- package/src/services/dashboard-question.service.ts +23 -4
- package/src/services/dashboard.service.ts +7 -0
- package/src/services/model-metadata.service.ts +131 -50
- package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +3 -7
- package/src/services/question-data-providers/interfaces.ts +0 -0
- package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +4 -8
- package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +4 -8
- package/src/services/queues/database-subscriber.service.ts +19 -2
- package/src/services/queues/publisher-factory.service.ts +8 -6
- package/src/services/queues/rabbitmq-subscriber.service.ts +115 -5
- package/src/services/scheduled-job.service.ts +31 -2
- package/src/services/scheduled-jobs/scheduler.interface.ts +4 -1
- package/src/services/scheduled-jobs/scheduler.service.ts +82 -20
- package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +4 -1
- package/src/services/solid-ts-morph.service.ts +98 -0
- package/src/solid-core.module.ts +12 -0
- package/src/subscribers/computed-entity-field.subscriber.ts +9 -3
- package/src/transformers/typeorm/local-date-time-transformer.ts +41 -33
- package/.claude/settings.local.json +0 -15
- package/src/services/1.js +0 -6
|
@@ -12,7 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.DashboardQuestionService = void 0;
|
|
15
|
+
exports.DashboardQuestionService = exports.INBUILT_SQL_DATA_PROVIDERS = exports.PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME = exports.PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME = exports.CHARTJS_SQL_DATA_PROVIDER_NAME = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const core_1 = require("@nestjs/core");
|
|
18
18
|
const typeorm_1 = require("@nestjs/typeorm");
|
|
@@ -26,9 +26,10 @@ var SOURCE_TYPE;
|
|
|
26
26
|
SOURCE_TYPE["SQL"] = "sql";
|
|
27
27
|
SOURCE_TYPE["PROVIDER"] = "provider";
|
|
28
28
|
})(SOURCE_TYPE || (SOURCE_TYPE = {}));
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
exports.CHARTJS_SQL_DATA_PROVIDER_NAME = 'ChartJsSqlDataProvider';
|
|
30
|
+
exports.PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME = 'PrimeReactMeterGroupSqlDataProvider';
|
|
31
|
+
exports.PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME = 'PrimeReactDatatableSqlDataProvider';
|
|
32
|
+
exports.INBUILT_SQL_DATA_PROVIDERS = [exports.CHARTJS_SQL_DATA_PROVIDER_NAME, exports.PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME, exports.PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME];
|
|
32
33
|
let DashboardQuestionService = class DashboardQuestionService extends crud_service_1.CRUDService {
|
|
33
34
|
constructor(entityManager, repo, moduleRef, solidRegistry) {
|
|
34
35
|
super(entityManager, repo, 'dashboardQuestion', 'solid-core', moduleRef);
|
|
@@ -46,19 +47,32 @@ let DashboardQuestionService = class DashboardQuestionService extends crud_servi
|
|
|
46
47
|
const dashboardVariables = question.dashboard?.dashboardVariables || [];
|
|
47
48
|
const expressions = this.getExpressions(isPreview, dashboardVariables, inputExpressions);
|
|
48
49
|
let dataProvider = null;
|
|
50
|
+
let context = {};
|
|
49
51
|
if (question.sourceType === SOURCE_TYPE.SQL && ['bar', 'pie', 'line', 'donut'].includes(question.visualisedAs)) {
|
|
50
|
-
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(CHARTJS_SQL_DATA_PROVIDER_NAME);
|
|
52
|
+
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(exports.CHARTJS_SQL_DATA_PROVIDER_NAME);
|
|
53
|
+
context = {
|
|
54
|
+
expressions,
|
|
55
|
+
};
|
|
51
56
|
}
|
|
52
57
|
if (question.sourceType === SOURCE_TYPE.SQL && ['prime-meter-group'].includes(question.visualisedAs)) {
|
|
53
|
-
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME);
|
|
58
|
+
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(exports.PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME);
|
|
59
|
+
context = {
|
|
60
|
+
expressions,
|
|
61
|
+
};
|
|
54
62
|
}
|
|
55
63
|
if (question.sourceType === SOURCE_TYPE.SQL && ['prime-datatable'].includes(question.visualisedAs)) {
|
|
56
|
-
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME);
|
|
64
|
+
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(exports.PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME);
|
|
65
|
+
context = {
|
|
66
|
+
expressions,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (question.sourceType === SOURCE_TYPE.PROVIDER) {
|
|
70
|
+
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(question.providerName);
|
|
57
71
|
}
|
|
58
72
|
if (!dataProvider) {
|
|
59
73
|
throw new common_1.NotImplementedException(`Invalid data source type ${question.sourceType}`);
|
|
60
74
|
}
|
|
61
|
-
return await dataProvider.getData(question,
|
|
75
|
+
return await dataProvider.getData(question, context);
|
|
62
76
|
}
|
|
63
77
|
getExpressions(isPreview, dashboardVariables, inputExpressions) {
|
|
64
78
|
const expressions = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-question.service.js","sourceRoot":"","sources":["../../src/services/dashboard-question.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, Injectable, Logger, NotImplementedException } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\n\n\nimport { DashboardVariable } from 'src/entities/dashboard-variable.entity';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { DashboardQuestion } from '../entities/dashboard-question.entity';\nimport { SqlExpression, SqlExpressionOperator } from './question-data-providers/chartjs-sql-data-provider.service';\nimport { DashboardQuestionRepository } from 'src/repository/dashboard-question.repository';\n\nenum SOURCE_TYPE {\n SQL = 'sql',\n PROVIDER = 'provider',\n}\n\nconst CHARTJS_SQL_DATA_PROVIDER_NAME = 'ChartJsSqlDataProvider';\nconst PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME = 'PrimeReactMeterGroupSqlDataProvider';\nconst PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME = 'PrimeReactDatatableSqlDataProvider';\n\n@Injectable()\nexport class DashboardQuestionService extends CRUDService<DashboardQuestion> {\n private readonly logger = new Logger(this.constructor.name);\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(DashboardQuestion, 'default')\n // readonly repo: Repository<DashboardQuestion>,\n readonly repo: DashboardQuestionRepository,\n readonly moduleRef: ModuleRef,\n readonly solidRegistry: SolidRegistry, // Assuming solidRegistry is injected for data providers\n ) {\n super(entityManager, repo, 'dashboardQuestion', 'solid-core', moduleRef);\n }\n\n // Get the data for a specific question \n async getData(id: number, inputExpressions: SqlExpression[] = [], isPreview = false): Promise<any> {\n // Load the question\n const question = await this.loadQuestion(id);\n if (!question) {\n throw new BadRequestException(`Question with id ${id} not found`);\n }\n\n // Get the dashbbard variables from the question\n const dashboardVariables = question.dashboard?.dashboardVariables || [];\n const expressions: SqlExpression[] = this.getExpressions(isPreview, dashboardVariables, inputExpressions);\n\n // Try to resolve the dataProvider based on a combination of sourceType and visualisedAs\n let dataProvider = null;\n\n if (question.sourceType === SOURCE_TYPE.SQL && ['bar', 'pie', 'line', 'donut'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(CHARTJS_SQL_DATA_PROVIDER_NAME);\n }\n if (question.sourceType === SOURCE_TYPE.SQL && ['prime-meter-group'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME);\n }\n if (question.sourceType === SOURCE_TYPE.SQL && ['prime-datatable'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME);\n }\n\n if (!dataProvider) {\n throw new NotImplementedException(`Invalid data source type ${question.sourceType}`);\n }\n\n return await dataProvider.getData(question, expressions);\n\n }\n\n private getExpressions(isPreview: boolean, dashboardVariables: DashboardVariable[], inputExpressions: SqlExpression[]) {\n const expressions: SqlExpression[] = [];\n\n if (isPreview) {\n // Convert the dashboard variables into objects of interface type SqlExpression using the default value, default operator and the variable name\n const expr: SqlExpression[] = dashboardVariables.map(variable => {\n return {\n variableName: variable.variableName,\n operator: variable.defaultOperator as SqlExpressionOperator, // Assuming defaultOperator is a valid SqlExpressionOperator\n value: JSON.parse(variable.defaultValue || '[]'), // Assuming defaultValue is a string or can be converted to a string array\n };\n });\n expressions.push(...expr);\n }\n else {\n // Loop through the dashboard variables and see if there is a matching input expression\n // If there is, use that expression instead of the default value\n for (const variable of dashboardVariables) {\n const matchingInputExpression = inputExpressions.find(expr => expr.variableName === variable.variableName);\n if (matchingInputExpression) {\n expressions.push(matchingInputExpression);\n }\n else {\n expressions.push({\n variableName: variable.variableName,\n operator: variable.defaultOperator as SqlExpressionOperator,\n value: JSON.parse(variable.defaultValue || '[]'),\n });\n }\n }\n expressions.push(...expressions);\n }\n\n // Remove duplicate expressions based on variableName in the expressions array\n const deduplicatedExpressions: SqlExpression[] = [];\n const variableNames = new Set<string>();\n for (const expr of expressions) {\n if (!variableNames.has(expr.variableName)) {\n deduplicatedExpressions.push(expr);\n variableNames.add(expr.variableName);\n }\n }\n\n return deduplicatedExpressions;\n }\n\n private async loadQuestion(id: number) {\n const repo = this.entityManager.getRepository(DashboardQuestion);\n\n // Load the dashboard record using the field\n const question = await repo.findOne({\n where: {\n id,\n },\n relations: ['questionSqlDatasetConfigs', 'dashboard', 'dashboard.dashboardVariables'],\n });\n return question;\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dashboard-question.service.js","sourceRoot":"","sources":["../../src/services/dashboard-question.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, Injectable, Logger, NotImplementedException } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\n\n\nimport { DashboardVariable } from 'src/entities/dashboard-variable.entity';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { DashboardQuestion } from '../entities/dashboard-question.entity';\nimport { SqlExpression, SqlExpressionOperator } from './question-data-providers/chartjs-sql-data-provider.service';\nimport { DashboardQuestionRepository } from 'src/repository/dashboard-question.repository';\nimport { QuestionSqlDataProviderContext } from 'src';\n\nenum SOURCE_TYPE {\n SQL = 'sql',\n PROVIDER = 'provider',\n}\n\nexport const CHARTJS_SQL_DATA_PROVIDER_NAME = 'ChartJsSqlDataProvider';\nexport const PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME = 'PrimeReactMeterGroupSqlDataProvider';\nexport const PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME = 'PrimeReactDatatableSqlDataProvider';\n\nexport const INBUILT_SQL_DATA_PROVIDERS = [CHARTJS_SQL_DATA_PROVIDER_NAME, PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME, PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME];\n\n@Injectable()\nexport class DashboardQuestionService extends CRUDService<DashboardQuestion> {\n private readonly logger = new Logger(this.constructor.name);\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(DashboardQuestion, 'default')\n // readonly repo: Repository<DashboardQuestion>,\n readonly repo: DashboardQuestionRepository,\n readonly moduleRef: ModuleRef,\n readonly solidRegistry: SolidRegistry, // Assuming solidRegistry is injected for data providers\n ) {\n super(entityManager, repo, 'dashboardQuestion', 'solid-core', moduleRef);\n }\n\n // Get the data for a specific question \n async getData(id: number, inputExpressions: SqlExpression[] = [], isPreview = false): Promise<any> {\n // Load the question\n const question = await this.loadQuestion(id);\n if (!question) {\n throw new BadRequestException(`Question with id ${id} not found`);\n }\n\n // Get the dashbbard variables from the question\n const dashboardVariables = question.dashboard?.dashboardVariables || [];\n const expressions: SqlExpression[] = this.getExpressions(isPreview, dashboardVariables, inputExpressions);\n\n // Try to resolve the dataProvider based on a combination of sourceType and visualisedAs\n let dataProvider = null;\n let context = {};\n\n // Decide which data provider to use based on the question visualisation type if sourceType is SQL. \n if (question.sourceType === SOURCE_TYPE.SQL && ['bar', 'pie', 'line', 'donut'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(CHARTJS_SQL_DATA_PROVIDER_NAME);\n context = {\n expressions,\n } as QuestionSqlDataProviderContext;\n }\n if (question.sourceType === SOURCE_TYPE.SQL && ['prime-meter-group'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME);\n context = {\n expressions,\n } as QuestionSqlDataProviderContext;\n }\n if (question.sourceType === SOURCE_TYPE.SQL && ['prime-datatable'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME);\n context = {\n expressions,\n } as QuestionSqlDataProviderContext;\n }\n\n // If a custom provider is specified, use that one instead\n if (question.sourceType === SOURCE_TYPE.PROVIDER) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(question.providerName);\n }\n\n if (!dataProvider) {\n throw new NotImplementedException(`Invalid data source type ${question.sourceType}`);\n }\n\n return await dataProvider.getData(question, context);\n\n }\n\n private getExpressions(isPreview: boolean, dashboardVariables: DashboardVariable[], inputExpressions: SqlExpression[]) {\n const expressions: SqlExpression[] = [];\n\n if (isPreview) {\n // Convert the dashboard variables into objects of interface type SqlExpression using the default value, default operator and the variable name\n const expr: SqlExpression[] = dashboardVariables.map(variable => {\n return {\n variableName: variable.variableName,\n operator: variable.defaultOperator as SqlExpressionOperator, // Assuming defaultOperator is a valid SqlExpressionOperator\n value: JSON.parse(variable.defaultValue || '[]'), // Assuming defaultValue is a string or can be converted to a string array\n };\n });\n expressions.push(...expr);\n }\n else {\n // Loop through the dashboard variables and see if there is a matching input expression\n // If there is, use that expression instead of the default value\n for (const variable of dashboardVariables) {\n const matchingInputExpression = inputExpressions.find(expr => expr.variableName === variable.variableName);\n if (matchingInputExpression) {\n expressions.push(matchingInputExpression);\n }\n else {\n expressions.push({\n variableName: variable.variableName,\n operator: variable.defaultOperator as SqlExpressionOperator,\n value: JSON.parse(variable.defaultValue || '[]'),\n });\n }\n }\n expressions.push(...expressions);\n }\n\n // Remove duplicate expressions based on variableName in the expressions array\n const deduplicatedExpressions: SqlExpression[] = [];\n const variableNames = new Set<string>();\n for (const expr of expressions) {\n if (!variableNames.has(expr.variableName)) {\n deduplicatedExpressions.push(expr);\n variableNames.add(expr.variableName);\n }\n }\n\n return deduplicatedExpressions;\n }\n\n private async loadQuestion(id: number) {\n const repo = this.entityManager.getRepository(DashboardQuestion);\n\n // Load the dashboard record using the field\n const question = await repo.findOne({\n where: {\n id,\n },\n relations: ['questionSqlDatasetConfigs', 'dashboard', 'dashboard.dashboardVariables'],\n });\n return question;\n }\n\n}\n"]}
|
|
@@ -7,6 +7,7 @@ import { SolidRegistry } from 'src/helpers/solid-registry';
|
|
|
7
7
|
import { DashboardMapper } from 'src/mappers/dashboard-mapper';
|
|
8
8
|
import { DashboardRepository } from 'src/repository/dashboard.repository';
|
|
9
9
|
import { Dashboard } from '../entities/dashboard.entity';
|
|
10
|
+
import { CreateDashboardDto } from 'src/dtos/create-dashboard.dto';
|
|
10
11
|
export declare const SQL_DYNAMIC_PROVIDER_NAME = "DashboardVariableSQLDynamicProvider";
|
|
11
12
|
export declare class DashboardService extends CRUDService<Dashboard> {
|
|
12
13
|
readonly entityManager: EntityManager;
|
|
@@ -17,6 +18,7 @@ export declare class DashboardService extends CRUDService<Dashboard> {
|
|
|
17
18
|
readonly dashboardMapper: DashboardMapper;
|
|
18
19
|
private readonly logger;
|
|
19
20
|
constructor(entityManager: EntityManager, repo: DashboardRepository, moduleRef: ModuleRef, solidRegistry: SolidRegistry, moduleMetadataHelperService: ModuleMetadataHelperService, dashboardMapper: DashboardMapper);
|
|
21
|
+
create(createDto: CreateDashboardDto, files: Express.Multer.File[]): Promise<Dashboard>;
|
|
20
22
|
getSelectionDynamicValues(query: DashboardVariableSelectionDynamicQueryDto): Promise<readonly import("..").ISelectionProviderValues[]>;
|
|
21
23
|
private getProviderNameAndContext;
|
|
22
24
|
private loadDashboardVariable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.service.d.ts","sourceRoot":"","sources":["../../src/services/dashboard.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAKxD,OAAO,EAAE,yCAAyC,EAAE,MAAM,yDAAyD,CAAC;AAEpH,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard.service.d.ts","sourceRoot":"","sources":["../../src/services/dashboard.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAKxD,OAAO,EAAE,yCAAyC,EAAE,MAAM,yDAAyD,CAAC;AAEpH,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,eAAO,MAAM,yBAAyB,wCAAwC,CAAC;AAC/E,qBACa,gBAAiB,SAAQ,WAAW,CAAC,SAAS,CAAC;IAIxD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,IAAI,EAAE,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,2BAA2B,EAAE,2BAA2B;IACjE,QAAQ,CAAC,eAAe,EAAE,eAAe;IAR3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAGjD,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,2BAA2B,EAAE,2BAA2B,EACxD,eAAe,EAAE,eAAe;IAMrC,MAAM,CAAC,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;IAKlE,yBAAyB,CAAC,KAAK,EAAE,yCAAyC;IAkBhF,OAAO,CAAC,yBAAyB;YAoBnB,qBAAqB;IAY7B,qBAAqB,CAAC,MAAM,EAAE,SAAS;YAuB/B,oBAAoB;YAWpB,aAAa;CAqB5B"}
|
|
@@ -70,6 +70,10 @@ let DashboardService = class DashboardService extends crud_service_1.CRUDService
|
|
|
70
70
|
this.dashboardMapper = dashboardMapper;
|
|
71
71
|
this.logger = new common_1.Logger(this.constructor.name);
|
|
72
72
|
}
|
|
73
|
+
async create(createDto, files) {
|
|
74
|
+
createDto.name = createDto.name.trim().replace(/\s+/g, '-').toLowerCase();
|
|
75
|
+
return super.create(createDto, files);
|
|
76
|
+
}
|
|
73
77
|
async getSelectionDynamicValues(query) {
|
|
74
78
|
const dashboardVariable = await this.loadDashboardVariable(query.variableId);
|
|
75
79
|
const [providerName, context] = this.getProviderNameAndContext(dashboardVariable, query);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.service.js","sourceRoot":"","sources":["../../src/services/dashboard.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\n\n\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport { SelectionDynamicSourceType } from 'src/dtos/create-dashboard-variable.dto';\nimport { DashboardVariableSelectionDynamicQueryDto } from 'src/dtos/dashboard-variable-selection-dynamic-query.dto';\nimport { DashboardVariable } from 'src/entities/dashboard-variable.entity';\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { DashboardMapper } from 'src/mappers/dashboard-mapper';\nimport { DashboardRepository } from 'src/repository/dashboard.repository';\nimport { Dashboard } from '../entities/dashboard.entity';\n\n\nexport const SQL_DYNAMIC_PROVIDER_NAME = 'DashboardVariableSQLDynamicProvider';\n@Injectable()\nexport class DashboardService extends CRUDService<Dashboard> {\n private readonly logger = new Logger(this.constructor.name);\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n readonly repo: DashboardRepository, // Assuming you have a DashboardRepository for custom queries\n readonly moduleRef: ModuleRef,\n readonly solidRegistry: SolidRegistry, // Assuming solidRegistry is injected for selection providers\n readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n readonly dashboardMapper: DashboardMapper,\n ) {\n super(entityManager, repo, 'dashboard', 'solid-core', moduleRef);\n }\n\n async getSelectionDynamicValues(query: DashboardVariableSelectionDynamicQueryDto) {\n // Get the dashboard variable repo\n const dashboardVariable = await this.loadDashboardVariable(query.variableId);\n\n // Get the providerName and context for the dashboard variable\n const [providerName, context] = this.getProviderNameAndContext(dashboardVariable, query);\n\n // Get hold of the provider instance from the SolidRegistry\n const selectionProviderInstance = this.solidRegistry.getDashboardVariableSelectionProviderInstance(providerName);\n if (!selectionProviderInstance) {\n throw new NotFoundException(`Field incorrectly configured. No provider with name ${providerName} registered in backend.`);\n }\n\n // 4. Call the provider's getSelectionDynamicValues method\n return selectionProviderInstance.values(query.query, context);\n }\n\n\n private getProviderNameAndContext(dashboardVariable: DashboardVariable, query: DashboardVariableSelectionDynamicQueryDto): [string, any] {\n const sourceType = dashboardVariable.selectionDynamicSourceType;\n\n // Get the appropriate provide name based on the source type\n let providerName: string;\n const context = { limit: query.limit, offset: query.offset };\n switch (sourceType) {\n case SelectionDynamicSourceType.SQL:\n providerName = SQL_DYNAMIC_PROVIDER_NAME;\n context['sql'] = dashboardVariable.selectionDynamicSQL;\n break;\n case SelectionDynamicSourceType.PROVIDER:\n providerName = dashboardVariable.selectionDynamicProviderName;\n break;\n default:\n throw new Error(`Unsupported selection dynamic source type: ${sourceType}`);\n }\n return [providerName, context];\n }\n\n private async loadDashboardVariable(variableId: number) {\n const dashboardVariableRepo = this.entityManager.getRepository(DashboardVariable);\n\n // Load the dashboard record using the field\n const dashboardVariable = await dashboardVariableRepo.findOne({\n where: {\n id: variableId,\n },\n });\n return dashboardVariable;\n }\n\n async saveDashboardToConfig(entity: Dashboard) {\n if (!entity) {\n this.logger.debug('No entity found in the DashboardSubscriber saveDashboardToConfig method');\n return;\n }\n\n // Validate dashboard details\n const dashboard = entity as Dashboard;\n const moduleMetadata = entity.module;\n if (!moduleMetadata) {\n throw new Error(`Module metadata not found for dashboard id ${entity.id}`);\n }\n\n // Get config file details\n const { filePath, metaData } = await this.getConfigFileDetails(moduleMetadata.name);\n if (!filePath || !metaData) {\n throw new Error(`Configuration details not found for module: ${moduleMetadata.name}`);\n }\n\n // Write the dashboard to the config file\n await this.writeToConfig(metaData, dashboard, filePath);\n }\n\n private async getConfigFileDetails(moduleName: string): Promise<{ filePath: string; metaData: any }> {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);\n try {\n await fs.access(filePath);\n } catch (error) {\n throw new Error(`Configuration file not found for module: ${moduleName}`);\n }\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n return { filePath, metaData };\n }\n\n private async writeToConfig(metaData: any, dashboard: Dashboard, filePath: string) {\n if (metaData.dashboards && Array.isArray(metaData.dashboards)) {\n const dashboardIndex = metaData.dashboards?.findIndex((dashboardFromFile: { name: string; }) => dashboardFromFile.name === dashboard.name);\n const dto = await this.dashboardMapper.toDto(dashboard);\n if (dashboardIndex !== -1) {\n metaData.dashboards[dashboardIndex] = dto;\n }\n else {\n metaData.dashboards.push(dto);\n }\n }\n else {\n const dashboards = [];\n const dto = await this.dashboardMapper.toDto(dashboard);\n dashboards.push(dto);\n metaData.dashboards = dashboards;\n }\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"dashboard.service.js","sourceRoot":"","sources":["../../src/services/dashboard.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\n\n\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport { SelectionDynamicSourceType } from 'src/dtos/create-dashboard-variable.dto';\nimport { DashboardVariableSelectionDynamicQueryDto } from 'src/dtos/dashboard-variable-selection-dynamic-query.dto';\nimport { DashboardVariable } from 'src/entities/dashboard-variable.entity';\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { DashboardMapper } from 'src/mappers/dashboard-mapper';\nimport { DashboardRepository } from 'src/repository/dashboard.repository';\nimport { Dashboard } from '../entities/dashboard.entity';\nimport { CreateDashboardDto } from 'src/dtos/create-dashboard.dto';\n\n\nexport const SQL_DYNAMIC_PROVIDER_NAME = 'DashboardVariableSQLDynamicProvider';\n@Injectable()\nexport class DashboardService extends CRUDService<Dashboard> {\n private readonly logger = new Logger(this.constructor.name);\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n readonly repo: DashboardRepository, // Assuming you have a DashboardRepository for custom queries\n readonly moduleRef: ModuleRef,\n readonly solidRegistry: SolidRegistry, // Assuming solidRegistry is injected for selection providers\n readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n readonly dashboardMapper: DashboardMapper,\n ) {\n super(entityManager, repo, 'dashboard', 'solid-core', moduleRef);\n }\n\n\n async create(createDto: CreateDashboardDto, files: Express.Multer.File[]) {\n createDto.name = createDto.name.trim().replace(/\\s+/g, '-').toLowerCase();\n return super.create(createDto, files);\n }\n\n async getSelectionDynamicValues(query: DashboardVariableSelectionDynamicQueryDto) {\n // Get the dashboard variable repo\n const dashboardVariable = await this.loadDashboardVariable(query.variableId);\n\n // Get the providerName and context for the dashboard variable\n const [providerName, context] = this.getProviderNameAndContext(dashboardVariable, query);\n\n // Get hold of the provider instance from the SolidRegistry\n const selectionProviderInstance = this.solidRegistry.getDashboardVariableSelectionProviderInstance(providerName);\n if (!selectionProviderInstance) {\n throw new NotFoundException(`Field incorrectly configured. No provider with name ${providerName} registered in backend.`);\n }\n\n // 4. Call the provider's getSelectionDynamicValues method\n return selectionProviderInstance.values(query.query, context);\n }\n\n\n private getProviderNameAndContext(dashboardVariable: DashboardVariable, query: DashboardVariableSelectionDynamicQueryDto): [string, any] {\n const sourceType = dashboardVariable.selectionDynamicSourceType;\n\n // Get the appropriate provide name based on the source type\n let providerName: string;\n const context = { limit: query.limit, offset: query.offset };\n switch (sourceType) {\n case SelectionDynamicSourceType.SQL:\n providerName = SQL_DYNAMIC_PROVIDER_NAME;\n context['sql'] = dashboardVariable.selectionDynamicSQL;\n break;\n case SelectionDynamicSourceType.PROVIDER:\n providerName = dashboardVariable.selectionDynamicProviderName;\n break;\n default:\n throw new Error(`Unsupported selection dynamic source type: ${sourceType}`);\n }\n return [providerName, context];\n }\n\n private async loadDashboardVariable(variableId: number) {\n const dashboardVariableRepo = this.entityManager.getRepository(DashboardVariable);\n\n // Load the dashboard record using the field\n const dashboardVariable = await dashboardVariableRepo.findOne({\n where: {\n id: variableId,\n },\n });\n return dashboardVariable;\n }\n\n async saveDashboardToConfig(entity: Dashboard) {\n if (!entity) {\n this.logger.debug('No entity found in the DashboardSubscriber saveDashboardToConfig method');\n return;\n }\n\n // Validate dashboard details\n const dashboard = entity as Dashboard;\n const moduleMetadata = entity.module;\n if (!moduleMetadata) {\n throw new Error(`Module metadata not found for dashboard id ${entity.id}`);\n }\n\n // Get config file details\n const { filePath, metaData } = await this.getConfigFileDetails(moduleMetadata.name);\n if (!filePath || !metaData) {\n throw new Error(`Configuration details not found for module: ${moduleMetadata.name}`);\n }\n\n // Write the dashboard to the config file\n await this.writeToConfig(metaData, dashboard, filePath);\n }\n\n private async getConfigFileDetails(moduleName: string): Promise<{ filePath: string; metaData: any }> {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);\n try {\n await fs.access(filePath);\n } catch (error) {\n throw new Error(`Configuration file not found for module: ${moduleName}`);\n }\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n return { filePath, metaData };\n }\n\n private async writeToConfig(metaData: any, dashboard: Dashboard, filePath: string) {\n if (metaData.dashboards && Array.isArray(metaData.dashboards)) {\n const dashboardIndex = metaData.dashboards?.findIndex((dashboardFromFile: { name: string; }) => dashboardFromFile.name === dashboard.name);\n const dto = await this.dashboardMapper.toDto(dashboard);\n if (dashboardIndex !== -1) {\n metaData.dashboards[dashboardIndex] = dto;\n }\n else {\n metaData.dashboards.push(dto);\n }\n }\n else {\n const dashboards = [];\n const dto = await this.dashboardMapper.toDto(dashboard);\n dashboards.push(dto);\n metaData.dashboards = dashboards;\n }\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n }\n}"]}
|
|
@@ -14,6 +14,7 @@ import { MediaStorageProviderMetadataService } from './media-storage-provider-me
|
|
|
14
14
|
import { RoleMetadataService } from './role-metadata.service';
|
|
15
15
|
import { NavigationDto } from 'src/dtos/navigation.dto';
|
|
16
16
|
import { SolidIntrospectService } from './solid-introspect.service';
|
|
17
|
+
import { SolidTsMorphService } from './solid-ts-morph.service';
|
|
17
18
|
export declare class ModelMetadataService {
|
|
18
19
|
private readonly modelMetadataRepo;
|
|
19
20
|
private readonly fieldMetadataRepo;
|
|
@@ -25,8 +26,9 @@ export declare class ModelMetadataService {
|
|
|
25
26
|
private readonly roleService;
|
|
26
27
|
private readonly moduleMetadataHelperService;
|
|
27
28
|
readonly introspectService: SolidIntrospectService;
|
|
29
|
+
private readonly solidTsMorphService;
|
|
28
30
|
private logger;
|
|
29
|
-
constructor(modelMetadataRepo: ModelMetadataRepository, fieldMetadataRepo: FieldMetadataRepository, schematicService: SchematicService, dataSource: DataSource, crudHelperService: CrudHelperService, mediaStorageProviderMetadataService: MediaStorageProviderMetadataService, fieldMetadataService: FieldMetadataService, roleService: RoleMetadataService, moduleMetadataHelperService: ModuleMetadataHelperService, introspectService: SolidIntrospectService);
|
|
31
|
+
constructor(modelMetadataRepo: ModelMetadataRepository, fieldMetadataRepo: FieldMetadataRepository, schematicService: SchematicService, dataSource: DataSource, crudHelperService: CrudHelperService, mediaStorageProviderMetadataService: MediaStorageProviderMetadataService, fieldMetadataService: FieldMetadataService, roleService: RoleMetadataService, moduleMetadataHelperService: ModuleMetadataHelperService, introspectService: SolidIntrospectService, solidTsMorphService: SolidTsMorphService);
|
|
30
32
|
find(basicFilterDto: BasicFilterDto): Promise<{
|
|
31
33
|
meta: {
|
|
32
34
|
totalRecords: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/model-metadata.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/model-metadata.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,6 +49,7 @@ exports.ModelMetadataService = void 0;
|
|
|
49
49
|
const common_1 = require("@nestjs/common");
|
|
50
50
|
const typeorm_1 = require("@nestjs/typeorm");
|
|
51
51
|
const fs = __importStar(require("fs/promises"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
52
53
|
const typeorm_2 = require("typeorm");
|
|
53
54
|
const model_metadata_entity_1 = require("../entities/model-metadata.entity");
|
|
54
55
|
const module_metadata_entity_1 = require("../entities/module-metadata.entity");
|
|
@@ -69,8 +70,9 @@ const field_metadata_service_1 = require("./field-metadata.service");
|
|
|
69
70
|
const media_storage_provider_metadata_service_1 = require("./media-storage-provider-metadata.service");
|
|
70
71
|
const role_metadata_service_1 = require("./role-metadata.service");
|
|
71
72
|
const solid_introspect_service_1 = require("./solid-introspect.service");
|
|
73
|
+
const solid_ts_morph_service_1 = require("./solid-ts-morph.service");
|
|
72
74
|
let ModelMetadataService = class ModelMetadataService {
|
|
73
|
-
constructor(modelMetadataRepo, fieldMetadataRepo, schematicService, dataSource, crudHelperService, mediaStorageProviderMetadataService, fieldMetadataService, roleService, moduleMetadataHelperService, introspectService) {
|
|
75
|
+
constructor(modelMetadataRepo, fieldMetadataRepo, schematicService, dataSource, crudHelperService, mediaStorageProviderMetadataService, fieldMetadataService, roleService, moduleMetadataHelperService, introspectService, solidTsMorphService) {
|
|
74
76
|
this.modelMetadataRepo = modelMetadataRepo;
|
|
75
77
|
this.fieldMetadataRepo = fieldMetadataRepo;
|
|
76
78
|
this.schematicService = schematicService;
|
|
@@ -81,6 +83,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
81
83
|
this.roleService = roleService;
|
|
82
84
|
this.moduleMetadataHelperService = moduleMetadataHelperService;
|
|
83
85
|
this.introspectService = introspectService;
|
|
86
|
+
this.solidTsMorphService = solidTsMorphService;
|
|
84
87
|
this.logger = new common_1.Logger('ModelMetadataService');
|
|
85
88
|
}
|
|
86
89
|
async find(basicFilterDto) {
|
|
@@ -209,6 +212,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
209
212
|
let userKeyField = null;
|
|
210
213
|
const listViewLayout = [];
|
|
211
214
|
const formViewLayout = [];
|
|
215
|
+
const treeViewLayout = [];
|
|
212
216
|
for (let k = 0; k < fieldsMetadata.length; k++) {
|
|
213
217
|
const fieldMetadata = fieldsMetadata[k];
|
|
214
218
|
fieldMetadata['model'] = model;
|
|
@@ -222,6 +226,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
222
226
|
}
|
|
223
227
|
listViewLayout.push({ type: "field", attrs: { name: `${affectedField.name}` } });
|
|
224
228
|
formViewLayout.push({ type: "field", attrs: { name: `${affectedField.name}` } });
|
|
229
|
+
treeViewLayout.push({ type: "field", attrs: { name: `${affectedField.name}` } });
|
|
225
230
|
}
|
|
226
231
|
if (userKeyField) {
|
|
227
232
|
modelMetaDataWithoutFields['userKeyField'] = userKeyField;
|
|
@@ -522,6 +527,21 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
522
527
|
const updatedContent = JSON.stringify(metaData, null, 2);
|
|
523
528
|
await fs.writeFile(filePath, updatedContent);
|
|
524
529
|
}
|
|
530
|
+
if (modulePath) {
|
|
531
|
+
const moduleFilePath = path.resolve(modulePath, `${(0, strings_1.dasherize)(modelEntity.module?.name)}.module.ts`);
|
|
532
|
+
this.logger.log(`Removing model '${modelEntity.singularName}' references from module file: ${moduleFilePath}`);
|
|
533
|
+
try {
|
|
534
|
+
this.solidTsMorphService.begin();
|
|
535
|
+
const modelPathSegment = `/${(0, strings_1.dasherize)(modelEntity.singularName)}.`;
|
|
536
|
+
const { removedIdentifiers } = this.solidTsMorphService.removeImports(moduleFilePath, spec => spec.includes(modelPathSegment));
|
|
537
|
+
this.solidTsMorphService.removeModuleMembers(moduleFilePath, removedIdentifiers);
|
|
538
|
+
await this.solidTsMorphService.commit();
|
|
539
|
+
}
|
|
540
|
+
catch (error) {
|
|
541
|
+
this.solidTsMorphService.rollback();
|
|
542
|
+
this.logger.error(`Failed to clean up module file for model '${modelEntity.singularName}':`, error);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
525
545
|
}
|
|
526
546
|
async handleGenerateCode(options) {
|
|
527
547
|
const affectedModelIds = [], refreshModelCodeOutputLines = [], removeFieldCodeOutputLines = [];
|
|
@@ -575,6 +595,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
575
595
|
const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);
|
|
576
596
|
const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);
|
|
577
597
|
const listViewLayoutFields = [{ type: "field", attrs: { name: `id` } }];
|
|
598
|
+
const treeViewLayoutFields = [{ type: "field", attrs: { name: `id` } }];
|
|
578
599
|
const formViewLayoutFields = [];
|
|
579
600
|
for (let i = 0; i < model.fields.length; i++) {
|
|
580
601
|
const field = model.fields[i];
|
|
@@ -582,8 +603,9 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
582
603
|
continue;
|
|
583
604
|
listViewLayoutFields.push({ type: "field", attrs: { name: `${field.name}` } });
|
|
584
605
|
formViewLayoutFields.push({ type: "field", attrs: { name: `${field.name}` } });
|
|
606
|
+
treeViewLayoutFields.push({ type: "field", attrs: { name: `${field.name}` } });
|
|
585
607
|
}
|
|
586
|
-
this.populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, metaData);
|
|
608
|
+
this.populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, treeViewLayoutFields, metaData);
|
|
587
609
|
const updatedContent = JSON.stringify(metaData, null, 2);
|
|
588
610
|
await fs.writeFile(filePath, updatedContent);
|
|
589
611
|
}
|
|
@@ -592,7 +614,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
592
614
|
throw new Error('File updation failed for View, action, menus config');
|
|
593
615
|
}
|
|
594
616
|
}
|
|
595
|
-
populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, metaData) {
|
|
617
|
+
populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, treeViewLayoutFields, metaData) {
|
|
596
618
|
const column1Fields = [];
|
|
597
619
|
const column2Fields = [];
|
|
598
620
|
for (let i = 0; i < formViewLayoutFields.length; i++) {
|
|
@@ -604,7 +626,9 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
604
626
|
}
|
|
605
627
|
}
|
|
606
628
|
const actionName = `${model.singularName}-list-action`;
|
|
607
|
-
const
|
|
629
|
+
const treeViewActionName = `${model.singularName}-tree-view-action`;
|
|
630
|
+
const listViewName = `${model.singularName}-list-view`;
|
|
631
|
+
const treeViewName = `${model.singularName}-tree-view`;
|
|
608
632
|
const formViewName = `${model.singularName}-form-view`;
|
|
609
633
|
const menuName = `${model.singularName}-menu-item`;
|
|
610
634
|
const action = {
|
|
@@ -616,7 +640,20 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
616
640
|
customComponent: ``,
|
|
617
641
|
customIsModal: true,
|
|
618
642
|
serverEndpoint: "",
|
|
619
|
-
viewUserKey:
|
|
643
|
+
viewUserKey: listViewName,
|
|
644
|
+
moduleUserKey: `${model.module.name}`,
|
|
645
|
+
modelUserKey: `${model.singularName}`
|
|
646
|
+
};
|
|
647
|
+
const treeViewAction = {
|
|
648
|
+
displayName: `${model.displayName} Tree View Action`,
|
|
649
|
+
name: treeViewActionName,
|
|
650
|
+
type: "solid",
|
|
651
|
+
domain: "",
|
|
652
|
+
context: "",
|
|
653
|
+
customComponent: ``,
|
|
654
|
+
customIsModal: true,
|
|
655
|
+
serverEndpoint: "",
|
|
656
|
+
viewUserKey: treeViewName,
|
|
620
657
|
moduleUserKey: `${model.module.name}`,
|
|
621
658
|
modelUserKey: `${model.singularName}`
|
|
622
659
|
};
|
|
@@ -630,7 +667,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
630
667
|
iconName: ""
|
|
631
668
|
};
|
|
632
669
|
const modelListview = {
|
|
633
|
-
name:
|
|
670
|
+
name: listViewName,
|
|
634
671
|
displayName: `${model.displayName}`,
|
|
635
672
|
type: "list",
|
|
636
673
|
context: "{}",
|
|
@@ -653,6 +690,30 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
653
690
|
children: listViewLayoutFields
|
|
654
691
|
}
|
|
655
692
|
};
|
|
693
|
+
const modelTreeview = {
|
|
694
|
+
name: treeViewName,
|
|
695
|
+
displayName: `${model.displayName}`,
|
|
696
|
+
type: "tree",
|
|
697
|
+
context: "{}",
|
|
698
|
+
moduleUserKey: `${model.module.name}`,
|
|
699
|
+
modelUserKey: `${model.singularName}`,
|
|
700
|
+
layout: {
|
|
701
|
+
type: "tree",
|
|
702
|
+
attrs: {
|
|
703
|
+
pagination: true,
|
|
704
|
+
pageSizeOptions: [
|
|
705
|
+
10,
|
|
706
|
+
25,
|
|
707
|
+
50
|
|
708
|
+
],
|
|
709
|
+
enableGlobalSearch: true,
|
|
710
|
+
create: true,
|
|
711
|
+
edit: true,
|
|
712
|
+
delete: true
|
|
713
|
+
},
|
|
714
|
+
children: treeViewLayoutFields
|
|
715
|
+
}
|
|
716
|
+
};
|
|
656
717
|
const modelFormView = {
|
|
657
718
|
name: formViewName,
|
|
658
719
|
displayName: `${model.displayName}`,
|
|
@@ -696,9 +757,15 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
696
757
|
if (notExists(metaData.actions, actionName)) {
|
|
697
758
|
metaData.actions.push(action);
|
|
698
759
|
}
|
|
699
|
-
if (notExists(metaData.
|
|
760
|
+
if (notExists(metaData.actions, treeViewActionName)) {
|
|
761
|
+
metaData.actions.push(treeViewAction);
|
|
762
|
+
}
|
|
763
|
+
if (notExists(metaData.views, listViewName)) {
|
|
700
764
|
metaData.views.push(modelListview);
|
|
701
765
|
}
|
|
766
|
+
if (notExists(metaData.views, treeViewName)) {
|
|
767
|
+
metaData.views.push(modelTreeview);
|
|
768
|
+
}
|
|
702
769
|
if (notExists(metaData.views, formViewName)) {
|
|
703
770
|
metaData.views.push(modelFormView);
|
|
704
771
|
}
|
|
@@ -712,6 +779,13 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
712
779
|
isSearchable: true,
|
|
713
780
|
}
|
|
714
781
|
}));
|
|
782
|
+
const treeViewLayout = jsonFieldsList.map(field => ({
|
|
783
|
+
type: "field",
|
|
784
|
+
attrs: {
|
|
785
|
+
name: `${field.name}`,
|
|
786
|
+
isSearchable: true,
|
|
787
|
+
}
|
|
788
|
+
}));
|
|
715
789
|
const formViewLayout = jsonFieldsList.map(field => ({
|
|
716
790
|
type: "field",
|
|
717
791
|
attrs: {
|
|
@@ -748,6 +822,26 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
748
822
|
children: listViewLayout
|
|
749
823
|
}, null, 3)
|
|
750
824
|
},
|
|
825
|
+
{
|
|
826
|
+
name: `${model.singularName}-tree-view`,
|
|
827
|
+
displayName: `${model.displayName}`,
|
|
828
|
+
type: 'tree',
|
|
829
|
+
context: "{}",
|
|
830
|
+
module: resolvedModule,
|
|
831
|
+
model: model,
|
|
832
|
+
layout: JSON.stringify({
|
|
833
|
+
type: "tree",
|
|
834
|
+
attrs: {
|
|
835
|
+
pagination: true,
|
|
836
|
+
pageSizeOptions: [10, 25, 50],
|
|
837
|
+
enableGlobalSearch: true,
|
|
838
|
+
create: true,
|
|
839
|
+
edit: true,
|
|
840
|
+
delete: true
|
|
841
|
+
},
|
|
842
|
+
children: treeViewLayout
|
|
843
|
+
}, null, 3)
|
|
844
|
+
},
|
|
751
845
|
{
|
|
752
846
|
name: `${model.singularName}-form-view`,
|
|
753
847
|
displayName: `${model.displayName}`,
|
|
@@ -793,6 +887,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
793
887
|
}
|
|
794
888
|
}
|
|
795
889
|
let view = await viewRepo.findOne({ where: { name: `${model.singularName}-list-view` } });
|
|
890
|
+
let treeView = await viewRepo.findOne({ where: { name: `${model.singularName}-tree-view` } });
|
|
796
891
|
const actionData = {
|
|
797
892
|
displayName: `${model.displayName} List Action`,
|
|
798
893
|
name: `${model.singularName}-list-action`,
|
|
@@ -806,11 +901,29 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
806
901
|
module: resolvedModule,
|
|
807
902
|
model: model
|
|
808
903
|
};
|
|
904
|
+
const treeViewActionData = {
|
|
905
|
+
displayName: `${model.displayName} Tree View Action`,
|
|
906
|
+
name: `${model.singularName}-tree-view-action`,
|
|
907
|
+
type: "solid",
|
|
908
|
+
domain: "",
|
|
909
|
+
context: "",
|
|
910
|
+
customComponent: ``,
|
|
911
|
+
customIsModal: true,
|
|
912
|
+
serverEndpoint: "",
|
|
913
|
+
view: treeView,
|
|
914
|
+
module: resolvedModule,
|
|
915
|
+
model: model
|
|
916
|
+
};
|
|
809
917
|
let existingAction = await actionRepo.findOne({ where: { name: actionData.name } });
|
|
918
|
+
let existingTreeViewAction = await actionRepo.findOne({ where: { name: treeViewActionData.name } });
|
|
810
919
|
if (!existingAction) {
|
|
811
920
|
const createdAction = actionRepo.create(actionData);
|
|
812
921
|
existingAction = await actionRepo.save(createdAction);
|
|
813
922
|
}
|
|
923
|
+
if (!existingTreeViewAction) {
|
|
924
|
+
const createdTreeViewAction = actionRepo.create(treeViewActionData);
|
|
925
|
+
existingTreeViewAction = await actionRepo.save(createdTreeViewAction);
|
|
926
|
+
}
|
|
814
927
|
const adminRole = await this.roleService.findRoleByName('Admin');
|
|
815
928
|
const menuData = {
|
|
816
929
|
displayName: `${model.displayName}`,
|
|
@@ -1077,6 +1190,7 @@ exports.ModelMetadataService = ModelMetadataService = __decorate([
|
|
|
1077
1190
|
field_metadata_service_1.FieldMetadataService,
|
|
1078
1191
|
role_metadata_service_1.RoleMetadataService,
|
|
1079
1192
|
module_metadata_helper_service_1.ModuleMetadataHelperService,
|
|
1080
|
-
solid_introspect_service_1.SolidIntrospectService
|
|
1193
|
+
solid_introspect_service_1.SolidIntrospectService,
|
|
1194
|
+
solid_ts_morph_service_1.SolidTsMorphService])
|
|
1081
1195
|
], ModelMetadataService);
|
|
1082
1196
|
//# sourceMappingURL=model-metadata.service.js.map
|