@dssp/supervision 0.0.36 → 1.0.0-alpha.1

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.
Files changed (106) hide show
  1. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js +1 -1
  2. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js.map +1 -1
  3. package/dist-client/pages/checklist/checklist-view.js +2 -5
  4. package/dist-client/pages/checklist/checklist-view.js.map +1 -1
  5. package/dist-client/route.d.ts +1 -1
  6. package/dist-client/tsconfig.tsbuildinfo +1 -1
  7. package/dist-server/service/index.d.ts +1 -1
  8. package/dist-server/tsconfig.tsbuildinfo +1 -1
  9. package/package.json +13 -13
  10. package/client/bootstrap.ts +0 -1
  11. package/client/index.ts +0 -0
  12. package/client/pages/action-plan/action-plan-importer.ts +0 -94
  13. package/client/pages/action-plan/action-plan-list-page.ts +0 -340
  14. package/client/pages/building-inspection/building-inspection-detail-camera.ts +0 -277
  15. package/client/pages/building-inspection/building-inspection-detail-checklist.ts +0 -258
  16. package/client/pages/building-inspection/building-inspection-detail-drawing.ts +0 -288
  17. package/client/pages/building-inspection/building-inspection-list.ts +0 -565
  18. package/client/pages/building-inspection/component/building-inspection-detail-header.ts +0 -123
  19. package/client/pages/building-inspection/component/inspection-event-provider.ts +0 -81
  20. package/client/pages/building-inspection/inspection-create-popup.ts +0 -785
  21. package/client/pages/checklist/attachment-list-popup.ts +0 -301
  22. package/client/pages/checklist/checklist-view.ts +0 -581
  23. package/client/pages/checklist/comment-list-popup.ts +0 -328
  24. package/client/pages/checklist/file-preview-popup.ts +0 -70
  25. package/client/pages/checklist-template/checklist-template-item.ts +0 -240
  26. package/client/pages/checklist-template/checklist-template-list.ts +0 -368
  27. package/client/pages/checklist-template/checklist-type-management.ts +0 -262
  28. package/client/pages/issue/issue-importer.ts +0 -94
  29. package/client/pages/issue/issue-list-page.ts +0 -340
  30. package/client/pages/project-report/project-report-importer.ts +0 -94
  31. package/client/pages/project-report/project-report-list-page.ts +0 -340
  32. package/client/pages/supervisor/supervisor-importer.ts +0 -94
  33. package/client/pages/supervisor/supervisor-list-page.ts +0 -340
  34. package/client/route.ts +0 -27
  35. package/client/tsconfig.json +0 -11
  36. package/dist-client/pages/checklist/comment-list-popup copy.d.ts +0 -2
  37. package/dist-client/pages/checklist/comment-list-popup copy.js +0 -344
  38. package/dist-client/pages/checklist/comment-list-popup copy.js.map +0 -1
  39. package/server/controllers/index.ts +0 -0
  40. package/server/index.ts +0 -4
  41. package/server/middlewares/index.ts +0 -3
  42. package/server/migrations/index.ts +0 -9
  43. package/server/routes.ts +0 -28
  44. package/server/service/action-plan/action-plan-mutation.ts +0 -198
  45. package/server/service/action-plan/action-plan-query.ts +0 -62
  46. package/server/service/action-plan/action-plan-type.ts +0 -61
  47. package/server/service/action-plan/action-plan.ts +0 -103
  48. package/server/service/action-plan/index.ts +0 -7
  49. package/server/service/building-inspection/building-inspection-history.ts +0 -72
  50. package/server/service/building-inspection/building-inspection-mutation.ts +0 -276
  51. package/server/service/building-inspection/building-inspection-query.ts +0 -242
  52. package/server/service/building-inspection/building-inspection-type.ts +0 -145
  53. package/server/service/building-inspection/building-inspection.ts +0 -108
  54. package/server/service/building-inspection/event-subscriber.ts +0 -20
  55. package/server/service/building-inspection/index.ts +0 -11
  56. package/server/service/checklist/checklist-history.ts +0 -96
  57. package/server/service/checklist/checklist-mutation.ts +0 -103
  58. package/server/service/checklist/checklist-query.ts +0 -58
  59. package/server/service/checklist/checklist-type.ts +0 -49
  60. package/server/service/checklist/checklist.ts +0 -127
  61. package/server/service/checklist/event-subscriber.ts +0 -17
  62. package/server/service/checklist/index.ts +0 -9
  63. package/server/service/checklist-item/checklist-item-mutation.ts +0 -5
  64. package/server/service/checklist-item/checklist-item-query.ts +0 -84
  65. package/server/service/checklist-item/checklist-item-type.ts +0 -12
  66. package/server/service/checklist-item/checklist-item.ts +0 -103
  67. package/server/service/checklist-item/index.ts +0 -7
  68. package/server/service/checklist-item-comment/checklist-item-comment-history.ts +0 -69
  69. package/server/service/checklist-item-comment/checklist-item-comment-mutation.ts +0 -80
  70. package/server/service/checklist-item-comment/checklist-item-comment-query.ts +0 -36
  71. package/server/service/checklist-item-comment/checklist-item-comment-type.ts +0 -32
  72. package/server/service/checklist-item-comment/checklist-item-comment.ts +0 -56
  73. package/server/service/checklist-item-comment/event-subscriber.ts +0 -17
  74. package/server/service/checklist-item-comment/index.ts +0 -9
  75. package/server/service/checklist-template/checklist-template-mutation.ts +0 -66
  76. package/server/service/checklist-template/checklist-template-query.ts +0 -39
  77. package/server/service/checklist-template/checklist-template-type.ts +0 -23
  78. package/server/service/checklist-template/checklist-template.ts +0 -71
  79. package/server/service/checklist-template/index.ts +0 -6
  80. package/server/service/checklist-template-item/checklist-template-item-mutation.ts +0 -64
  81. package/server/service/checklist-template-item/checklist-template-item-query.ts +0 -44
  82. package/server/service/checklist-template-item/checklist-template-item-type.ts +0 -39
  83. package/server/service/checklist-template-item/checklist-template-item.ts +0 -68
  84. package/server/service/checklist-template-item/index.ts +0 -6
  85. package/server/service/checklist-type/checklist-type-mutation.ts +0 -66
  86. package/server/service/checklist-type/checklist-type-query.ts +0 -39
  87. package/server/service/checklist-type/checklist-type-type.ts +0 -26
  88. package/server/service/checklist-type/checklist-type.ts +0 -64
  89. package/server/service/checklist-type/index.ts +0 -6
  90. package/server/service/index.ts +0 -88
  91. package/server/service/issue/index.ts +0 -7
  92. package/server/service/issue/issue-mutation.ts +0 -198
  93. package/server/service/issue/issue-query.ts +0 -62
  94. package/server/service/issue/issue-type.ts +0 -61
  95. package/server/service/issue/issue.ts +0 -100
  96. package/server/service/project-report/index.ts +0 -7
  97. package/server/service/project-report/project-report-mutation.ts +0 -198
  98. package/server/service/project-report/project-report-query.ts +0 -62
  99. package/server/service/project-report/project-report-type.ts +0 -61
  100. package/server/service/project-report/project-report.ts +0 -113
  101. package/server/service/supervisor/index.ts +0 -7
  102. package/server/service/supervisor/supervisor-mutation.ts +0 -198
  103. package/server/service/supervisor/supervisor-query.ts +0 -62
  104. package/server/service/supervisor/supervisor-type.ts +0 -61
  105. package/server/service/supervisor/supervisor.ts +0 -108
  106. package/server/tsconfig.json +0 -10
@@ -1,344 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import '@material/web/icon/icon.js';
3
- import gql from 'graphql-tag';
4
- import { client } from '@operato/graphql';
5
- import { css, html, LitElement } from 'lit';
6
- import { customElement, property, query, state } from 'lit/decorators.js';
7
- import { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles';
8
- import { notify } from '@operato/layout';
9
- import { store, User } from '@operato/shell';
10
- import { connect } from 'pwa-helpers/connect-mixin.js';
11
- import { OxPrompt } from '@operato/popup/ox-prompt.js';
12
- import './checklist-view';
13
- let CommentListPopup = class CommentListPopup extends connect(store)(LitElement) {
14
- constructor() {
15
- super(...arguments);
16
- this.checklistItemId = '';
17
- this.item = { count: 0 };
18
- this.checklistItemComments = [];
19
- this.comment = '';
20
- this.checklistItemCommentCount = 0;
21
- this.user = {};
22
- this.page = 1;
23
- this.loading = false;
24
- this.hasMoreComments = true;
25
- }
26
- render() {
27
- return html `
28
- <div body>
29
- <h3>제품검사에 대한 확인: ${this.checklistItemCommentCount || 0}건</h3>
30
-
31
- <div comments-container @scroll=${this._onScroll}>
32
- ${this.checklistItemComments.map(comment => {
33
- return html `
34
- <div comment-row>
35
- <div creator-container>
36
- <span creator><md-icon slot="icon">account_circle</md-icon> ${comment.creator.name}</span>
37
- <span createdAt>
38
- <md-icon slot="icon">schedule</md-icon> ${this._formatDate(comment.createdAt)}
39
- ${comment.creator.email === this.user.email
40
- ? html ` <md-icon delete slot="icon" @click=${() => this._deleteComment(comment.id)}>delete</md-icon>`
41
- : ''}
42
- </span>
43
- </div>
44
- <div comment>${comment.comment}</div>
45
- </div>
46
- `;
47
- })}
48
- </div>
49
-
50
- <textarea .value=${this.comment || ''} @input=${this._onInputChange}></textarea>
51
-
52
- <div button-container>
53
- <md-elevated-button blue @click=${this._createComment}> <md-icon slot="icon">task</md-icon>저장 </md-elevated-button>
54
- <md-elevated-button @click=${this._close}> <md-icon slot="icon">cancel</md-icon>취소 </md-elevated-button>
55
- </div>
56
- </div>
57
- `;
58
- }
59
- async firstUpdated() {
60
- var _a;
61
- this.user = (_a = store.getState().auth) === null || _a === void 0 ? void 0 : _a.user;
62
- this.comment = '';
63
- this.page = 1;
64
- await this._loadComments();
65
- this._scrollBottom();
66
- }
67
- async _loadComments() {
68
- if (this.loading || !this.hasMoreComments)
69
- return;
70
- this.loading = true;
71
- const response = await client.query({
72
- query: gql `
73
- query ChecklistItemComments($pagination: Pagination!, $checklistItemId: String!) {
74
- checklistItemComments(pagination: $pagination, checklistItemId: $checklistItemId) {
75
- id
76
- comment
77
- creator {
78
- id
79
- email
80
- }
81
- createdAt
82
- }
83
-
84
- checklistItem(id: $checklistItemId) {
85
- id
86
- checklistItemCommentCount
87
- }
88
- }
89
- `,
90
- variables: {
91
- checklistItemId: this.checklistItemId,
92
- pagination: {
93
- page: this.page,
94
- limit: 10
95
- }
96
- }
97
- });
98
- if (response.errors)
99
- return;
100
- const items = response.data.checklistItemComments;
101
- if (items.length < 10)
102
- this.hasMoreComments = false;
103
- this.checklistItemComments = [...items.reverse(), ...this.checklistItemComments];
104
- this.page += 1;
105
- this.checklistItemCommentCount = response.data.checklistItem.checklistItemCommentCount;
106
- this.loading = false;
107
- }
108
- // 스크롤이 맨 위에 가까울 때 데이터 요청
109
- _onScroll() {
110
- const { scrollTop } = this.commentsContainer;
111
- if (scrollTop <= 5) {
112
- this._loadComments();
113
- }
114
- }
115
- async _createComment() {
116
- var _a, _b;
117
- if (!this.comment) {
118
- notify({ message: '조치사항을 입력해주세요.', level: 'warn' });
119
- return;
120
- }
121
- const response = await client.mutate({
122
- mutation: gql `
123
- mutation CreateChecklistItemComment($checklistItemComment: NewChecklistItemComment!) {
124
- createChecklistItemComment(checklistItemComment: $checklistItemComment) {
125
- id
126
- comment
127
- creator {
128
- id
129
- email
130
- }
131
- createdAt
132
- }
133
- }
134
- `,
135
- variables: {
136
- checklistItemComment: {
137
- comment: this.comment,
138
- checklistItemId: this.checklistItemId
139
- }
140
- }
141
- });
142
- if (!response.errors) {
143
- this.comment = '';
144
- this.checklistItemComments = [...this.checklistItemComments, Object.assign({}, response.data.createChecklistItemComment)];
145
- this._scrollBottom();
146
- this.checklistItemCommentCount++;
147
- }
148
- else {
149
- notify({ message: ((_b = (_a = response.errors) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) || '조치사항 등록에 실패하였습니다.', level: 'error' });
150
- }
151
- this._dispatchEvent();
152
- }
153
- async _deleteComment(commentId) {
154
- var _a, _b;
155
- if (await OxPrompt.open({
156
- title: '조치 사항을 삭제',
157
- text: '조치 사항을 삭제 하시겠습니까?',
158
- confirmButton: { text: '삭제' },
159
- cancelButton: { text: '취소' }
160
- })) {
161
- const response = await client.mutate({
162
- mutation: gql `
163
- mutation DeleteChecklistItemComment($id: String!) {
164
- deleteChecklistItemComment(id: $id)
165
- }
166
- `,
167
- variables: {
168
- id: commentId
169
- }
170
- });
171
- if (!response.errors) {
172
- this.checklistItemComments = [...this.checklistItemComments.filter(comment => comment.id != commentId)];
173
- notify({ message: '조치사항을 삭제하였습니다.', level: 'info' });
174
- }
175
- else {
176
- notify({ message: ((_b = (_a = response.errors) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) || '조치사항 삭제에 실패하였습니다.', level: 'error' });
177
- }
178
- this._dispatchEvent();
179
- }
180
- }
181
- _close() {
182
- history.back();
183
- }
184
- // Input 요소의 값이 변경될 때 호출되는 콜백 함수
185
- _onInputChange(event) {
186
- const target = event.target;
187
- this.comment = target.value;
188
- }
189
- _formatDate(date) {
190
- const _date = new Date(date.toLocaleString('en-US', { timeZone: 'Asia/Seoul' }));
191
- const year = _date.getFullYear();
192
- const month = String(_date.getMonth() + 1).padStart(2, '0');
193
- const day = String(_date.getDate()).padStart(2, '0');
194
- const hours = String(_date.getHours()).padStart(2, '0');
195
- const minutes = String(_date.getMinutes()).padStart(2, '0');
196
- const seconds = String(_date.getSeconds()).padStart(2, '0');
197
- return `${year}.${month}.${day} ${hours}:${minutes}:${seconds}`;
198
- }
199
- // 댓글 스크롤 맨 밑으로
200
- async _scrollBottom() {
201
- setTimeout(() => {
202
- this.commentsContainer.scrollTop = this.commentsContainer.scrollHeight;
203
- }, 100);
204
- }
205
- // 조치사항 변경 이벤트 디스패치
206
- _dispatchEvent() {
207
- this.dispatchEvent(new CustomEvent('change-comment', { detail: { checklistItemId: this.checklistItemId } }));
208
- }
209
- };
210
- CommentListPopup.styles = [
211
- ButtonContainerStyles,
212
- ScrollbarStyles,
213
- css `
214
- :host {
215
- display: flex;
216
- flex-direction: column;
217
- padding: 15px 20px;
218
- background-color: var(--md-sys-color-surface);
219
- }
220
-
221
- div[body] {
222
- height: 100%;
223
- display: flex;
224
- flex-direction: column;
225
- gap: 12px;
226
- }
227
-
228
- div[comments-container] {
229
- overflow-y: auto;
230
- gap: 10px;
231
- display: flex;
232
- flex-direction: column;
233
- flex: 1;
234
-
235
- div[comment-row] {
236
- display: flex;
237
- flex-direction: column;
238
-
239
- div[creator-container] {
240
- display: flex;
241
- justify-content: space-between;
242
-
243
- span[creator] {
244
- font-weight: 600;
245
- display: flex;
246
- align-items: center;
247
- gap: 3px;
248
- }
249
- span[createdAt] {
250
- display: flex;
251
- align-items: center;
252
- gap: 3px;
253
-
254
- md-icon[delete] {
255
- cursor: pointer;
256
- }
257
- }
258
- }
259
-
260
- div[comment] {
261
- margin-left: 20px;
262
- }
263
- }
264
- }
265
-
266
- h3 {
267
- position: relative;
268
- color: rgb(5, 149, 229);
269
- font-size: 17px;
270
- font-weight: 700;
271
- background-color: var(--md-sys-color-surface);
272
- margin-top: 0px;
273
- margin-bottom: 5px;
274
- }
275
-
276
- textarea {
277
- height: 75px;
278
- border: 1px solid #ccc;
279
- }
280
-
281
- div[button-container] {
282
- display: flex;
283
- justify-content: flex-end;
284
- gap: 10px;
285
-
286
- md-elevated-button[blue] {
287
- --md-elevated-button-container-color: #0595e5;
288
-
289
- --md-elevated-button-label-text-color: #fff;
290
- --md-elevated-button-hover-label-text-color: #fff;
291
- --md-elevated-button-pressed-label-text-color: #fff;
292
- --md-elevated-button-focus-label-text-color: #fff;
293
- --md-elevated-button-icon-color: #fff;
294
- --md-elevated-button-hover-icon-color: #fff;
295
- --md-elevated-button-pressed-icon-color: #fff;
296
- --md-elevated-button-focus-icon-color: #fff;
297
- }
298
- }
299
- `
300
- ];
301
- __decorate([
302
- property({ type: String }),
303
- __metadata("design:type", String)
304
- ], CommentListPopup.prototype, "checklistItemId", void 0);
305
- __decorate([
306
- state(),
307
- __metadata("design:type", Object)
308
- ], CommentListPopup.prototype, "item", void 0);
309
- __decorate([
310
- state(),
311
- __metadata("design:type", Object)
312
- ], CommentListPopup.prototype, "checklistItemComments", void 0);
313
- __decorate([
314
- state(),
315
- __metadata("design:type", String)
316
- ], CommentListPopup.prototype, "comment", void 0);
317
- __decorate([
318
- state(),
319
- __metadata("design:type", Number)
320
- ], CommentListPopup.prototype, "checklistItemCommentCount", void 0);
321
- __decorate([
322
- state(),
323
- __metadata("design:type", User)
324
- ], CommentListPopup.prototype, "user", void 0);
325
- __decorate([
326
- state(),
327
- __metadata("design:type", Number)
328
- ], CommentListPopup.prototype, "page", void 0);
329
- __decorate([
330
- state(),
331
- __metadata("design:type", Boolean)
332
- ], CommentListPopup.prototype, "loading", void 0);
333
- __decorate([
334
- state(),
335
- __metadata("design:type", Boolean)
336
- ], CommentListPopup.prototype, "hasMoreComments", void 0);
337
- __decorate([
338
- query('div[comments-container]'),
339
- __metadata("design:type", HTMLDivElement)
340
- ], CommentListPopup.prototype, "commentsContainer", void 0);
341
- CommentListPopup = __decorate([
342
- customElement('comment-list-popup')
343
- ], CommentListPopup);
344
- //# sourceMappingURL=comment-list-popup%20copy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"comment-list-popup copy.js","sourceRoot":"","sources":["../../../client/pages/checklist/comment-list-popup copy.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACtD,OAAO,kBAAkB,CAAA;AAGzB,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;IAAzD;;QA6F8B,oBAAe,GAAW,EAAE,CAAA;QAE/C,SAAI,GAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;QACxB,0BAAqB,GAAQ,EAAE,CAAA;QAC/B,YAAO,GAAW,EAAE,CAAA;QACpB,8BAAyB,GAAW,CAAC,CAAA;QACrC,SAAI,GAAS,EAAE,CAAA;QACf,SAAI,GAAW,CAAC,CAAA;QAChB,YAAO,GAAY,KAAK,CAAA;QACxB,oBAAe,GAAY,IAAI,CAAA;IA2M1C,CAAC;IAvMC,MAAM;QACJ,OAAO,IAAI,CAAA;;2BAEY,IAAI,CAAC,yBAAyB,IAAI,CAAC;;0CAEpB,IAAI,CAAC,SAAS;YAC5C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACzC,OAAO,IAAI,CAAA;;;gFAGyD,OAAO,CAAC,OAAO,CAAC,IAAI;;8DAEtC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;sBAC3E,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK;gBACzC,CAAC,CAAC,IAAI,CAAA,uCAAuC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB;gBACrG,CAAC,CAAC,EAAE;;;+BAGK,OAAO,CAAC,OAAO;;aAEjC,CAAA;QACH,CAAC,CAAC;;;2BAGe,IAAI,CAAC,OAAO,IAAI,EAAE,WAAW,IAAI,CAAC,cAAc;;;4CAG/B,IAAI,CAAC,cAAc;uCACxB,IAAI,CAAC,MAAM;;;KAG7C,CAAA;IACH,CAAC;IAED,KAAK,CAAC,YAAY;;QAChB,IAAI,CAAC,IAAI,GAAG,MAAC,KAAK,CAAC,QAAQ,EAAU,CAAC,IAAI,0CAAE,IAAI,CAAA;QAChD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QACjB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QACb,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAM;QAEjD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QAEnB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;OAiBT;YACD,SAAS,EAAE;gBACT,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,UAAU,EAAE;oBACV,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,EAAE;iBACV;aACF;SACF,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,MAAM;YAAE,OAAM;QAE3B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAA;QACjD,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;YAAE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;QAEnD,IAAI,CAAC,qBAAqB,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAA;QAChF,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;QACd,IAAI,CAAC,yBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAA;QACtF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,yBAAyB;IACjB,SAAS;QACf,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAA;QAC5C,IAAI,SAAS,IAAI,CAAC,EAAE;YAClB,IAAI,CAAC,aAAa,EAAE,CAAA;SACrB;IACH,CAAC;IAEO,KAAK,CAAC,cAAc;;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,MAAM,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YACnD,OAAM;SACP;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;;;OAYZ;YACD,SAAS,EAAE;gBACT,oBAAoB,EAAE;oBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,eAAe,EAAE,IAAI,CAAC,eAAe;iBACtC;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;YACjB,IAAI,CAAC,qBAAqB,GAAG,CAAC,GAAG,IAAI,CAAC,qBAAqB,oBAAO,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAG,CAAA;YAC7G,IAAI,CAAC,aAAa,EAAE,CAAA;YACpB,IAAI,CAAC,yBAAyB,EAAE,CAAA;SACjC;aAAM;YACL,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA,MAAA,MAAA,QAAQ,CAAC,MAAM,0CAAG,CAAC,CAAC,0CAAE,OAAO,KAAI,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;SAC1F;QAED,IAAI,CAAC,cAAc,EAAE,CAAA;IACvB,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,SAAiB;;QAC5C,IACE,MAAM,QAAQ,CAAC,IAAI,CAAC;YAClB,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,mBAAmB;YACzB,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;YAC7B,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SAC7B,CAAC,EACF;YACA,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;gBACnC,QAAQ,EAAE,GAAG,CAAA;;;;SAIZ;gBACD,SAAS,EAAE;oBACT,EAAE,EAAE,SAAS;iBACd;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;gBACpB,IAAI,CAAC,qBAAqB,GAAG,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,SAAS,CAAC,CAAC,CAAA;gBACvG,MAAM,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;aACrD;iBAAM;gBACL,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA,MAAA,MAAA,QAAQ,CAAC,MAAM,0CAAG,CAAC,CAAC,0CAAE,OAAO,KAAI,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;aAC1F;YAED,IAAI,CAAC,cAAc,EAAE,CAAA;SACtB;IACH,CAAC;IAEO,MAAM;QACZ,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;IAED,gCAAgC;IACxB,cAAc,CAAC,KAAiB;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B,CAAA;QAC/C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAA;IAC7B,CAAC;IAEO,WAAW,CAAC,IAAI;QACtB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;QAEhF,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QACvD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAE3D,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,EAAE,CAAA;IACjE,CAAC;IAED,eAAe;IACP,KAAK,CAAC,aAAa;QACzB,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAA;QACxE,CAAC,EAAE,GAAG,CAAC,CAAA;IACT,CAAC;IAED,mBAAmB;IACnB,cAAc;QACZ,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAA;IAC9G,CAAC;;AA/SM,uBAAM,GAAG;IACd,qBAAqB;IACrB,eAAe;IACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsFF;CACF,CAAA;AAED;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;yDAA6B;AAExD;IAAC,KAAK,EAAE;;8CAAyB;AACjC;IAAC,KAAK,EAAE;;+DAAgC;AACxC;IAAC,KAAK,EAAE;;iDAAqB;AAC7B;IAAC,KAAK,EAAE;;mEAAsC;AAC9C;IAAC,KAAK,EAAE;8BAAO,IAAI;8CAAK;AACxB;IAAC,KAAK,EAAE;;8CAAiB;AACzB;IAAC,KAAK,EAAE;;iDAAyB;AACjC;IAAC,KAAK,EAAE;;yDAAgC;AAExC;IAAC,KAAK,CAAC,yBAAyB,CAAC;8BAAqB,cAAc;2DAAA;AAxGhE,gBAAgB;IADrB,aAAa,CAAC,oBAAoB,CAAC;GAC9B,gBAAgB,CAiTrB","sourcesContent":["import '@material/web/icon/icon.js'\nimport gql from 'graphql-tag'\nimport { client } from '@operato/graphql'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles'\nimport { notify } from '@operato/layout'\nimport { store, User } from '@operato/shell'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\nimport { OxPrompt } from '@operato/popup/ox-prompt.js'\nimport './checklist-view'\n\n@customElement('comment-list-popup')\nclass CommentListPopup extends connect(store)(LitElement) {\n static styles = [\n ButtonContainerStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n padding: 15px 20px;\n background-color: var(--md-sys-color-surface);\n }\n\n div[body] {\n height: 100%;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n div[comments-container] {\n overflow-y: auto;\n gap: 10px;\n display: flex;\n flex-direction: column;\n flex: 1;\n\n div[comment-row] {\n display: flex;\n flex-direction: column;\n\n div[creator-container] {\n display: flex;\n justify-content: space-between;\n\n span[creator] {\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 3px;\n }\n span[createdAt] {\n display: flex;\n align-items: center;\n gap: 3px;\n\n md-icon[delete] {\n cursor: pointer;\n }\n }\n }\n\n div[comment] {\n margin-left: 20px;\n }\n }\n }\n\n h3 {\n position: relative;\n color: rgb(5, 149, 229);\n font-size: 17px;\n font-weight: 700;\n background-color: var(--md-sys-color-surface);\n margin-top: 0px;\n margin-bottom: 5px;\n }\n\n textarea {\n height: 75px;\n border: 1px solid #ccc;\n }\n\n div[button-container] {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n\n md-elevated-button[blue] {\n --md-elevated-button-container-color: #0595e5;\n\n --md-elevated-button-label-text-color: #fff;\n --md-elevated-button-hover-label-text-color: #fff;\n --md-elevated-button-pressed-label-text-color: #fff;\n --md-elevated-button-focus-label-text-color: #fff;\n --md-elevated-button-icon-color: #fff;\n --md-elevated-button-hover-icon-color: #fff;\n --md-elevated-button-pressed-icon-color: #fff;\n --md-elevated-button-focus-icon-color: #fff;\n }\n }\n `\n ]\n\n @property({ type: String }) checklistItemId: string = ''\n\n @state() item: any = { count: 0 }\n @state() checklistItemComments: any = []\n @state() comment: string = ''\n @state() checklistItemCommentCount: number = 0\n @state() user: User = {}\n @state() page: number = 1\n @state() loading: boolean = false\n @state() hasMoreComments: boolean = true\n\n @query('div[comments-container]') commentsContainer!: HTMLDivElement\n\n render() {\n return html`\n <div body>\n <h3>제품검사에 대한 확인: ${this.checklistItemCommentCount || 0}건</h3>\n\n <div comments-container @scroll=${this._onScroll}>\n ${this.checklistItemComments.map(comment => {\n return html`\n <div comment-row>\n <div creator-container>\n <span creator><md-icon slot=\"icon\">account_circle</md-icon> ${comment.creator.name}</span>\n <span createdAt>\n <md-icon slot=\"icon\">schedule</md-icon> ${this._formatDate(comment.createdAt)}\n ${comment.creator.email === this.user.email\n ? html` <md-icon delete slot=\"icon\" @click=${() => this._deleteComment(comment.id)}>delete</md-icon>`\n : ''}\n </span>\n </div>\n <div comment>${comment.comment}</div>\n </div>\n `\n })}\n </div>\n\n <textarea .value=${this.comment || ''} @input=${this._onInputChange}></textarea>\n\n <div button-container>\n <md-elevated-button blue @click=${this._createComment}> <md-icon slot=\"icon\">task</md-icon>저장 </md-elevated-button>\n <md-elevated-button @click=${this._close}> <md-icon slot=\"icon\">cancel</md-icon>취소 </md-elevated-button>\n </div>\n </div>\n `\n }\n\n async firstUpdated() {\n this.user = (store.getState() as any).auth?.user\n this.comment = ''\n this.page = 1\n await this._loadComments()\n this._scrollBottom()\n }\n\n private async _loadComments() {\n if (this.loading || !this.hasMoreComments) return\n\n this.loading = true\n\n const response = await client.query({\n query: gql`\n query ChecklistItemComments($pagination: Pagination!, $checklistItemId: String!) {\n checklistItemComments(pagination: $pagination, checklistItemId: $checklistItemId) {\n id\n comment\n creator {\n id\n email\n }\n createdAt\n }\n\n checklistItem(id: $checklistItemId) {\n id\n checklistItemCommentCount\n }\n }\n `,\n variables: {\n checklistItemId: this.checklistItemId,\n pagination: {\n page: this.page,\n limit: 10\n }\n }\n })\n\n if (response.errors) return\n\n const items = response.data.checklistItemComments\n if (items.length < 10) this.hasMoreComments = false\n\n this.checklistItemComments = [...items.reverse(), ...this.checklistItemComments]\n this.page += 1\n this.checklistItemCommentCount = response.data.checklistItem.checklistItemCommentCount\n this.loading = false\n }\n\n // 스크롤이 맨 위에 가까울 때 데이터 요청\n private _onScroll() {\n const { scrollTop } = this.commentsContainer\n if (scrollTop <= 5) {\n this._loadComments()\n }\n }\n\n private async _createComment() {\n if (!this.comment) {\n notify({ message: '조치사항을 입력해주세요.', level: 'warn' })\n return\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation CreateChecklistItemComment($checklistItemComment: NewChecklistItemComment!) {\n createChecklistItemComment(checklistItemComment: $checklistItemComment) {\n id\n comment\n creator {\n id\n email\n }\n createdAt\n }\n }\n `,\n variables: {\n checklistItemComment: {\n comment: this.comment,\n checklistItemId: this.checklistItemId\n }\n }\n })\n\n if (!response.errors) {\n this.comment = ''\n this.checklistItemComments = [...this.checklistItemComments, { ...response.data.createChecklistItemComment }]\n this._scrollBottom()\n this.checklistItemCommentCount++\n } else {\n notify({ message: response.errors?.[0]?.message || '조치사항 등록에 실패하였습니다.', level: 'error' })\n }\n\n this._dispatchEvent()\n }\n\n private async _deleteComment(commentId: string) {\n if (\n await OxPrompt.open({\n title: '조치 사항을 삭제',\n text: '조치 사항을 삭제 하시겠습니까?',\n confirmButton: { text: '삭제' },\n cancelButton: { text: '취소' }\n })\n ) {\n const response = await client.mutate({\n mutation: gql`\n mutation DeleteChecklistItemComment($id: String!) {\n deleteChecklistItemComment(id: $id)\n }\n `,\n variables: {\n id: commentId\n }\n })\n\n if (!response.errors) {\n this.checklistItemComments = [...this.checklistItemComments.filter(comment => comment.id != commentId)]\n notify({ message: '조치사항을 삭제하였습니다.', level: 'info' })\n } else {\n notify({ message: response.errors?.[0]?.message || '조치사항 삭제에 실패하였습니다.', level: 'error' })\n }\n\n this._dispatchEvent()\n }\n }\n\n private _close() {\n history.back()\n }\n\n // Input 요소의 값이 변경될 때 호출되는 콜백 함수\n private _onInputChange(event: InputEvent) {\n const target = event.target as HTMLInputElement\n this.comment = target.value\n }\n\n private _formatDate(date) {\n const _date = new Date(date.toLocaleString('en-US', { timeZone: 'Asia/Seoul' }))\n\n const year = _date.getFullYear()\n const month = String(_date.getMonth() + 1).padStart(2, '0')\n const day = String(_date.getDate()).padStart(2, '0')\n const hours = String(_date.getHours()).padStart(2, '0')\n const minutes = String(_date.getMinutes()).padStart(2, '0')\n const seconds = String(_date.getSeconds()).padStart(2, '0')\n\n return `${year}.${month}.${day} ${hours}:${minutes}:${seconds}`\n }\n\n // 댓글 스크롤 맨 밑으로\n private async _scrollBottom() {\n setTimeout(() => {\n this.commentsContainer.scrollTop = this.commentsContainer.scrollHeight\n }, 100)\n }\n\n // 조치사항 변경 이벤트 디스패치\n _dispatchEvent() {\n this.dispatchEvent(new CustomEvent('change-comment', { detail: { checklistItemId: this.checklistItemId } }))\n }\n}\n"]}
File without changes
package/server/index.ts DELETED
@@ -1,4 +0,0 @@
1
- export * from './migrations'
2
- export * from './service'
3
-
4
- import './routes'
@@ -1,3 +0,0 @@
1
- export function initMiddlewares(app) {
2
- /* can add middlewares into app */
3
- }
@@ -1,9 +0,0 @@
1
- const glob = require('glob')
2
- const path = require('path')
3
-
4
- export var migrations = []
5
-
6
- glob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function(file) {
7
- if (file.indexOf('index.js') !== -1) return
8
- migrations = migrations.concat(Object.values(require(path.resolve(file))) || [])
9
- })
package/server/routes.ts DELETED
@@ -1,28 +0,0 @@
1
- // const debug = require('debug')('dssp:supervision:routes')
2
-
3
- process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRouter) => {
4
- /*
5
- * can add global public routes to application (auth not required, tenancy not required)
6
- *
7
- * ex) routes.get('/path', async(context, next) => {})
8
- * ex) routes.post('/path', async(context, next) => {})
9
- */
10
- })
11
-
12
- process.on('bootstrap-module-global-private-route' as any, (app, globalPrivateRouter) => {
13
- /*
14
- * can add global private routes to application (auth required, tenancy not required)
15
- */
16
- })
17
-
18
- process.on('bootstrap-module-domain-public-route' as any, (app, domainPublicRouter) => {
19
- /*
20
- * can add domain public routes to application (auth not required, tenancy required)
21
- */
22
- })
23
-
24
- process.on('bootstrap-module-domain-private-route' as any, (app, domainPrivateRouter) => {
25
- /*
26
- * can add domain private routes to application (auth required, tenancy required)
27
- */
28
- })
@@ -1,198 +0,0 @@
1
- import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
2
- import { In } from 'typeorm'
3
-
4
- import { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'
5
-
6
- import { ActionPlan } from './action-plan'
7
- import { NewActionPlan, ActionPlanPatch } from './action-plan-type'
8
-
9
- @Resolver(ActionPlan)
10
- export class ActionPlanMutation {
11
- @Directive('@transaction')
12
- @Mutation(returns => ActionPlan, { description: 'To create new ActionPlan' })
13
- async createActionPlan(@Arg('actionPlan') actionPlan: NewActionPlan, @Ctx() context: ResolverContext): Promise<ActionPlan> {
14
- const { domain, user, tx } = context.state
15
-
16
- const result = await tx.getRepository(ActionPlan).save({
17
- ...actionPlan,
18
- domain,
19
- creator: user,
20
- updater: user
21
- })
22
-
23
- if (actionPlan.thumbnail) {
24
- await createAttachment(
25
- null,
26
- {
27
- attachment: {
28
- file: actionPlan.thumbnail,
29
- refType: ActionPlan.name,
30
- refBy: result.id
31
- }
32
- },
33
- context
34
- )
35
- }
36
-
37
- return result
38
- }
39
-
40
- @Directive('@transaction')
41
- @Mutation(returns => ActionPlan, { description: 'To modify ActionPlan information' })
42
- async updateActionPlan(
43
- @Arg('id') id: string,
44
- @Arg('patch') patch: ActionPlanPatch,
45
- @Ctx() context: ResolverContext
46
- ): Promise<ActionPlan> {
47
- const { domain, user, tx } = context.state
48
-
49
- const repository = tx.getRepository(ActionPlan)
50
- const actionPlan = await repository.findOne({
51
- where: { domain: { id: domain.id }, id }
52
- })
53
-
54
- const result = await repository.save({
55
- ...actionPlan,
56
- ...patch,
57
- updater: user
58
- })
59
-
60
- if (patch.thumbnail) {
61
- await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)
62
- await createAttachment(
63
- null,
64
- {
65
- attachment: {
66
- file: patch.thumbnail,
67
- refType: ActionPlan.name,
68
- refBy: result.id
69
- }
70
- },
71
- context
72
- )
73
- }
74
-
75
- return result
76
- }
77
-
78
- @Directive('@transaction')
79
- @Mutation(returns => [ActionPlan], { description: "To modify multiple ActionPlans' information" })
80
- async updateMultipleActionPlan(
81
- @Arg('patches', type => [ActionPlanPatch]) patches: ActionPlanPatch[],
82
- @Ctx() context: ResolverContext
83
- ): Promise<ActionPlan[]> {
84
- const { domain, user, tx } = context.state
85
-
86
- let results = []
87
- const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
88
- const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
89
- const actionPlanRepo = tx.getRepository(ActionPlan)
90
-
91
- if (_createRecords.length > 0) {
92
- for (let i = 0; i < _createRecords.length; i++) {
93
- const newRecord = _createRecords[i]
94
-
95
- const result = await actionPlanRepo.save({
96
- ...newRecord,
97
- domain,
98
- creator: user,
99
- updater: user
100
- })
101
-
102
- if (newRecord.thumbnail) {
103
- await createAttachment(
104
- null,
105
- {
106
- attachment: {
107
- file: newRecord.thumbnail,
108
- refType: ActionPlan.name,
109
- refBy: result.id
110
- }
111
- },
112
- context
113
- )
114
- }
115
-
116
- results.push({ ...result, cuFlag: '+' })
117
- }
118
- }
119
-
120
- if (_updateRecords.length > 0) {
121
- for (let i = 0; i < _updateRecords.length; i++) {
122
- const updateRecord = _updateRecords[i]
123
- const actionPlan = await actionPlanRepo.findOneBy({ id: updateRecord.id })
124
-
125
- const result = await actionPlanRepo.save({
126
- ...actionPlan,
127
- ...updateRecord,
128
- updater: user
129
- })
130
-
131
- if (updateRecord.thumbnail) {
132
- await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)
133
- await createAttachment(
134
- null,
135
- {
136
- attachment: {
137
- file: updateRecord.thumbnail,
138
- refType: ActionPlan.name,
139
- refBy: result.id
140
- }
141
- },
142
- context
143
- )
144
- }
145
-
146
- results.push({ ...result, cuFlag: 'M' })
147
- }
148
- }
149
-
150
- return results
151
- }
152
-
153
- @Directive('@transaction')
154
- @Mutation(returns => Boolean, { description: 'To delete ActionPlan' })
155
- async deleteActionPlan(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
156
- const { domain, tx } = context.state
157
-
158
- await tx.getRepository(ActionPlan).delete({ domain: { id: domain.id }, id })
159
- await deleteAttachmentsByRef(null, { refBys: [id] }, context)
160
-
161
- return true
162
- }
163
-
164
- @Directive('@transaction')
165
- @Mutation(returns => Boolean, { description: 'To delete multiple ActionPlans' })
166
- async deleteActionPlans(
167
- @Arg('ids', type => [String]) ids: string[],
168
- @Ctx() context: ResolverContext
169
- ): Promise<boolean> {
170
- const { domain, tx } = context.state
171
-
172
- await tx.getRepository(ActionPlan).delete({
173
- domain: { id: domain.id },
174
- id: In(ids)
175
- })
176
-
177
- await deleteAttachmentsByRef(null, { refBys: ids }, context)
178
-
179
- return true
180
- }
181
-
182
- @Directive('@transaction')
183
- @Mutation(returns => Boolean, { description: 'To import multiple ActionPlans' })
184
- async importActionPlans(
185
- @Arg('actionPlans', type => [ActionPlanPatch]) actionPlans: ActionPlanPatch[],
186
- @Ctx() context: ResolverContext
187
- ): Promise<boolean> {
188
- const { domain, tx } = context.state
189
-
190
- await Promise.all(
191
- actionPlans.map(async (actionPlan: ActionPlanPatch) => {
192
- const createdActionPlan: ActionPlan = await tx.getRepository(ActionPlan).save({ domain, ...actionPlan })
193
- })
194
- )
195
-
196
- return true
197
- }
198
- }