@things-factory/meta-ui 10.1.36 → 10.1.38

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.
@@ -4,6 +4,6 @@ export * from './work-code-detail/work-code-detail';
4
4
  export * from './work-code/work-code';
5
5
  export declare const entities: (typeof import("./button-role/button-role").ButtonRole | typeof import("./menu-button-auth/menu-button-auth").MenuButtonAuth | typeof import("./work-code/work-code").WorkCode | typeof import("./work-code-detail/work-code-detail").WorkCodeDetail)[];
6
6
  export declare const schema: {
7
- resolverClasses: (typeof import("./button-role/button-role-query").ButtonRoleQuery | typeof import("./button-role/button-role-mutation").ButtonRoleMutation | typeof import("./menu-button-auth/menu-button-auth-query").MenuButtonAuthQuery | typeof import("./menu-button-auth/menu-button-auth-mutation").MenuButtonAuthMutation | typeof import("./set-translations/set-translation-resolver").SetTranslationResolver | typeof import("./meta-activity/meta-activity-mutation").MetaActivityMutation | typeof import("./meta-activity/meta-activity-query").MetaActivityQuery | typeof import("./work-code-detail/work-code-detail-query").WorkCodeDetailQuery | typeof import("./work-code-detail/work-code-detail-mutation").WorkCodeDetailMutation | typeof import("./work-code/work-code-query").WorkCodeQuery | typeof import("./work-code/work-code-mutation").WorkCodeMutation | typeof import("./dynamic-menu/dynamic-menu-query").DynamicMenuQuery)[];
7
+ resolverClasses: (typeof import("./button-role/button-role-query").ButtonRoleQuery | typeof import("./button-role/button-role-mutation").ButtonRoleMutation | typeof import("./menu-button-auth/menu-button-auth-query").MenuButtonAuthQuery | typeof import("./menu-button-auth/menu-button-auth-mutation").MenuButtonAuthMutation | typeof import("./meta-activity/meta-activity-mutation").MetaActivityMutation | typeof import("./meta-activity/meta-activity-query").MetaActivityQuery | typeof import("./work-code-detail/work-code-detail-query").WorkCodeDetailQuery | typeof import("./work-code-detail/work-code-detail-mutation").WorkCodeDetailMutation | typeof import("./work-code/work-code-query").WorkCodeQuery | typeof import("./work-code/work-code-mutation").WorkCodeMutation | typeof import("./dynamic-menu/dynamic-menu-query").DynamicMenuQuery | typeof import("./set-translations/set-translation-resolver").SetTranslationResolver)[];
8
8
  };
9
9
  export declare const subscribers: typeof import("./entity-event-subscriber/entity-event-subscriber").EntityEventSubscriber[];
@@ -1,7 +1,7 @@
1
1
  import { Activity } from '@things-factory/worklist';
2
2
  import { MetaActivityPatch } from './meta-activity-type';
3
3
  export declare class MetaActivityMutation {
4
- findMenuModel(tx: any, menuObj: any): Promise<({
4
+ findMenuModel(tx: any, menuObj: any, domain: any): Promise<({
5
5
  name: string;
6
6
  description: string;
7
7
  inout?: undefined;
@@ -12,10 +12,14 @@ const path = require('path');
12
12
  const { appRootPath } = require('@things-factory/env');
13
13
  const AppPackage = require(path.resolve(appRootPath, 'package.json'));
14
14
  let MetaActivityMutation = class MetaActivityMutation {
15
- async findMenuModel(tx, menuObj) {
15
+ /*
16
+ * Only this domain's menu. Unnarrowed, an id from another tenant embedded that tenant's menu name and
17
+ * routing in this domain's activity, and from there in the installed template.
18
+ */
19
+ async findMenuModel(tx, menuObj, domain) {
16
20
  if (!menuObj)
17
21
  return [];
18
- let menu = await tx.getRepository(menu_base_1.Menu).findOne({ where: { id: menuObj.id } });
22
+ let menu = await tx.getRepository(menu_base_1.Menu).findOne({ where: { domain: { id: domain.id }, id: menuObj.id } });
19
23
  if (!menu)
20
24
  return [];
21
25
  return [
@@ -72,7 +76,7 @@ let MetaActivityMutation = class MetaActivityMutation {
72
76
  if (_createRecords.length > 0) {
73
77
  for (let i = 0; i < _createRecords.length; i++) {
74
78
  const newRecord = _createRecords[i];
75
- let model = await this.findMenuModel(tx, newRecord.menu);
79
+ let model = await this.findMenuModel(tx, newRecord.menu, domain);
76
80
  const trxRecord = {
77
81
  ...newRecord,
78
82
  model,
@@ -88,12 +92,20 @@ let MetaActivityMutation = class MetaActivityMutation {
88
92
  if (_updateRecords.length > 0) {
89
93
  for (let i = 0; i < _updateRecords.length; i++) {
90
94
  const updateRecord = _updateRecords[i];
91
- let model = await this.findMenuModel(tx, updateRecord.menu);
95
+ let model = await this.findMenuModel(tx, updateRecord.menu, domain);
96
+ /*
97
+ * Only this domain's activity. Unnarrowed, an id from another tenant loaded that tenant's row and
98
+ * the save below wrote this patch over it - its domain kept, so the other tenant's definition
99
+ * changed. An id that is not here is refused by name rather than saved as something new.
100
+ */
92
101
  const activity = await activityRepo.findOne({
93
- where: { id: updateRecord.id },
102
+ where: { domain: { id: domain.id }, id: updateRecord.id },
94
103
  /* history에 항상 반영될 수 있도록 relations가 있어야 함. */
95
104
  relations: ['domain', 'creator', 'updater']
96
105
  });
106
+ if (!activity) {
107
+ throw new Error(context.t('error.meta-activity not in this domain', { id: updateRecord.id }));
108
+ }
97
109
  const trxRecord = {
98
110
  ...activity,
99
111
  ...updateRecord,
@@ -112,8 +124,14 @@ let MetaActivityMutation = class MetaActivityMutation {
112
124
  let activityRepo = tx.getRepository(worklist_1.Activity);
113
125
  let deleteActivities = [];
114
126
  for (let i = 0; i < ids.length; i++) {
115
- deleteActivities.push(await activityRepo.findOne({
116
- where: { id: ids[i] }
127
+ deleteActivities.push(
128
+ /*
129
+ * Narrowed to this domain. Unnarrowed, an id from another tenant loaded that tenant's activity,
130
+ * and removeActivityTemplate below then dropped its template from the process-wide
131
+ * installations - an effect on every domain, reachable from any one.
132
+ */
133
+ await activityRepo.findOne({
134
+ where: { domain: { id: domain.id }, id: ids[i] }
117
135
  }));
118
136
  }
119
137
  await tx.getRepository(worklist_1.Activity).delete({
@@ -172,6 +190,7 @@ tslib_1.__decorate([
172
190
  ], MetaActivityMutation.prototype, "updateMultipleMetaActivity", null);
173
191
  tslib_1.__decorate([
174
192
  (0, type_graphql_1.Directive)('@transaction'),
193
+ (0, type_graphql_1.Directive)('@privilege(category: "activity", privilege: "mutation", domainOwnerGranted: true)'),
175
194
  (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To delete multiple MetaActivities' }),
176
195
  tslib_1.__param(0, (0, type_graphql_1.Arg)('ids', type => [String])),
177
196
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
@@ -181,6 +200,7 @@ tslib_1.__decorate([
181
200
  ], MetaActivityMutation.prototype, "deleteMetaActivities", null);
182
201
  tslib_1.__decorate([
183
202
  (0, type_graphql_1.Directive)('@transaction'),
203
+ (0, type_graphql_1.Directive)('@privilege(category: "activity", privilege: "mutation", domainOwnerGranted: true)'),
184
204
  (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To install Activity Templates' }),
185
205
  tslib_1.__param(0, (0, type_graphql_1.Ctx)()),
186
206
  tslib_1.__metadata("design:type", Function),
@@ -1 +1 @@
1
- {"version":3,"file":"meta-activity-mutation.js","sourceRoot":"","sources":["../../../server/service/meta-activity/meta-activity-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { In } from 'typeorm'\nimport { ActivityInstallations, Activity, ActivityStatus, ActivityTemplate } from '@things-factory/worklist'\nimport { MetaActivityPatch } from './meta-activity-type'\nimport { Menu } from '@things-factory/menu-base'\nimport { callback } from './../../activity/CommonActivity'\nconst path = require('path')\nconst { appRootPath } = require('@things-factory/env')\nconst AppPackage = require(path.resolve(appRootPath, 'package.json'))\n\n@Resolver(Activity)\nexport class MetaActivityMutation {\n async findMenuModel(tx: any, menuObj: any) {\n if (!menuObj) return []\n\n let menu = await tx.getRepository(Menu).findOne({ where: { id: menuObj.id } })\n if (!menu) return []\n\n return [\n {\n name: 'relation-menu',\n description: JSON.stringify({\n id: menu.id,\n name: menu.name,\n routing: menu.routing\n })\n },\n {\n name: 'customData',\n inout: 'inout'\n }\n ]\n }\n\n async removeActivityTemplate(activity: Activity) {\n if (activity) {\n if (ActivityInstallations.get(activity.name)) {\n delete ActivityInstallations.templates[activity.name]\n }\n }\n }\n\n async addActivityTemplate(activity: Activity) {\n if (activity.state == ActivityStatus.Released) {\n ActivityInstallations.installActivityTemplate({\n name: `${activity.name}`,\n release: AppPackage.version,\n description: activity.description,\n provider: AppPackage.provider,\n // category: activity.category,\n activityType: activity.activityType,\n priority: activity.priority,\n // searchKeys: [],\n // startable: true,\n startingType: activity.startingType,\n model: activity.model,\n uiType: activity.uiType,\n uiSource: activity.uiSource,\n viewType: activity.viewType,\n viewSource: activity.viewSource,\n activity: activity,\n callback\n })\n }\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"activity\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => [Activity], { description: \"To modify multiple MetaActivities' information\" })\n async updateMultipleMetaActivity(\n @Arg('patches', type => [MetaActivityPatch]) patches: MetaActivityPatch[],\n @Ctx() context: ResolverContext\n ): Promise<Activity[]> {\n const { domain, user, tx } = context.state\n\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const activityRepo = tx.getRepository(Activity)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n let model = await this.findMenuModel(tx, newRecord.menu)\n const trxRecord = {\n ...newRecord,\n model,\n domain,\n creator: user,\n updater: user\n }\n const result = await activityRepo.save(trxRecord as any)\n results.push({ ...result, cuFlag: '+' })\n this.addActivityTemplate(trxRecord as any)\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const updateRecord = _updateRecords[i]\n let model = await this.findMenuModel(tx, updateRecord.menu)\n const activity = await activityRepo.findOne({\n where: { id: updateRecord.id },\n /* history에 항상 반영될 수 있도록 relations가 있어야 함. */\n relations: ['domain', 'creator', 'updater']\n })\n\n const trxRecord = {\n ...activity,\n ...updateRecord,\n model,\n updater: user\n }\n\n const result = await activityRepo.save(trxRecord as any)\n results.push({ ...result, cuFlag: 'M' })\n this.addActivityTemplate(trxRecord as any)\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete multiple MetaActivities' })\n async deleteMetaActivities(\n @Arg('ids', type => [String]) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n let activityRepo = tx.getRepository(Activity)\n let deleteActivities: Activity[] = []\n for (let i = 0; i < ids.length; i++) {\n deleteActivities.push(\n await activityRepo.findOne({\n where: { id: ids[i] }\n })\n )\n }\n\n await tx.getRepository(Activity).delete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n for (let i = 0; i < deleteActivities.length; i++) {\n await this.removeActivityTemplate(deleteActivities[i])\n }\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To install Activity Templates' })\n async installActivityTemplate(@Ctx() context: ResolverContext): Promise<Boolean> {\n const { domain, tx } = context.state\n const releaseActivityTemplates: Activity[] = await tx.getRepository(Activity).find({\n where: {\n domain: { id: domain.id },\n state: ActivityStatus.Released\n }\n })\n\n ;(releaseActivityTemplates || []).forEach(activity => {\n if (activity.model && activity.model.some(x => x.name == 'relation-menu')) {\n ActivityInstallations.installActivityTemplate({\n name: `${activity.name}`,\n release: AppPackage.version,\n description: activity.description,\n provider: AppPackage.provider,\n // category: activity.category,\n activityType: activity.activityType,\n priority: activity.priority,\n // searchKeys: [],\n // startable: true,\n startingType: activity.startingType,\n model: activity.model,\n uiType: activity.uiType,\n uiSource: activity.uiSource,\n viewType: activity.viewType,\n viewSource: activity.viewSource,\n activity: activity,\n callback\n })\n }\n })\n\n return true\n }\n}\n"]}
1
+ {"version":3,"file":"meta-activity-mutation.js","sourceRoot":"","sources":["../../../server/service/meta-activity/meta-activity-mutation.ts"],"names":[],"mappings":";;;;AAAA,+CAAsE;AACtE,qCAA4B;AAC5B,uDAA4G;AAC5G,6DAAwD;AACxD,yDAAgD;AAChD,oEAA0D;AAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;AACtD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAA;AAG9D,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,EAAO,EAAE,OAAY,EAAE,MAAW;QACpD,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAA;QAEvB,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,gBAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QACzG,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAA;QAEpB,OAAO;YACL;gBACE,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC;oBAC1B,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,OAAO,EAAE,IAAI,CAAC,OAAO;iBACtB,CAAC;aACH;YACD;gBACE,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,OAAO;aACf;SACF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,QAAkB;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,gCAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,OAAO,gCAAqB,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,QAAkB;QAC1C,IAAI,QAAQ,CAAC,KAAK,IAAI,yBAAc,CAAC,QAAQ,EAAE,CAAC;YAC9C,gCAAqB,CAAC,uBAAuB,CAAC;gBAC5C,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE;gBACxB,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,+BAA+B;gBAC/B,YAAY,EAAE,QAAQ,CAAC,YAAY;gBACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,kBAAkB;gBAClB,mBAAmB;gBACnB,YAAY,EAAE,QAAQ,CAAC,YAAY;gBACnC,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAR,yBAAQ;aACT,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAKK,AAAN,KAAK,CAAC,0BAA0B,CACe,OAA4B,EAClE,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1C,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAA;QACzF,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAA;QACzF,MAAM,YAAY,GAAG,EAAE,CAAC,aAAa,CAAC,mBAAQ,CAAC,CAAA;QAE/C,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;gBACnC,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;gBAChE,MAAM,SAAS,GAAG;oBAChB,GAAG,SAAS;oBACZ,KAAK;oBACL,MAAM;oBACN,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,IAAI;iBACd,CAAA;gBACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,SAAgB,CAAC,CAAA;gBACxD,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;gBACxC,IAAI,CAAC,mBAAmB,CAAC,SAAgB,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;gBACtC,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;gBACnE;;;;mBAIG;gBACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC;oBAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE;oBACzD,6CAA6C;oBAC7C,SAAS,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;iBAC5C,CAAC,CAAA;gBAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wCAAwC,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;gBAC/F,CAAC;gBAED,MAAM,SAAS,GAAG;oBAChB,GAAG,QAAQ;oBACX,GAAG,YAAY;oBACf,KAAK;oBACL,OAAO,EAAE,IAAI;iBACd,CAAA;gBAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,SAAgB,CAAC,CAAA;gBACxD,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;gBACxC,IAAI,CAAC,mBAAmB,CAAC,SAAgB,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAKK,AAAN,KAAK,CAAC,oBAAoB,CACM,GAAa,EACpC,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,IAAI,YAAY,GAAG,EAAE,CAAC,aAAa,CAAC,mBAAQ,CAAC,CAAA;QAC7C,IAAI,gBAAgB,GAAe,EAAE,CAAA;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,gBAAgB,CAAC,IAAI;YACnB;;;;eAIG;YACH,MAAM,YAAY,CAAC,OAAO,CAAC;gBACzB,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE;aACjD,CAAC,CACH,CAAA;QACH,CAAC;QAED,MAAM,EAAE,CAAC,aAAa,CAAC,mBAAQ,CAAC,CAAC,MAAM,CAAC;YACtC,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;YACzB,EAAE,EAAE,IAAA,YAAE,EAAC,GAAG,CAAC;SACZ,CAAC,CAAA;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAM,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;QACxD,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAKK,AAAN,KAAK,CAAC,uBAAuB,CAAQ,OAAwB;QAC3D,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QACpC,MAAM,wBAAwB,GAAe,MAAM,EAAE,CAAC,aAAa,CAAC,mBAAQ,CAAC,CAAC,IAAI,CAAC;YACjF,KAAK,EAAE;gBACL,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;gBACzB,KAAK,EAAE,yBAAc,CAAC,QAAQ;aAC/B;SACF,CAAC,CAED;QAAA,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACnD,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,EAAE,CAAC;gBAC1E,gCAAqB,CAAC,uBAAuB,CAAC;oBAC5C,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE;oBACxB,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,+BAA+B;oBAC/B,YAAY,EAAE,QAAQ,CAAC,YAAY;oBACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,kBAAkB;oBAClB,mBAAmB;oBACnB,YAAY,EAAE,QAAQ,CAAC,YAAY;oBACnC,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,QAAQ,EAAE,QAAQ;oBAClB,QAAQ,EAAR,yBAAQ;iBACT,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA;AAvMY,oDAAoB;AA8DzB;IAHL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,wBAAS,EAAC,mFAAmF,CAAC;IAC9F,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,mBAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,gDAAgD,EAAE,CAAC;IAEhG,mBAAA,IAAA,kBAAG,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,sCAAiB,CAAC,CAAC,CAAA;IAC3C,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;sEA2DP;AAKK;IAHL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,wBAAS,EAAC,mFAAmF,CAAC;IAC9F,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC;IAEhF,mBAAA,IAAA,kBAAG,EAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAC5B,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;gEA6BP;AAKK;IAHL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,wBAAS,EAAC,mFAAmF,CAAC;IAC9F,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;IAChD,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;mEAkCnC;+BAtMU,oBAAoB;IADhC,IAAA,uBAAQ,EAAC,mBAAQ,CAAC;GACN,oBAAoB,CAuMhC","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { In } from 'typeorm'\nimport { ActivityInstallations, Activity, ActivityStatus, ActivityTemplate } from '@things-factory/worklist'\nimport { MetaActivityPatch } from './meta-activity-type'\nimport { Menu } from '@things-factory/menu-base'\nimport { callback } from './../../activity/CommonActivity'\nconst path = require('path')\nconst { appRootPath } = require('@things-factory/env')\nconst AppPackage = require(path.resolve(appRootPath, 'package.json'))\n\n@Resolver(Activity)\nexport class MetaActivityMutation {\n /*\n * Only this domain's menu. Unnarrowed, an id from another tenant embedded that tenant's menu name and\n * routing in this domain's activity, and from there in the installed template.\n */\n async findMenuModel(tx: any, menuObj: any, domain: any) {\n if (!menuObj) return []\n\n let menu = await tx.getRepository(Menu).findOne({ where: { domain: { id: domain.id }, id: menuObj.id } })\n if (!menu) return []\n\n return [\n {\n name: 'relation-menu',\n description: JSON.stringify({\n id: menu.id,\n name: menu.name,\n routing: menu.routing\n })\n },\n {\n name: 'customData',\n inout: 'inout'\n }\n ]\n }\n\n async removeActivityTemplate(activity: Activity) {\n if (activity) {\n if (ActivityInstallations.get(activity.name)) {\n delete ActivityInstallations.templates[activity.name]\n }\n }\n }\n\n async addActivityTemplate(activity: Activity) {\n if (activity.state == ActivityStatus.Released) {\n ActivityInstallations.installActivityTemplate({\n name: `${activity.name}`,\n release: AppPackage.version,\n description: activity.description,\n provider: AppPackage.provider,\n // category: activity.category,\n activityType: activity.activityType,\n priority: activity.priority,\n // searchKeys: [],\n // startable: true,\n startingType: activity.startingType,\n model: activity.model,\n uiType: activity.uiType,\n uiSource: activity.uiSource,\n viewType: activity.viewType,\n viewSource: activity.viewSource,\n activity: activity,\n callback\n })\n }\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"activity\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => [Activity], { description: \"To modify multiple MetaActivities' information\" })\n async updateMultipleMetaActivity(\n @Arg('patches', type => [MetaActivityPatch]) patches: MetaActivityPatch[],\n @Ctx() context: ResolverContext\n ): Promise<Activity[]> {\n const { domain, user, tx } = context.state\n\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const activityRepo = tx.getRepository(Activity)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n let model = await this.findMenuModel(tx, newRecord.menu, domain)\n const trxRecord = {\n ...newRecord,\n model,\n domain,\n creator: user,\n updater: user\n }\n const result = await activityRepo.save(trxRecord as any)\n results.push({ ...result, cuFlag: '+' })\n this.addActivityTemplate(trxRecord as any)\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const updateRecord = _updateRecords[i]\n let model = await this.findMenuModel(tx, updateRecord.menu, domain)\n /*\n * Only this domain's activity. Unnarrowed, an id from another tenant loaded that tenant's row and\n * the save below wrote this patch over it - its domain kept, so the other tenant's definition\n * changed. An id that is not here is refused by name rather than saved as something new.\n */\n const activity = await activityRepo.findOne({\n where: { domain: { id: domain.id }, id: updateRecord.id },\n /* history에 항상 반영될 수 있도록 relations가 있어야 함. */\n relations: ['domain', 'creator', 'updater']\n })\n\n if (!activity) {\n throw new Error(context.t('error.meta-activity not in this domain', { id: updateRecord.id }))\n }\n\n const trxRecord = {\n ...activity,\n ...updateRecord,\n model,\n updater: user\n }\n\n const result = await activityRepo.save(trxRecord as any)\n results.push({ ...result, cuFlag: 'M' })\n this.addActivityTemplate(trxRecord as any)\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"activity\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To delete multiple MetaActivities' })\n async deleteMetaActivities(\n @Arg('ids', type => [String]) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n let activityRepo = tx.getRepository(Activity)\n let deleteActivities: Activity[] = []\n for (let i = 0; i < ids.length; i++) {\n deleteActivities.push(\n /*\n * Narrowed to this domain. Unnarrowed, an id from another tenant loaded that tenant's activity,\n * and removeActivityTemplate below then dropped its template from the process-wide\n * installations - an effect on every domain, reachable from any one.\n */\n await activityRepo.findOne({\n where: { domain: { id: domain.id }, id: ids[i] }\n })\n )\n }\n\n await tx.getRepository(Activity).delete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n for (let i = 0; i < deleteActivities.length; i++) {\n await this.removeActivityTemplate(deleteActivities[i])\n }\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"activity\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To install Activity Templates' })\n async installActivityTemplate(@Ctx() context: ResolverContext): Promise<Boolean> {\n const { domain, tx } = context.state\n const releaseActivityTemplates: Activity[] = await tx.getRepository(Activity).find({\n where: {\n domain: { id: domain.id },\n state: ActivityStatus.Released\n }\n })\n\n ;(releaseActivityTemplates || []).forEach(activity => {\n if (activity.model && activity.model.some(x => x.name == 'relation-menu')) {\n ActivityInstallations.installActivityTemplate({\n name: `${activity.name}`,\n release: AppPackage.version,\n description: activity.description,\n provider: AppPackage.provider,\n // category: activity.category,\n activityType: activity.activityType,\n priority: activity.priority,\n // searchKeys: [],\n // startable: true,\n startingType: activity.startingType,\n model: activity.model,\n uiType: activity.uiType,\n uiSource: activity.uiSource,\n viewType: activity.viewType,\n viewSource: activity.viewSource,\n activity: activity,\n callback\n })\n }\n })\n\n return true\n }\n}\n"]}