@things-factory/worklist 9.0.0-beta.79 → 9.0.0-beta.80

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 (159) hide show
  1. package/dist-client/activity-summary-generator.js +17 -22
  2. package/dist-client/activity-summary-generator.js.map +1 -1
  3. package/dist-client/components/activity-/bowner-view.js +24 -24
  4. package/dist-client/components/activity-/bowner-view.js.map +1 -1
  5. package/dist-client/components/activity-approval-ribon.js +47 -48
  6. package/dist-client/components/activity-approval-ribon.js.map +1 -1
  7. package/dist-client/components/activity-instance-preview.js +34 -32
  8. package/dist-client/components/activity-instance-preview.js.map +1 -1
  9. package/dist-client/components/activity-instance-ribon.js +41 -41
  10. package/dist-client/components/activity-instance-ribon.js.map +1 -1
  11. package/dist-client/components/activity-intro-view.js +24 -24
  12. package/dist-client/components/activity-intro-view.js.map +1 -1
  13. package/dist-client/components/activity-reporter-view.js +24 -24
  14. package/dist-client/components/activity-reporter-view.js.map +1 -1
  15. package/dist-client/components/activity-starter-form.js +53 -54
  16. package/dist-client/components/activity-starter-form.js.map +1 -1
  17. package/dist-client/components/activity-thread-ribon.js +38 -38
  18. package/dist-client/components/activity-thread-ribon.js.map +1 -1
  19. package/dist-client/components/activity-thread-timeline.js +74 -74
  20. package/dist-client/components/activity-thread-timeline.js.map +1 -1
  21. package/dist-client/grist-editor/grist-editor-activity-search-key.js +2 -3
  22. package/dist-client/grist-editor/grist-editor-activity-search-key.js.map +1 -1
  23. package/dist-client/grist-editor/popup-activity-search-keys-input.js +19 -19
  24. package/dist-client/grist-editor/popup-activity-search-keys-input.js.map +1 -1
  25. package/dist-client/pages/activity/activity-list-page.js +34 -34
  26. package/dist-client/pages/activity/activity-list-page.js.map +1 -1
  27. package/dist-client/pages/activity/activity-model-item-list.js +18 -20
  28. package/dist-client/pages/activity/activity-model-item-list.js.map +1 -1
  29. package/dist-client/pages/activity/activity-page.js +63 -45
  30. package/dist-client/pages/activity/activity-page.js.map +1 -1
  31. package/dist-client/pages/activity/activity-partial-view.js +18 -18
  32. package/dist-client/pages/activity/activity-partial-view.js.map +1 -1
  33. package/dist-client/pages/activity/starter-list-page.js +22 -25
  34. package/dist-client/pages/activity/starter-list-page.js.map +1 -1
  35. package/dist-client/pages/activity-approval/activity-approval-importer.js +16 -17
  36. package/dist-client/pages/activity-approval/activity-approval-importer.js.map +1 -1
  37. package/dist-client/pages/activity-approval/activity-approval-list-page.js +30 -23
  38. package/dist-client/pages/activity-approval/activity-approval-list-page.js.map +1 -1
  39. package/dist-client/pages/activity-approval/activity-approval-page.js +104 -77
  40. package/dist-client/pages/activity-approval/activity-approval-page.js.map +1 -1
  41. package/dist-client/pages/activity-instance/activity-instance-list-page.js +45 -49
  42. package/dist-client/pages/activity-instance/activity-instance-list-page.js.map +1 -1
  43. package/dist-client/pages/activity-instance/activity-instance-search-page.js +37 -37
  44. package/dist-client/pages/activity-instance/activity-instance-search-page.js.map +1 -1
  45. package/dist-client/pages/activity-instance/activity-instance-start-page.js +52 -39
  46. package/dist-client/pages/activity-instance/activity-instance-start-page.js.map +1 -1
  47. package/dist-client/pages/activity-instance/activity-instance-view.js +211 -213
  48. package/dist-client/pages/activity-instance/activity-instance-view.js.map +1 -1
  49. package/dist-client/pages/activity-stats/activity-stats-importer.js +16 -17
  50. package/dist-client/pages/activity-stats/activity-stats-importer.js.map +1 -1
  51. package/dist-client/pages/activity-stats/activity-stats-list-page.js +30 -23
  52. package/dist-client/pages/activity-stats/activity-stats-list-page.js.map +1 -1
  53. package/dist-client/pages/activity-store/activity-store-page.js +27 -26
  54. package/dist-client/pages/activity-store/activity-store-page.js.map +1 -1
  55. package/dist-client/pages/activity-supervisor/reporter-list-page.js +26 -29
  56. package/dist-client/pages/activity-supervisor/reporter-list-page.js.map +1 -1
  57. package/dist-client/pages/activity-template/activity-template-importer.js +16 -17
  58. package/dist-client/pages/activity-template/activity-template-importer.js.map +1 -1
  59. package/dist-client/pages/activity-template/activity-template-list-page.js +38 -37
  60. package/dist-client/pages/activity-template/activity-template-list-page.js.map +1 -1
  61. package/dist-client/pages/activity-template/activity-template-model-item-list.js +2 -3
  62. package/dist-client/pages/activity-template/activity-template-model-item-list.js.map +1 -1
  63. package/dist-client/pages/activity-thread/activity-thread-importer.js +16 -17
  64. package/dist-client/pages/activity-thread/activity-thread-importer.js.map +1 -1
  65. package/dist-client/pages/activity-thread/activity-thread-list-page.js +37 -35
  66. package/dist-client/pages/activity-thread/activity-thread-list-page.js.map +1 -1
  67. package/dist-client/pages/activity-thread/activity-thread-page.js +69 -49
  68. package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
  69. package/dist-client/pages/activity-thread/activity-thread-view-page.js +67 -58
  70. package/dist-client/pages/activity-thread/activity-thread-view-page.js.map +1 -1
  71. package/dist-client/pages/activity-thread/activity-thread-view.js +150 -151
  72. package/dist-client/pages/activity-thread/activity-thread-view.js.map +1 -1
  73. package/dist-client/pages/installable-activity/installable-activity-list-page.js +25 -30
  74. package/dist-client/pages/installable-activity/installable-activity-list-page.js.map +1 -1
  75. package/dist-client/pages/todo/approval-done-list-page.js +38 -34
  76. package/dist-client/pages/todo/approval-done-list-page.js.map +1 -1
  77. package/dist-client/pages/todo/approval-pending-list-page.js +57 -52
  78. package/dist-client/pages/todo/approval-pending-list-page.js.map +1 -1
  79. package/dist-client/pages/todo/done-list-calendar-page.js +16 -16
  80. package/dist-client/pages/todo/done-list-calendar-page.js.map +1 -1
  81. package/dist-client/pages/todo/done-list-page.js +39 -34
  82. package/dist-client/pages/todo/done-list-page.js.map +1 -1
  83. package/dist-client/pages/todo/draft-list-page.js +26 -29
  84. package/dist-client/pages/todo/draft-list-page.js.map +1 -1
  85. package/dist-client/pages/todo/pickable-list-page.js +30 -36
  86. package/dist-client/pages/todo/pickable-list-page.js.map +1 -1
  87. package/dist-client/pages/todo/todo-list-page.js +54 -53
  88. package/dist-client/pages/todo/todo-list-page.js.map +1 -1
  89. package/dist-client/templates/activity-approval-context-template.js +49 -49
  90. package/dist-client/templates/activity-approval-context-template.js.map +1 -1
  91. package/dist-client/templates/activity-instance-context-template.js +104 -104
  92. package/dist-client/templates/activity-instance-context-template.js.map +1 -1
  93. package/dist-client/templates/activity-thread-context-template.js +41 -41
  94. package/dist-client/templates/activity-thread-context-template.js.map +1 -1
  95. package/dist-client/tsconfig.tsbuildinfo +1 -1
  96. package/dist-server/controllers/activity-approval/_abort.js +18 -2
  97. package/dist-server/controllers/activity-approval/_abort.js.map +1 -1
  98. package/dist-server/controllers/activity-approval/approve.js +25 -3
  99. package/dist-server/controllers/activity-approval/approve.js.map +1 -1
  100. package/dist-server/controllers/activity-approval/check-authority.js +2 -3
  101. package/dist-server/controllers/activity-approval/check-authority.js.map +1 -1
  102. package/dist-server/controllers/activity-approval/delegate.js +17 -3
  103. package/dist-server/controllers/activity-approval/delegate.js.map +1 -1
  104. package/dist-server/controllers/activity-approval/reject.js +16 -2
  105. package/dist-server/controllers/activity-approval/reject.js.map +1 -1
  106. package/dist-server/controllers/activity-approval/save.js +6 -2
  107. package/dist-server/controllers/activity-approval/save.js.map +1 -1
  108. package/dist-server/controllers/activity-installation/activity-installation-controller.js +1 -1
  109. package/dist-server/controllers/activity-installation/activity-installation-controller.js.map +1 -1
  110. package/dist-server/controllers/activity-instance/abort.js +9 -1
  111. package/dist-server/controllers/activity-instance/abort.js.map +1 -1
  112. package/dist-server/controllers/activity-instance/draft.js +19 -2
  113. package/dist-server/controllers/activity-instance/draft.js.map +1 -1
  114. package/dist-server/controllers/activity-instance/end.js +10 -2
  115. package/dist-server/controllers/activity-instance/end.js.map +1 -1
  116. package/dist-server/controllers/activity-instance/issue.js +30 -5
  117. package/dist-server/controllers/activity-instance/issue.js.map +1 -1
  118. package/dist-server/controllers/activity-instance/pick.js +5 -1
  119. package/dist-server/controllers/activity-instance/pick.js.map +1 -1
  120. package/dist-server/controllers/activity-thread/_abort.js +9 -1
  121. package/dist-server/controllers/activity-thread/_abort.js.map +1 -1
  122. package/dist-server/controllers/activity-thread/check-authority.js +2 -3
  123. package/dist-server/controllers/activity-thread/check-authority.js.map +1 -1
  124. package/dist-server/controllers/activity-thread/delegate.js +9 -1
  125. package/dist-server/controllers/activity-thread/delegate.js.map +1 -1
  126. package/dist-server/controllers/activity-thread/end.js +9 -2
  127. package/dist-server/controllers/activity-thread/end.js.map +1 -1
  128. package/dist-server/controllers/activity-thread/restart.js +9 -1
  129. package/dist-server/controllers/activity-thread/restart.js.map +1 -1
  130. package/dist-server/controllers/activity-thread/save.js +7 -1
  131. package/dist-server/controllers/activity-thread/save.js.map +1 -1
  132. package/dist-server/controllers/activity-thread/start.js +8 -1
  133. package/dist-server/controllers/activity-thread/start.js.map +1 -1
  134. package/dist-server/controllers/activity-thread/submit.js +18 -4
  135. package/dist-server/controllers/activity-thread/submit.js.map +1 -1
  136. package/dist-server/controllers/common.js +5 -5
  137. package/dist-server/controllers/common.js.map +1 -1
  138. package/dist-server/routes.js +5 -2
  139. package/dist-server/routes.js.map +1 -1
  140. package/dist-server/service/activity/activity-mutation.js +43 -13
  141. package/dist-server/service/activity/activity-mutation.js.map +1 -1
  142. package/dist-server/service/activity/activity-query.js +3 -3
  143. package/dist-server/service/activity/activity-query.js.map +1 -1
  144. package/dist-server/service/activity-approval/activity-approval-subscription.js +3 -4
  145. package/dist-server/service/activity-approval/activity-approval-subscription.js.map +1 -1
  146. package/dist-server/service/activity-instance/activity-instance-query.js +4 -5
  147. package/dist-server/service/activity-instance/activity-instance-query.js.map +1 -1
  148. package/dist-server/service/activity-instance/activity-instance-subscription.js +3 -4
  149. package/dist-server/service/activity-instance/activity-instance-subscription.js.map +1 -1
  150. package/dist-server/service/activity-template/activity-template-mutation.js +25 -7
  151. package/dist-server/service/activity-template/activity-template-mutation.js.map +1 -1
  152. package/dist-server/service/activity-template/activity-template-query.js +1 -1
  153. package/dist-server/service/activity-template/activity-template-query.js.map +1 -1
  154. package/dist-server/service/activity-thread/activity-thread-subscription.js +3 -4
  155. package/dist-server/service/activity-thread/activity-thread-subscription.js.map +1 -1
  156. package/dist-server/service/installable-activity/installable-activity-mutation.js +19 -3
  157. package/dist-server/service/installable-activity/installable-activity-mutation.js.map +1 -1
  158. package/dist-server/tsconfig.tsbuildinfo +1 -1
  159. package/package.json +3 -3
@@ -19,6 +19,211 @@ function getSafeFormatter(locale, options) {
19
19
  }
20
20
  const formatter = getSafeFormatter(navigator.language, { dateStyle: 'full', timeStyle: 'short' });
21
21
  let ActivityInstanceView = class ActivityInstanceView extends localize(i18next)(LitElement) {
22
+ static { this.styles = [
23
+ ScrollbarStyles,
24
+ css `
25
+ :host {
26
+ display: flex;
27
+ overflow: auto;
28
+ font-size: var(--fontsize-default);
29
+ }
30
+ :host([state='assigned']) {
31
+ --worklist-status-color: #5f7184;
32
+ }
33
+
34
+ :host([state='started']) {
35
+ --worklist-status-color: #56af45;
36
+ }
37
+
38
+ :host([state='delegated']) {
39
+ --worklist-status-color: #8654b0;
40
+ }
41
+
42
+ :host([state='submitted']) {
43
+ --worklist-status-color: #428df3;
44
+ }
45
+
46
+ :host([state='escalated']) {
47
+ --worklist-status-color: #595de5;
48
+ }
49
+
50
+ :host([state='rejected']) {
51
+ --worklist-status-color: #f27429;
52
+ }
53
+
54
+ :host([state='ended']) {
55
+ --worklist-status-color: #02acae;
56
+ }
57
+
58
+ :host([state='aborted']) {
59
+ --worklist-status-color: #cb3a33;
60
+ }
61
+ [instance-container] {
62
+ flex: 1;
63
+ background-color: var(--md-sys-color-background);
64
+ border-right: var(--border-dim-color);
65
+ padding: var(--spacing-large);
66
+ color: var(--md-sys-color-secondary);
67
+ }
68
+ [thread-container] {
69
+ flex: 2;
70
+ padding: var(--spacing-large);
71
+ }
72
+ [instance-container] div {
73
+ margin-bottom: var(--spacing-medium);
74
+ padding-bottom: var(--spacing-medium);
75
+ border-bottom: var(--border-dim-color);
76
+ }
77
+ [header] md-icon {
78
+ background-color: var(--worklist-status-color, tomato);
79
+ float: left;
80
+ margin-right: var(--spacing-medium);
81
+ padding: var(--spacing-medium);
82
+ border-radius: 50%;
83
+ float: left;
84
+ font-size: 1.8em;
85
+ color: var(--md-sys-color-on-primary);
86
+ }
87
+ [header] strong {
88
+ display: block;
89
+ font: bold 22px / 1.1 var(--theme-font);
90
+ }
91
+ [header] {
92
+ overflow: hidden;
93
+ font-size: var(--fontsize-small);
94
+ }
95
+ [instance-container] div label {
96
+ display: inline-block;
97
+ margin-right: var(--spacing-medium);
98
+ min-width: 50px;
99
+ }
100
+ [issuer] md-icon {
101
+ opacity: 0.5;
102
+ position: relative;
103
+ top: 4px;
104
+ font-size: 20px;
105
+ }
106
+ span[status] {
107
+ width: 15px;
108
+ height: 15px;
109
+ position: relative;
110
+ top: 2px;
111
+ background-color: var(--worklist-status-color, tomato);
112
+ display: inline-block;
113
+ margin-right: var(--spacing-small);
114
+ border-radius: 50%;
115
+ }
116
+ [thread-container] table {
117
+ width: 100%;
118
+ border-collapse: collapse;
119
+ }
120
+ [thread-container] th {
121
+ color: var(--md-sys-color-on-primary-container);
122
+ background-color: var(--md-sys-color-primary-container);
123
+ border-top: var(--grid-header-top-border);
124
+ border-bottom: var(--grid-header-bottom-border);
125
+ padding: var(--grid-header-padding);
126
+ text-overflow: ellipsis;
127
+ font: var(--grid-header-font);
128
+ }
129
+ [thread-container] td {
130
+ padding: var(--spacing-small);
131
+ border-bottom: var(--grid-record-border-bottom);
132
+ }
133
+ [assignee] * {
134
+ vertical-align: middle;
135
+ }
136
+ [assignee] md-icon {
137
+ opacity: 0.5;
138
+ }
139
+ [subtitle] {
140
+ display: block;
141
+ margin: var(--spacing-large) 0 var(--spacing-small) 0;
142
+ padding: var(--spacing-small) var(--spacing-medium);
143
+ color: var(--md-sys-color-on-surface);
144
+ background-color: var(--md-sys-color-surface-variant);
145
+ font: bold 16px var(--theme-font);
146
+ border: 2px solid var(--md-sys-color-outline);
147
+ border-radius: 999px;
148
+ }
149
+ [timeline] ol {
150
+ list-style: none;
151
+ margin: 0;
152
+ padding: 0;
153
+ }
154
+ [timeline] li {
155
+ display: flex;
156
+ }
157
+ [timeline] [info] {
158
+ color: var(--md-sys-color-on-surface);
159
+ background: var(--md-sys-color-surface-variant);
160
+
161
+ flex: 1;
162
+ }
163
+ [timeline] [date] {
164
+ opacity: 0.7;
165
+ width: 130px;
166
+ font-size: var(--fontsize-small);
167
+ }
168
+ [timeline] [info] strong {
169
+ float: right;
170
+ }
171
+ [timeline] [status] {
172
+ margin: 0 var(--spacing-small);
173
+ display: block;
174
+ border-radius: 50%;
175
+ width: 12px;
176
+ height: 12px;
177
+ position: relative;
178
+ top: 3px;
179
+ border: 2px solid #fff;
180
+ background-color: var(--worklist-status-color, tomato);
181
+ }
182
+ [timeline] [status]::before {
183
+ content: '';
184
+ height: 60px;
185
+ width: 2px;
186
+ display: block;
187
+ position: relative;
188
+ margin-left: 5px;
189
+ background-color: var(--worklist-status-color, tomato);
190
+ opacity: 0.2;
191
+ }
192
+ [timeline] [info] md-icon {
193
+ position: relative;
194
+ top: 3px;
195
+ font-size: var(--fontsize-large);
196
+ }
197
+ [timeline] [info] p {
198
+ background-color: #f4f4f4;
199
+ margin: var(--spacing-small) 0 var(--spacing-medium) 0;
200
+ padding: var(--spacing-small) var(--spacing-medium);
201
+ border-radius: var(--border-radius);
202
+ font-size: var(--fontsize-small);
203
+ text-align: justify;
204
+ }
205
+ [timeline] [info] p::before {
206
+ content: '';
207
+ float: right;
208
+ margin-top: -10px;
209
+ margin-right: 20px;
210
+ border: 7px solid transparent;
211
+ border-bottom-color: #f4f4f4;
212
+ border-top: 0;
213
+ }
214
+ [thread] div {
215
+ border-bottom: var(--border-dim-color);
216
+ padding: var(--spacing-small);
217
+ text-align: right;
218
+ overflow: hidden;
219
+ }
220
+ [thread] div label {
221
+ float: left;
222
+ width: 25%;
223
+ text-align: left;
224
+ }
225
+ `
226
+ ]; }
22
227
  render() {
23
228
  if (!this.activityInstance) {
24
229
  return html `<div>no activity instance info.</div>`;
@@ -41,7 +246,7 @@ let ActivityInstanceView = class ActivityInstanceView extends localize(i18next)(
41
246
  <div issuer>
42
247
  <label>${i18next.t('field.issuer')}</label>
43
248
  <md-icon>account_circle</md-icon>
44
- <strong>${(issuer === null || issuer === void 0 ? void 0 : issuer.name) || ''}</strong>
249
+ <strong>${issuer?.name || ''}</strong>
45
250
  </div>
46
251
  <div>
47
252
  <label>${i18next.t('field.assigned-at')}</label>${assignedAt && formatter.format(new Date(assignedAt))}
@@ -53,17 +258,16 @@ let ActivityInstanceView = class ActivityInstanceView extends localize(i18next)(
53
258
  </div>
54
259
  </div>
55
260
  <div thread-container>
56
- ${activityThreads === null || activityThreads === void 0 ? void 0 : activityThreads.map(activityThread => this.renderActivityThread(this.activityInstance, activityThread))}
261
+ ${activityThreads?.map(activityThread => this.renderActivityThread(this.activityInstance, activityThread))}
57
262
  </div>
58
263
  `;
59
264
  }
60
265
  renderActivityThread(activityInstance, activityThread) {
61
- var _a;
62
266
  const { state, assignee, output, round, activityApprovals = [], assignedAt, startedAt, terminatedAt } = activityThread;
63
267
  const { approvalLine } = activityInstance;
64
268
  const { name, email } = assignee || {};
65
269
  const approvals = activityApprovals.sort((a, b) => a.round < b.round ? 1 : a.round > b.round ? -1 : a.order < b.order ? 1 : -1);
66
- const current = ((_a = approvals[0]) === null || _a === void 0 ? void 0 : _a.round) == round ? approvals[0].order : -1;
270
+ const current = approvals[0]?.round == round ? approvals[0].order : -1;
67
271
  return html `
68
272
  <div assignee>
69
273
  <md-icon>account_circle</md-icon>
@@ -131,7 +335,7 @@ let ActivityInstanceView = class ActivityInstanceView extends localize(i18next)(
131
335
  <th>${i18next.t('label.value')}</th>
132
336
  </tr>
133
337
 
134
- ${searchKeys === null || searchKeys === void 0 ? void 0 : searchKeys.map((item, index) => html `
338
+ ${searchKeys?.map((item, index) => html `
135
339
  <tr>
136
340
  <td>${item.tKey ? i18next.t(item.tKey) : item.name}</td>
137
341
  <td>${this.activityInstance[`key0${index + 1}`]}</td>
@@ -149,7 +353,7 @@ let ActivityInstanceView = class ActivityInstanceView extends localize(i18next)(
149
353
  <th>${i18next.t('label.name')}</th>
150
354
  <th>${i18next.t('label.value')}</th>
151
355
  </tr>
152
- ${model === null || model === void 0 ? void 0 : model.map(item => html `
356
+ ${model?.map(item => html `
153
357
  <tr>
154
358
  <td>${item.name}</td>
155
359
  <td>${item.tag ? data[item.tag] : ''}</td>
@@ -164,7 +368,6 @@ let ActivityInstanceView = class ActivityInstanceView extends localize(i18next)(
164
368
  }
165
369
  }
166
370
  async fetchActivityInstance() {
167
- var _a;
168
371
  const id = this.activityInstanceId;
169
372
  const response = await client.query({
170
373
  query: gql `
@@ -264,214 +467,9 @@ let ActivityInstanceView = class ActivityInstanceView extends localize(i18next)(
264
467
  }
265
468
  });
266
469
  this.activityInstance = response.data.activityInstance;
267
- this.setAttribute('state', ((_a = this.activityInstance) === null || _a === void 0 ? void 0 : _a.state) || '');
470
+ this.setAttribute('state', this.activityInstance?.state || '');
268
471
  }
269
472
  };
270
- ActivityInstanceView.styles = [
271
- ScrollbarStyles,
272
- css `
273
- :host {
274
- display: flex;
275
- overflow: auto;
276
- font-size: var(--fontsize-default);
277
- }
278
- :host([state='assigned']) {
279
- --worklist-status-color: #5f7184;
280
- }
281
-
282
- :host([state='started']) {
283
- --worklist-status-color: #56af45;
284
- }
285
-
286
- :host([state='delegated']) {
287
- --worklist-status-color: #8654b0;
288
- }
289
-
290
- :host([state='submitted']) {
291
- --worklist-status-color: #428df3;
292
- }
293
-
294
- :host([state='escalated']) {
295
- --worklist-status-color: #595de5;
296
- }
297
-
298
- :host([state='rejected']) {
299
- --worklist-status-color: #f27429;
300
- }
301
-
302
- :host([state='ended']) {
303
- --worklist-status-color: #02acae;
304
- }
305
-
306
- :host([state='aborted']) {
307
- --worklist-status-color: #cb3a33;
308
- }
309
- [instance-container] {
310
- flex: 1;
311
- background-color: var(--md-sys-color-background);
312
- border-right: var(--border-dim-color);
313
- padding: var(--spacing-large);
314
- color: var(--md-sys-color-secondary);
315
- }
316
- [thread-container] {
317
- flex: 2;
318
- padding: var(--spacing-large);
319
- }
320
- [instance-container] div {
321
- margin-bottom: var(--spacing-medium);
322
- padding-bottom: var(--spacing-medium);
323
- border-bottom: var(--border-dim-color);
324
- }
325
- [header] md-icon {
326
- background-color: var(--worklist-status-color, tomato);
327
- float: left;
328
- margin-right: var(--spacing-medium);
329
- padding: var(--spacing-medium);
330
- border-radius: 50%;
331
- float: left;
332
- font-size: 1.8em;
333
- color: var(--md-sys-color-on-primary);
334
- }
335
- [header] strong {
336
- display: block;
337
- font: bold 22px / 1.1 var(--theme-font);
338
- }
339
- [header] {
340
- overflow: hidden;
341
- font-size: var(--fontsize-small);
342
- }
343
- [instance-container] div label {
344
- display: inline-block;
345
- margin-right: var(--spacing-medium);
346
- min-width: 50px;
347
- }
348
- [issuer] md-icon {
349
- opacity: 0.5;
350
- position: relative;
351
- top: 4px;
352
- font-size: 20px;
353
- }
354
- span[status] {
355
- width: 15px;
356
- height: 15px;
357
- position: relative;
358
- top: 2px;
359
- background-color: var(--worklist-status-color, tomato);
360
- display: inline-block;
361
- margin-right: var(--spacing-small);
362
- border-radius: 50%;
363
- }
364
- [thread-container] table {
365
- width: 100%;
366
- border-collapse: collapse;
367
- }
368
- [thread-container] th {
369
- color: var(--md-sys-color-on-primary-container);
370
- background-color: var(--md-sys-color-primary-container);
371
- border-top: var(--grid-header-top-border);
372
- border-bottom: var(--grid-header-bottom-border);
373
- padding: var(--grid-header-padding);
374
- text-overflow: ellipsis;
375
- font: var(--grid-header-font);
376
- }
377
- [thread-container] td {
378
- padding: var(--spacing-small);
379
- border-bottom: var(--grid-record-border-bottom);
380
- }
381
- [assignee] * {
382
- vertical-align: middle;
383
- }
384
- [assignee] md-icon {
385
- opacity: 0.5;
386
- }
387
- [subtitle] {
388
- display: block;
389
- margin: var(--spacing-large) 0 var(--spacing-small) 0;
390
- padding: var(--spacing-small) var(--spacing-medium);
391
- color: var(--md-sys-color-on-surface);
392
- background-color: var(--md-sys-color-surface-variant);
393
- font: bold 16px var(--theme-font);
394
- border: 2px solid var(--md-sys-color-outline);
395
- border-radius: 999px;
396
- }
397
- [timeline] ol {
398
- list-style: none;
399
- margin: 0;
400
- padding: 0;
401
- }
402
- [timeline] li {
403
- display: flex;
404
- }
405
- [timeline] [info] {
406
- color: var(--md-sys-color-on-surface);
407
- background: var(--md-sys-color-surface-variant);
408
-
409
- flex: 1;
410
- }
411
- [timeline] [date] {
412
- opacity: 0.7;
413
- width: 130px;
414
- font-size: var(--fontsize-small);
415
- }
416
- [timeline] [info] strong {
417
- float: right;
418
- }
419
- [timeline] [status] {
420
- margin: 0 var(--spacing-small);
421
- display: block;
422
- border-radius: 50%;
423
- width: 12px;
424
- height: 12px;
425
- position: relative;
426
- top: 3px;
427
- border: 2px solid #fff;
428
- background-color: var(--worklist-status-color, tomato);
429
- }
430
- [timeline] [status]::before {
431
- content: '';
432
- height: 60px;
433
- width: 2px;
434
- display: block;
435
- position: relative;
436
- margin-left: 5px;
437
- background-color: var(--worklist-status-color, tomato);
438
- opacity: 0.2;
439
- }
440
- [timeline] [info] md-icon {
441
- position: relative;
442
- top: 3px;
443
- font-size: var(--fontsize-large);
444
- }
445
- [timeline] [info] p {
446
- background-color: #f4f4f4;
447
- margin: var(--spacing-small) 0 var(--spacing-medium) 0;
448
- padding: var(--spacing-small) var(--spacing-medium);
449
- border-radius: var(--border-radius);
450
- font-size: var(--fontsize-small);
451
- text-align: justify;
452
- }
453
- [timeline] [info] p::before {
454
- content: '';
455
- float: right;
456
- margin-top: -10px;
457
- margin-right: 20px;
458
- border: 7px solid transparent;
459
- border-bottom-color: #f4f4f4;
460
- border-top: 0;
461
- }
462
- [thread] div {
463
- border-bottom: var(--border-dim-color);
464
- padding: var(--spacing-small);
465
- text-align: right;
466
- overflow: hidden;
467
- }
468
- [thread] div label {
469
- float: left;
470
- width: 25%;
471
- text-align: left;
472
- }
473
- `
474
- ];
475
473
  __decorate([
476
474
  property({
477
475
  type: String,
@@ -1 +1 @@
1
- {"version":3,"file":"activity-instance-view.js","sourceRoot":"","sources":["../../../client/pages/activity-instance/activity-instance-view.ts"],"names":[],"mappings":"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","sourcesContent":["import '@things-factory/organization/dist-client/component/approval-line-view.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\n\nimport { ActivityInstance } from '../../types/activity-instance.js'\nimport { ActivityThread } from '../../types/activity-thread.js'\nimport { ActivityApproval } from '../../types/activity-approval.js'\n\nfunction getSafeFormatter(locale: string, options: Intl.DateTimeFormatOptions): Intl.DateTimeFormat {\n try {\n const safeLocale = locale || 'en-US'\n return new Intl.DateTimeFormat(safeLocale, options)\n } catch (e) {\n console.warn(`Invalid locale or options provided: ${locale}, falling back to default en-US.`, e)\n return new Intl.DateTimeFormat('en-US', options)\n }\n}\n\nconst formatter = getSafeFormatter(navigator.language, { dateStyle: 'full', timeStyle: 'short' })\n@customElement('activity-instance-view')\nexport class ActivityInstanceView extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n overflow: auto;\n font-size: var(--fontsize-default);\n }\n :host([state='assigned']) {\n --worklist-status-color: #5f7184;\n }\n\n :host([state='started']) {\n --worklist-status-color: #56af45;\n }\n\n :host([state='delegated']) {\n --worklist-status-color: #8654b0;\n }\n\n :host([state='submitted']) {\n --worklist-status-color: #428df3;\n }\n\n :host([state='escalated']) {\n --worklist-status-color: #595de5;\n }\n\n :host([state='rejected']) {\n --worklist-status-color: #f27429;\n }\n\n :host([state='ended']) {\n --worklist-status-color: #02acae;\n }\n\n :host([state='aborted']) {\n --worklist-status-color: #cb3a33;\n }\n [instance-container] {\n flex: 1;\n background-color: var(--md-sys-color-background);\n border-right: var(--border-dim-color);\n padding: var(--spacing-large);\n color: var(--md-sys-color-secondary);\n }\n [thread-container] {\n flex: 2;\n padding: var(--spacing-large);\n }\n [instance-container] div {\n margin-bottom: var(--spacing-medium);\n padding-bottom: var(--spacing-medium);\n border-bottom: var(--border-dim-color);\n }\n [header] md-icon {\n background-color: var(--worklist-status-color, tomato);\n float: left;\n margin-right: var(--spacing-medium);\n padding: var(--spacing-medium);\n border-radius: 50%;\n float: left;\n font-size: 1.8em;\n color: var(--md-sys-color-on-primary);\n }\n [header] strong {\n display: block;\n font: bold 22px / 1.1 var(--theme-font);\n }\n [header] {\n overflow: hidden;\n font-size: var(--fontsize-small);\n }\n [instance-container] div label {\n display: inline-block;\n margin-right: var(--spacing-medium);\n min-width: 50px;\n }\n [issuer] md-icon {\n opacity: 0.5;\n position: relative;\n top: 4px;\n font-size: 20px;\n }\n span[status] {\n width: 15px;\n height: 15px;\n position: relative;\n top: 2px;\n background-color: var(--worklist-status-color, tomato);\n display: inline-block;\n margin-right: var(--spacing-small);\n border-radius: 50%;\n }\n [thread-container] table {\n width: 100%;\n border-collapse: collapse;\n }\n [thread-container] th {\n color: var(--md-sys-color-on-primary-container);\n background-color: var(--md-sys-color-primary-container);\n border-top: var(--grid-header-top-border);\n border-bottom: var(--grid-header-bottom-border);\n padding: var(--grid-header-padding);\n text-overflow: ellipsis;\n font: var(--grid-header-font);\n }\n [thread-container] td {\n padding: var(--spacing-small);\n border-bottom: var(--grid-record-border-bottom);\n }\n [assignee] * {\n vertical-align: middle;\n }\n [assignee] md-icon {\n opacity: 0.5;\n }\n [subtitle] {\n display: block;\n margin: var(--spacing-large) 0 var(--spacing-small) 0;\n padding: var(--spacing-small) var(--spacing-medium);\n color: var(--md-sys-color-on-surface);\n background-color: var(--md-sys-color-surface-variant);\n font: bold 16px var(--theme-font);\n border: 2px solid var(--md-sys-color-outline);\n border-radius: 999px;\n }\n [timeline] ol {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n [timeline] li {\n display: flex;\n }\n [timeline] [info] {\n color: var(--md-sys-color-on-surface);\n background: var(--md-sys-color-surface-variant);\n\n flex: 1;\n }\n [timeline] [date] {\n opacity: 0.7;\n width: 130px;\n font-size: var(--fontsize-small);\n }\n [timeline] [info] strong {\n float: right;\n }\n [timeline] [status] {\n margin: 0 var(--spacing-small);\n display: block;\n border-radius: 50%;\n width: 12px;\n height: 12px;\n position: relative;\n top: 3px;\n border: 2px solid #fff;\n background-color: var(--worklist-status-color, tomato);\n }\n [timeline] [status]::before {\n content: '';\n height: 60px;\n width: 2px;\n display: block;\n position: relative;\n margin-left: 5px;\n background-color: var(--worklist-status-color, tomato);\n opacity: 0.2;\n }\n [timeline] [info] md-icon {\n position: relative;\n top: 3px;\n font-size: var(--fontsize-large);\n }\n [timeline] [info] p {\n background-color: #f4f4f4;\n margin: var(--spacing-small) 0 var(--spacing-medium) 0;\n padding: var(--spacing-small) var(--spacing-medium);\n border-radius: var(--border-radius);\n font-size: var(--fontsize-small);\n text-align: justify;\n }\n [timeline] [info] p::before {\n content: '';\n float: right;\n margin-top: -10px;\n margin-right: 20px;\n border: 7px solid transparent;\n border-bottom-color: #f4f4f4;\n border-top: 0;\n }\n [thread] div {\n border-bottom: var(--border-dim-color);\n padding: var(--spacing-small);\n text-align: right;\n overflow: hidden;\n }\n [thread] div label {\n float: left;\n width: 25%;\n text-align: left;\n }\n `\n ]\n\n @property({\n type: String,\n attribute: 'activity-instance-id'\n })\n activityInstanceId?: string\n\n @state() activityInstance?: ActivityInstance\n\n render() {\n if (!this.activityInstance) {\n return html`<div>no activity instance info.</div>`\n }\n\n const { id, name, description, state, issuer, assignedAt, startedAt, activityThreads, terminatedAt, updatedAt } =\n this.activityInstance\n\n return html`\n <div instance-container>\n <div header>\n <md-icon>description</md-icon>\n <strong>${name}</strong>\n ${description}\n </div>\n\n <div>\n <label>${i18next.t('label.status')}</label>\n <span status></span>\n <strong>${i18next.t('label.activity-state-' + state)}</strong>\n </div>\n\n <div issuer>\n <label>${i18next.t('field.issuer')}</label>\n <md-icon>account_circle</md-icon>\n <strong>${issuer?.name || ''}</strong>\n </div>\n <div>\n <label>${i18next.t('field.assigned-at')}</label>${assignedAt && formatter.format(new Date(assignedAt))}\n </div>\n <div><label>${i18next.t('field.started-at')}</label>${startedAt && formatter.format(new Date(startedAt))}</div>\n <div><label>${i18next.t('field.updated-at')}</label>${updatedAt && formatter.format(new Date(updatedAt))}</div>\n <div>\n <label>${i18next.t('field.terminated-at')}</label>${terminatedAt && formatter.format(new Date(terminatedAt))}\n </div>\n </div>\n <div thread-container>\n ${activityThreads?.map(activityThread => this.renderActivityThread(this.activityInstance!, activityThread))}\n </div>\n `\n }\n\n renderActivityThread(activityInstance: ActivityInstance, activityThread: ActivityThread) {\n const {\n state,\n assignee,\n output,\n round,\n activityApprovals = [],\n assignedAt,\n startedAt,\n terminatedAt\n } = activityThread\n const { approvalLine } = activityInstance!\n const { name, email } = assignee || {}\n const approvals = activityApprovals.sort((a, b) =>\n a.round < b.round ? 1 : a.round > b.round ? -1 : a.order! < b.order! ? 1 : -1\n )\n const current = approvals[0]?.round == round ? approvals[0].order : -1\n\n return html`\n <div assignee>\n <md-icon>account_circle</md-icon>\n <strong>${name}</strong>\n </div>\n\n <div thread>\n <span subtitle>${i18next.t('label.information')}</span>\n <div>\n <label>${i18next.t('label.status')}</label>\n <span status></span>\n <strong>${i18next.t('label.activity-state-' + state)}</strong>\n </div>\n <div>\n <label>${i18next.t('field.assigned-at')}</label> ${assignedAt && formatter.format(new Date(assignedAt))}\n </div>\n <div><label>${i18next.t('field.started-at')}</label> ${startedAt && formatter.format(new Date(startedAt))}</div>\n <div>\n <label>${i18next.t('field.terminated-at')}</label> ${terminatedAt && formatter.format(new Date(terminatedAt))}\n </div>\n <div><label>${i18next.t('field.round')}</label> ${round}</div>\n </div>\n\n <div>\n <span subtitle>${i18next.t('field.artifact')}</span>\n ${this.renderInOut(output || {})}\n </div>\n <div timeline>\n <span subtitle>${i18next.t('label.timeline')}</span>\n\n <div>\n ${approvalLine\n ? html`<approval-line-view .model=${approvalLine} .current=${current}></approval-line-view>`\n : html``}\n </div>\n\n <ol>\n ${approvals.map(approval => this.renderActivityApproval(approval))}\n </ol>\n </div>\n `\n }\n\n renderActivityApproval(activityApproval: ActivityApproval) {\n const { judgment, approver, comment, round, order, createdAt, terminatedAt } = activityApproval\n const { name, email } = approver || {}\n\n return html`\n <li>\n <span date>${formatter.format(new Date(terminatedAt || createdAt!))}</span>\n <span status></span>\n <span info>\n ${i18next.t('label.activity-state-' + (judgment || 'started'))}\n <strong><md-icon>account_circle</md-icon>${name}</strong>\n <p>${comment}</p>\n </span>\n </li>\n `\n }\n\n renderSearchKeys() {\n const { activity } = this.activityInstance!\n const { searchKeys = [] } = activity! || {}\n\n return html`\n <table>\n <tr>\n <th>${i18next.t('label.name')}</th>\n <th>${i18next.t('label.value')}</th>\n </tr>\n\n ${searchKeys?.map(\n (item, index) => html`\n <tr>\n <td>${item.tKey ? i18next.t(item.tKey) : item.name}</td>\n <td>${this.activityInstance![`key0${index + 1}`]}</td>\n </tr>\n `\n )}\n </table>\n `\n }\n\n renderInOut(data) {\n const { activity } = this.activityInstance!\n const { model } = activity || {}\n\n return html`\n <table>\n <tr>\n <th>${i18next.t('label.name')}</th>\n <th>${i18next.t('label.value')}</th>\n </tr>\n ${model?.map(\n item => html`\n <tr>\n <td>${item.name}</td>\n <td>${item.tag ? data[item.tag] : ''}</td>\n </tr>\n `\n )}\n </table>\n `\n }\n\n updated(changes) {\n if (changes.has('activityInstanceId')) {\n this.fetchActivityInstance()\n }\n }\n\n async fetchActivityInstance() {\n const id = this.activityInstanceId\n\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n activityInstance(id: $id) {\n id\n name\n description\n state\n key01\n key02\n key03\n key04\n key05\n input\n output\n issuer {\n name\n email\n }\n starter {\n name\n email\n }\n activity {\n id\n name\n description\n searchKeys {\n name\n description\n inputKey\n tKey\n }\n model {\n name\n description\n active\n tag\n inout\n type\n unit\n options\n quantifier\n spec\n }\n }\n approvalLine {\n type\n value\n approver {\n id\n name\n description\n controlNo\n }\n }\n activityThreads {\n state\n transaction\n output\n assignee {\n id\n name\n email\n }\n round\n activityApprovals {\n round\n order\n approver {\n name\n email\n }\n judgment\n comment\n createdAt\n terminatedAt\n }\n assignedAt\n startedAt\n terminatedAt\n }\n updater {\n id\n name\n }\n assignedAt\n startedAt\n terminatedAt\n updatedAt\n }\n }\n `,\n variables: {\n id\n }\n })\n\n this.activityInstance = response.data.activityInstance\n this.setAttribute('state', this.activityInstance?.state || '')\n }\n}\n"]}
1
+ {"version":3,"file":"activity-instance-view.js","sourceRoot":"","sources":["../../../client/pages/activity-instance/activity-instance-view.ts"],"names":[],"mappings":";AAAA,OAAO,0EAA0E,CAAA;AAEjF,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAS,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAInE,SAAS,gBAAgB,CAAC,MAAc,EAAE,OAAmC;IAC3E,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO,CAAA;QACpC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACrD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,uCAAuC,MAAM,kCAAkC,EAAE,CAAC,CAAC,CAAA;QAChG,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAClD,CAAC;AACH,CAAC;AAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAA;AAE1F,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;aAC9D,WAAM,GAAG;QACd,eAAe;QACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyMF;KACF,AA5MY,CA4MZ;IAUD,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAA,uCAAuC,CAAA;QACpD,CAAC;QAED,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,GAC7G,IAAI,CAAC,gBAAgB,CAAA;QAEvB,OAAO,IAAI,CAAA;;;;oBAIK,IAAI;YACZ,WAAW;;;;mBAIJ,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;;oBAExB,OAAO,CAAC,CAAC,CAAC,uBAAuB,GAAG,KAAK,CAAC;;;;mBAI3C,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;;oBAExB,MAAM,EAAE,IAAI,IAAI,EAAE;;;mBAGnB,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,UAAU,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;;sBAE1F,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;sBAC1F,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;;mBAE7F,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,WAAW,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;;;;UAI5G,eAAe,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAiB,EAAE,cAAc,CAAC,CAAC;;KAE9G,CAAA;IACH,CAAC;IAED,oBAAoB,CAAC,gBAAkC,EAAE,cAA8B;QACrF,MAAM,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,iBAAiB,GAAG,EAAE,EACtB,UAAU,EACV,SAAS,EACT,YAAY,EACb,GAAG,cAAc,CAAA;QAClB,MAAM,EAAE,YAAY,EAAE,GAAG,gBAAiB,CAAA;QAC1C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,IAAI,EAAE,CAAA;QACtC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChD,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAM,GAAG,CAAC,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC9E,CAAA;QACD,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEtE,OAAO,IAAI,CAAA;;;kBAGG,IAAI;;;;yBAIG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;;mBAEpC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;;oBAExB,OAAO,CAAC,CAAC,CAAC,uBAAuB,GAAG,KAAK,CAAC;;;mBAG3C,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,YAAY,UAAU,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;;sBAE3F,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,YAAY,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;;mBAE9F,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,YAAY,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;;sBAEjG,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,KAAK;;;;yBAItC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;UAC1C,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,EAAE,CAAC;;;yBAGf,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;;;YAGxC,YAAY;YACZ,CAAC,CAAC,IAAI,CAAA,8BAA8B,YAAY,aAAa,OAAO,wBAAwB;YAC5F,CAAC,CAAC,IAAI,CAAA,EAAE;;;;YAIR,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;;;KAGvE,CAAA;IACH,CAAC;IAED,sBAAsB,CAAC,gBAAkC;QACvD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAA;QAC/F,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,IAAI,EAAE,CAAA;QAEtC,OAAO,IAAI,CAAA;;qBAEM,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,SAAU,CAAC,CAAC;;;YAG/D,OAAO,CAAC,CAAC,CAAC,uBAAuB,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;qDACnB,IAAI;eAC1C,OAAO;;;KAGjB,CAAA;IACH,CAAC;IAED,gBAAgB;QACd,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,gBAAiB,CAAA;QAC3C,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,QAAS,IAAI,EAAE,CAAA;QAE3C,OAAO,IAAI,CAAA;;;gBAGC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;gBACvB,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;;UAG9B,UAAU,EAAE,GAAG,CACf,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAA;;oBAEX,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;oBAC5C,IAAI,CAAC,gBAAiB,CAAC,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;;WAEnD,CACF;;KAEJ,CAAA;IACH,CAAC;IAED,WAAW,CAAC,IAAI;QACd,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,gBAAiB,CAAA;QAC3C,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,IAAI,EAAE,CAAA;QAEhC,OAAO,IAAI,CAAA;;;gBAGC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;gBACvB,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;UAE9B,KAAK,EAAE,GAAG,CACV,IAAI,CAAC,EAAE,CAAC,IAAI,CAAA;;oBAEF,IAAI,CAAC,IAAI;oBACT,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;;WAEvC,CACF;;KAEJ,CAAA;IACH,CAAC;IAED,OAAO,CAAC,OAAO;QACb,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAA;QAElC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2FT;YACD,SAAS,EAAE;gBACT,EAAE;aACH;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAA;QACtD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAA;IAChE,CAAC;;AAtRD;IAJC,QAAQ,CAAC;QACR,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,sBAAsB;KAClC,CAAC;;gEACyB;AAElB;IAAR,KAAK,EAAE;8BAAoB,gBAAgB;8DAAA;AArNjC,oBAAoB;IADhC,aAAa,CAAC,wBAAwB,CAAC;GAC3B,oBAAoB,CA0ehC","sourcesContent":["import '@things-factory/organization/dist-client/component/approval-line-view.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\n\nimport { ActivityInstance } from '../../types/activity-instance.js'\nimport { ActivityThread } from '../../types/activity-thread.js'\nimport { ActivityApproval } from '../../types/activity-approval.js'\n\nfunction getSafeFormatter(locale: string, options: Intl.DateTimeFormatOptions): Intl.DateTimeFormat {\n try {\n const safeLocale = locale || 'en-US'\n return new Intl.DateTimeFormat(safeLocale, options)\n } catch (e) {\n console.warn(`Invalid locale or options provided: ${locale}, falling back to default en-US.`, e)\n return new Intl.DateTimeFormat('en-US', options)\n }\n}\n\nconst formatter = getSafeFormatter(navigator.language, { dateStyle: 'full', timeStyle: 'short' })\n@customElement('activity-instance-view')\nexport class ActivityInstanceView extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n overflow: auto;\n font-size: var(--fontsize-default);\n }\n :host([state='assigned']) {\n --worklist-status-color: #5f7184;\n }\n\n :host([state='started']) {\n --worklist-status-color: #56af45;\n }\n\n :host([state='delegated']) {\n --worklist-status-color: #8654b0;\n }\n\n :host([state='submitted']) {\n --worklist-status-color: #428df3;\n }\n\n :host([state='escalated']) {\n --worklist-status-color: #595de5;\n }\n\n :host([state='rejected']) {\n --worklist-status-color: #f27429;\n }\n\n :host([state='ended']) {\n --worklist-status-color: #02acae;\n }\n\n :host([state='aborted']) {\n --worklist-status-color: #cb3a33;\n }\n [instance-container] {\n flex: 1;\n background-color: var(--md-sys-color-background);\n border-right: var(--border-dim-color);\n padding: var(--spacing-large);\n color: var(--md-sys-color-secondary);\n }\n [thread-container] {\n flex: 2;\n padding: var(--spacing-large);\n }\n [instance-container] div {\n margin-bottom: var(--spacing-medium);\n padding-bottom: var(--spacing-medium);\n border-bottom: var(--border-dim-color);\n }\n [header] md-icon {\n background-color: var(--worklist-status-color, tomato);\n float: left;\n margin-right: var(--spacing-medium);\n padding: var(--spacing-medium);\n border-radius: 50%;\n float: left;\n font-size: 1.8em;\n color: var(--md-sys-color-on-primary);\n }\n [header] strong {\n display: block;\n font: bold 22px / 1.1 var(--theme-font);\n }\n [header] {\n overflow: hidden;\n font-size: var(--fontsize-small);\n }\n [instance-container] div label {\n display: inline-block;\n margin-right: var(--spacing-medium);\n min-width: 50px;\n }\n [issuer] md-icon {\n opacity: 0.5;\n position: relative;\n top: 4px;\n font-size: 20px;\n }\n span[status] {\n width: 15px;\n height: 15px;\n position: relative;\n top: 2px;\n background-color: var(--worklist-status-color, tomato);\n display: inline-block;\n margin-right: var(--spacing-small);\n border-radius: 50%;\n }\n [thread-container] table {\n width: 100%;\n border-collapse: collapse;\n }\n [thread-container] th {\n color: var(--md-sys-color-on-primary-container);\n background-color: var(--md-sys-color-primary-container);\n border-top: var(--grid-header-top-border);\n border-bottom: var(--grid-header-bottom-border);\n padding: var(--grid-header-padding);\n text-overflow: ellipsis;\n font: var(--grid-header-font);\n }\n [thread-container] td {\n padding: var(--spacing-small);\n border-bottom: var(--grid-record-border-bottom);\n }\n [assignee] * {\n vertical-align: middle;\n }\n [assignee] md-icon {\n opacity: 0.5;\n }\n [subtitle] {\n display: block;\n margin: var(--spacing-large) 0 var(--spacing-small) 0;\n padding: var(--spacing-small) var(--spacing-medium);\n color: var(--md-sys-color-on-surface);\n background-color: var(--md-sys-color-surface-variant);\n font: bold 16px var(--theme-font);\n border: 2px solid var(--md-sys-color-outline);\n border-radius: 999px;\n }\n [timeline] ol {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n [timeline] li {\n display: flex;\n }\n [timeline] [info] {\n color: var(--md-sys-color-on-surface);\n background: var(--md-sys-color-surface-variant);\n\n flex: 1;\n }\n [timeline] [date] {\n opacity: 0.7;\n width: 130px;\n font-size: var(--fontsize-small);\n }\n [timeline] [info] strong {\n float: right;\n }\n [timeline] [status] {\n margin: 0 var(--spacing-small);\n display: block;\n border-radius: 50%;\n width: 12px;\n height: 12px;\n position: relative;\n top: 3px;\n border: 2px solid #fff;\n background-color: var(--worklist-status-color, tomato);\n }\n [timeline] [status]::before {\n content: '';\n height: 60px;\n width: 2px;\n display: block;\n position: relative;\n margin-left: 5px;\n background-color: var(--worklist-status-color, tomato);\n opacity: 0.2;\n }\n [timeline] [info] md-icon {\n position: relative;\n top: 3px;\n font-size: var(--fontsize-large);\n }\n [timeline] [info] p {\n background-color: #f4f4f4;\n margin: var(--spacing-small) 0 var(--spacing-medium) 0;\n padding: var(--spacing-small) var(--spacing-medium);\n border-radius: var(--border-radius);\n font-size: var(--fontsize-small);\n text-align: justify;\n }\n [timeline] [info] p::before {\n content: '';\n float: right;\n margin-top: -10px;\n margin-right: 20px;\n border: 7px solid transparent;\n border-bottom-color: #f4f4f4;\n border-top: 0;\n }\n [thread] div {\n border-bottom: var(--border-dim-color);\n padding: var(--spacing-small);\n text-align: right;\n overflow: hidden;\n }\n [thread] div label {\n float: left;\n width: 25%;\n text-align: left;\n }\n `\n ]\n\n @property({\n type: String,\n attribute: 'activity-instance-id'\n })\n activityInstanceId?: string\n\n @state() activityInstance?: ActivityInstance\n\n render() {\n if (!this.activityInstance) {\n return html`<div>no activity instance info.</div>`\n }\n\n const { id, name, description, state, issuer, assignedAt, startedAt, activityThreads, terminatedAt, updatedAt } =\n this.activityInstance\n\n return html`\n <div instance-container>\n <div header>\n <md-icon>description</md-icon>\n <strong>${name}</strong>\n ${description}\n </div>\n\n <div>\n <label>${i18next.t('label.status')}</label>\n <span status></span>\n <strong>${i18next.t('label.activity-state-' + state)}</strong>\n </div>\n\n <div issuer>\n <label>${i18next.t('field.issuer')}</label>\n <md-icon>account_circle</md-icon>\n <strong>${issuer?.name || ''}</strong>\n </div>\n <div>\n <label>${i18next.t('field.assigned-at')}</label>${assignedAt && formatter.format(new Date(assignedAt))}\n </div>\n <div><label>${i18next.t('field.started-at')}</label>${startedAt && formatter.format(new Date(startedAt))}</div>\n <div><label>${i18next.t('field.updated-at')}</label>${updatedAt && formatter.format(new Date(updatedAt))}</div>\n <div>\n <label>${i18next.t('field.terminated-at')}</label>${terminatedAt && formatter.format(new Date(terminatedAt))}\n </div>\n </div>\n <div thread-container>\n ${activityThreads?.map(activityThread => this.renderActivityThread(this.activityInstance!, activityThread))}\n </div>\n `\n }\n\n renderActivityThread(activityInstance: ActivityInstance, activityThread: ActivityThread) {\n const {\n state,\n assignee,\n output,\n round,\n activityApprovals = [],\n assignedAt,\n startedAt,\n terminatedAt\n } = activityThread\n const { approvalLine } = activityInstance!\n const { name, email } = assignee || {}\n const approvals = activityApprovals.sort((a, b) =>\n a.round < b.round ? 1 : a.round > b.round ? -1 : a.order! < b.order! ? 1 : -1\n )\n const current = approvals[0]?.round == round ? approvals[0].order : -1\n\n return html`\n <div assignee>\n <md-icon>account_circle</md-icon>\n <strong>${name}</strong>\n </div>\n\n <div thread>\n <span subtitle>${i18next.t('label.information')}</span>\n <div>\n <label>${i18next.t('label.status')}</label>\n <span status></span>\n <strong>${i18next.t('label.activity-state-' + state)}</strong>\n </div>\n <div>\n <label>${i18next.t('field.assigned-at')}</label> ${assignedAt && formatter.format(new Date(assignedAt))}\n </div>\n <div><label>${i18next.t('field.started-at')}</label> ${startedAt && formatter.format(new Date(startedAt))}</div>\n <div>\n <label>${i18next.t('field.terminated-at')}</label> ${terminatedAt && formatter.format(new Date(terminatedAt))}\n </div>\n <div><label>${i18next.t('field.round')}</label> ${round}</div>\n </div>\n\n <div>\n <span subtitle>${i18next.t('field.artifact')}</span>\n ${this.renderInOut(output || {})}\n </div>\n <div timeline>\n <span subtitle>${i18next.t('label.timeline')}</span>\n\n <div>\n ${approvalLine\n ? html`<approval-line-view .model=${approvalLine} .current=${current}></approval-line-view>`\n : html``}\n </div>\n\n <ol>\n ${approvals.map(approval => this.renderActivityApproval(approval))}\n </ol>\n </div>\n `\n }\n\n renderActivityApproval(activityApproval: ActivityApproval) {\n const { judgment, approver, comment, round, order, createdAt, terminatedAt } = activityApproval\n const { name, email } = approver || {}\n\n return html`\n <li>\n <span date>${formatter.format(new Date(terminatedAt || createdAt!))}</span>\n <span status></span>\n <span info>\n ${i18next.t('label.activity-state-' + (judgment || 'started'))}\n <strong><md-icon>account_circle</md-icon>${name}</strong>\n <p>${comment}</p>\n </span>\n </li>\n `\n }\n\n renderSearchKeys() {\n const { activity } = this.activityInstance!\n const { searchKeys = [] } = activity! || {}\n\n return html`\n <table>\n <tr>\n <th>${i18next.t('label.name')}</th>\n <th>${i18next.t('label.value')}</th>\n </tr>\n\n ${searchKeys?.map(\n (item, index) => html`\n <tr>\n <td>${item.tKey ? i18next.t(item.tKey) : item.name}</td>\n <td>${this.activityInstance![`key0${index + 1}`]}</td>\n </tr>\n `\n )}\n </table>\n `\n }\n\n renderInOut(data) {\n const { activity } = this.activityInstance!\n const { model } = activity || {}\n\n return html`\n <table>\n <tr>\n <th>${i18next.t('label.name')}</th>\n <th>${i18next.t('label.value')}</th>\n </tr>\n ${model?.map(\n item => html`\n <tr>\n <td>${item.name}</td>\n <td>${item.tag ? data[item.tag] : ''}</td>\n </tr>\n `\n )}\n </table>\n `\n }\n\n updated(changes) {\n if (changes.has('activityInstanceId')) {\n this.fetchActivityInstance()\n }\n }\n\n async fetchActivityInstance() {\n const id = this.activityInstanceId\n\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n activityInstance(id: $id) {\n id\n name\n description\n state\n key01\n key02\n key03\n key04\n key05\n input\n output\n issuer {\n name\n email\n }\n starter {\n name\n email\n }\n activity {\n id\n name\n description\n searchKeys {\n name\n description\n inputKey\n tKey\n }\n model {\n name\n description\n active\n tag\n inout\n type\n unit\n options\n quantifier\n spec\n }\n }\n approvalLine {\n type\n value\n approver {\n id\n name\n description\n controlNo\n }\n }\n activityThreads {\n state\n transaction\n output\n assignee {\n id\n name\n email\n }\n round\n activityApprovals {\n round\n order\n approver {\n name\n email\n }\n judgment\n comment\n createdAt\n terminatedAt\n }\n assignedAt\n startedAt\n terminatedAt\n }\n updater {\n id\n name\n }\n assignedAt\n startedAt\n terminatedAt\n updatedAt\n }\n }\n `,\n variables: {\n id\n }\n })\n\n this.activityInstance = response.data.activityInstance\n this.setAttribute('state', this.activityInstance?.state || '')\n }\n}\n"]}
@@ -37,6 +37,21 @@ export class ActivityStatsImporter extends LitElement {
37
37
  ]
38
38
  };
39
39
  }
40
+ static { this.styles = [
41
+ CommonHeaderStyles,
42
+ css `
43
+ :host {
44
+ display: flex;
45
+ flex-direction: column;
46
+
47
+ background-color: var(--md-sys-color-surface);
48
+ }
49
+
50
+ ox-grist {
51
+ flex: 1;
52
+ }
53
+ `
54
+ ]; }
40
55
  render() {
41
56
  return html `
42
57
  <ox-grist
@@ -54,7 +69,6 @@ export class ActivityStatsImporter extends LitElement {
54
69
  `;
55
70
  }
56
71
  async save() {
57
- var _a;
58
72
  const response = await client.mutate({
59
73
  mutation: gql `
60
74
  mutation importActivityStats($activityStats: [ActivityStatsPatch!]!) {
@@ -63,26 +77,11 @@ export class ActivityStatsImporter extends LitElement {
63
77
  `,
64
78
  variables: { activityStats: this.activityStats }
65
79
  });
66
- if ((_a = response.errors) === null || _a === void 0 ? void 0 : _a.length)
80
+ if (response.errors?.length)
67
81
  return;
68
82
  this.dispatchEvent(new CustomEvent('imported'));
69
83
  }
70
84
  }
71
- ActivityStatsImporter.styles = [
72
- CommonHeaderStyles,
73
- css `
74
- :host {
75
- display: flex;
76
- flex-direction: column;
77
-
78
- background-color: var(--md-sys-color-surface);
79
- }
80
-
81
- ox-grist {
82
- flex: 1;
83
- }
84
- `
85
- ];
86
85
  __decorate([
87
86
  property({ type: Array }),
88
87
  __metadata("design:type", Array)
@@ -1 +1 @@
1
- {"version":3,"file":"activity-stats-importer.js","sourceRoot":"","sources":["../../../client/pages/activity-stats/activity-stats-importer.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,qBAAqB,CAAA;AAE5B,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IAArD;;QAiB6B,kBAAa,GAAU,EAAE,CAAA;QACxB,YAAO,GAAG;YACpC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;YACzC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9B,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC/B,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,aAAa;oBACnB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;oBACtC,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;oBACjC,KAAK,EAAE,EAAE;iBACV;aACF;SACF,CAAA;IAiCH,CAAC;IA/BC,MAAM;QACJ,OAAO,IAAI,CAAA;;gBAEC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;kBAChC,IAAI,CAAC,OAAO;gBACd;YACN,OAAO,EAAE,IAAI,CAAC,aAAa;SAC5B;;;;;yBAKgB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;KAEhG,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAI;;QACR,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;OAIZ;YACD,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;SACjD,CAAC,CAAA;QAEF,IAAI,MAAA,QAAQ,CAAC,MAAM,0CAAE,MAAM;YAAE,OAAM;QAEnC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;IACjD,CAAC;;AAxEM,4BAAM,GAAG;IACd,kBAAkB;IAClB,GAAG,CAAA;;;;;;;;;;;KAWF;CACF,AAdY,CAcZ;AAE0B;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;4DAA0B;AACxB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;sDAuB1B","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/data-grist'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { property } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next } from '@operato/i18n'\nimport { isMobileDevice } from '@operato/utils'\nimport { CommonHeaderStyles } from '@operato/styles'\n\nexport class ActivityStatsImporter extends LitElement {\n static styles = [\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: var(--md-sys-color-surface);\n }\n\n ox-grist {\n flex: 1;\n }\n `\n ]\n\n @property({ type: Array }) activityStats: any[] = []\n @property({ type: Object }) columns = {\n list: { fields: ['name', 'description'] },\n pagination: { infinite: true },\n columns: [\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n width: 150\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n width: 200\n },\n {\n type: 'checkbox',\n name: 'active',\n header: i18next.t('field.active'),\n width: 60\n }\n ]\n }\n\n render() {\n return html`\n <ox-grist\n .mode=${isMobileDevice() ? 'LIST' : 'GRID'}\n .config=${this.columns}\n .data=${{\n records: this.activityStats\n }}\n ></ox-grist>\n\n <div class=\"footer\">\n <div filler></div>\n <button @click=${this.save.bind(this)} done><md-icon>save</md-icon>${i18next.t('button.save')}</button>\n </div>\n `\n }\n\n async save() {\n const response = await client.mutate({\n mutation: gql`\n mutation importActivityStats($activityStats: [ActivityStatsPatch!]!) {\n importActivityStats(activityStats: $activityStats)\n }\n `,\n variables: { activityStats: this.activityStats }\n })\n\n if (response.errors?.length) return\n\n this.dispatchEvent(new CustomEvent('imported'))\n }\n}\n"]}
1
+ {"version":3,"file":"activity-stats-importer.js","sourceRoot":"","sources":["../../../client/pages/activity-stats/activity-stats-importer.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,qBAAqB,CAAA;AAE5B,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IAArD;;QAiB6B,kBAAa,GAAU,EAAE,CAAA;QACxB,YAAO,GAAG;YACpC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;YACzC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9B,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC/B,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,aAAa;oBACnB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;oBACtC,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;oBACjC,KAAK,EAAE,EAAE;iBACV;aACF;SACF,CAAA;IAiCH,CAAC;aAzEQ,WAAM,GAAG;QACd,kBAAkB;QAClB,GAAG,CAAA;;;;;;;;;;;KAWF;KACF,AAdY,CAcZ;IA4BD,MAAM;QACJ,OAAO,IAAI,CAAA;;gBAEC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;kBAChC,IAAI,CAAC,OAAO;gBACd;YACN,OAAO,EAAE,IAAI,CAAC,aAAa;SAC5B;;;;;yBAKgB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;KAEhG,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;OAIZ;YACD,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;SACjD,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM;YAAE,OAAM;QAEnC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;IACjD,CAAC;;AAxD0B;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;4DAA0B;AACxB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;sDAuB1B","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/data-grist'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { property } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next } from '@operato/i18n'\nimport { isMobileDevice } from '@operato/utils'\nimport { CommonHeaderStyles } from '@operato/styles'\n\nexport class ActivityStatsImporter extends LitElement {\n static styles = [\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: var(--md-sys-color-surface);\n }\n\n ox-grist {\n flex: 1;\n }\n `\n ]\n\n @property({ type: Array }) activityStats: any[] = []\n @property({ type: Object }) columns = {\n list: { fields: ['name', 'description'] },\n pagination: { infinite: true },\n columns: [\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n width: 150\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n width: 200\n },\n {\n type: 'checkbox',\n name: 'active',\n header: i18next.t('field.active'),\n width: 60\n }\n ]\n }\n\n render() {\n return html`\n <ox-grist\n .mode=${isMobileDevice() ? 'LIST' : 'GRID'}\n .config=${this.columns}\n .data=${{\n records: this.activityStats\n }}\n ></ox-grist>\n\n <div class=\"footer\">\n <div filler></div>\n <button @click=${this.save.bind(this)} done><md-icon>save</md-icon>${i18next.t('button.save')}</button>\n </div>\n `\n }\n\n async save() {\n const response = await client.mutate({\n mutation: gql`\n mutation importActivityStats($activityStats: [ActivityStatsPatch!]!) {\n importActivityStats(activityStats: $activityStats)\n }\n `,\n variables: { activityStats: this.activityStats }\n })\n\n if (response.errors?.length) return\n\n this.dispatchEvent(new CustomEvent('imported'))\n }\n}\n"]}