@things-factory/worklist 6.0.39 → 6.0.40

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 (97) hide show
  1. package/client/activity-summary-generator.ts +5 -5
  2. package/client/pages/activity/activity-page.ts +1 -1
  3. package/client/pages/activity/starter-list-page.ts +0 -1
  4. package/client/pages/activity-instance/activity-instance-page.ts +2 -2
  5. package/client/pages/installable-activity/installable-activity-list-page.ts +15 -0
  6. package/client/pages/todo/{approval-waiting-list-page.ts → approval-pending-list-page.ts} +5 -9
  7. package/client/pages/todo/done-list-page.ts +5 -6
  8. package/client/pages/todo/draft-list-page.ts +1 -1
  9. package/client/pages/todo/pickable-list-page.ts +24 -26
  10. package/client/pages/todo/todo-list-page.ts +16 -11
  11. package/client/route.ts +2 -6
  12. package/client/types/activity-instance.ts +1 -1
  13. package/dist-client/activity-summary-generator.js +5 -5
  14. package/dist-client/activity-summary-generator.js.map +1 -1
  15. package/dist-client/pages/activity/activity-page.d.ts +1 -1
  16. package/dist-client/pages/activity/activity-page.js +1 -1
  17. package/dist-client/pages/activity/activity-page.js.map +1 -1
  18. package/dist-client/pages/activity/starter-list-page.js +0 -1
  19. package/dist-client/pages/activity/starter-list-page.js.map +1 -1
  20. package/dist-client/pages/activity-instance/activity-instance-page.d.ts +1 -1
  21. package/dist-client/pages/activity-instance/activity-instance-page.js +2 -2
  22. package/dist-client/pages/activity-instance/activity-instance-page.js.map +1 -1
  23. package/dist-client/pages/installable-activity/installable-activity-list-page.js +15 -0
  24. package/dist-client/pages/installable-activity/installable-activity-list-page.js.map +1 -1
  25. package/dist-client/pages/todo/approval-pending-list-page.d.ts +40 -0
  26. package/dist-client/pages/todo/approval-pending-list-page.js +360 -0
  27. package/dist-client/pages/todo/approval-pending-list-page.js.map +1 -0
  28. package/dist-client/pages/todo/assigned-list-page.js +0 -1
  29. package/dist-client/pages/todo/assigned-list-page.js.map +1 -1
  30. package/dist-client/pages/todo/done-list-page.js +4 -5
  31. package/dist-client/pages/todo/done-list-page.js.map +1 -1
  32. package/dist-client/pages/todo/draft-list-page.js +1 -1
  33. package/dist-client/pages/todo/draft-list-page.js.map +1 -1
  34. package/dist-client/pages/todo/pickable-list-page.js +26 -31
  35. package/dist-client/pages/todo/pickable-list-page.js.map +1 -1
  36. package/dist-client/pages/todo/todo-list-page.js +16 -11
  37. package/dist-client/pages/todo/todo-list-page.js.map +1 -1
  38. package/dist-client/route.d.ts +1 -1
  39. package/dist-client/route.js +2 -5
  40. package/dist-client/route.js.map +1 -1
  41. package/dist-client/tsconfig.tsbuildinfo +1 -1
  42. package/dist-client/types/activity-instance.d.ts +1 -1
  43. package/dist-client/types/activity-instance.js +1 -1
  44. package/dist-client/types/activity-instance.js.map +1 -1
  45. package/dist-server/controllers/activity-instance/end.js +3 -0
  46. package/dist-server/controllers/activity-instance/end.js.map +1 -1
  47. package/dist-server/controllers/activity-instance/post.js +2 -1
  48. package/dist-server/controllers/activity-instance/post.js.map +1 -1
  49. package/dist-server/controllers/activity-instance/terminate.js +3 -0
  50. package/dist-server/controllers/activity-instance/terminate.js.map +1 -1
  51. package/dist-server/controllers/activity-thread/abort.js +5 -2
  52. package/dist-server/controllers/activity-thread/abort.js.map +1 -1
  53. package/dist-server/controllers/activity-thread/adjust.js +8 -0
  54. package/dist-server/controllers/activity-thread/adjust.js.map +1 -1
  55. package/dist-server/controllers/activity-thread/end.js +5 -2
  56. package/dist-server/controllers/activity-thread/end.js.map +1 -1
  57. package/dist-server/controllers/activity-thread/save.js +6 -3
  58. package/dist-server/controllers/activity-thread/save.js.map +1 -1
  59. package/dist-server/controllers/activity-thread/submit.js +6 -3
  60. package/dist-server/controllers/activity-thread/submit.js.map +1 -1
  61. package/dist-server/controllers/common.js +1 -1
  62. package/dist-server/controllers/common.js.map +1 -1
  63. package/dist-server/service/activity-approval/activity-approval-query.js +2 -2
  64. package/dist-server/service/activity-approval/activity-approval-query.js.map +1 -1
  65. package/dist-server/service/activity-instance/activity-instance-query.js +1 -1
  66. package/dist-server/service/activity-instance/activity-instance-query.js.map +1 -1
  67. package/dist-server/service/activity-instance/activity-instance.js +1 -1
  68. package/dist-server/service/activity-instance/activity-instance.js.map +1 -1
  69. package/dist-server/service/activity-summary/activity-summary-query.js +3 -3
  70. package/dist-server/service/activity-summary/activity-summary-query.js.map +1 -1
  71. package/dist-server/service/activity-summary/activity-summary.js +1 -1
  72. package/dist-server/service/activity-summary/activity-summary.js.map +1 -1
  73. package/dist-server/service/installable-activity/installable-activity.js +7 -0
  74. package/dist-server/service/installable-activity/installable-activity.js.map +1 -1
  75. package/dist-server/tsconfig.tsbuildinfo +1 -1
  76. package/package.json +3 -3
  77. package/server/controllers/activity-instance/end.ts +4 -0
  78. package/server/controllers/activity-instance/post.ts +2 -0
  79. package/server/controllers/activity-instance/terminate.ts +4 -0
  80. package/server/controllers/activity-thread/abort.ts +6 -2
  81. package/server/controllers/activity-thread/adjust.ts +12 -0
  82. package/server/controllers/activity-thread/end.ts +6 -2
  83. package/server/controllers/activity-thread/save.ts +7 -3
  84. package/server/controllers/activity-thread/submit.ts +7 -3
  85. package/server/controllers/common.ts +1 -1
  86. package/server/service/activity-approval/activity-approval-query.ts +1 -1
  87. package/server/service/activity-instance/activity-instance-query.ts +1 -1
  88. package/server/service/activity-instance/activity-instance.ts +1 -1
  89. package/server/service/activity-summary/activity-summary-query.ts +2 -2
  90. package/server/service/activity-summary/activity-summary.ts +1 -1
  91. package/server/service/installable-activity/installable-activity.ts +3 -0
  92. package/things-factory.config.js +1 -2
  93. package/translations/en.json +5 -3
  94. package/translations/ko.json +5 -3
  95. package/translations/ms.json +5 -3
  96. package/translations/zh.json +5 -3
  97. package/client/pages/todo/assigned-list-page.ts +0 -258
@@ -69,7 +69,7 @@ async function subscribeActivityApproval() {
69
69
  var summary = {}
70
70
  var generatorLocks = {
71
71
  numberOfToDos: new AsyncLock(true),
72
- numberOfApprovalWaitings: new AsyncLock(true),
72
+ numberOfApprovalPendings: new AsyncLock(true),
73
73
  numberOfPicks: new AsyncLock(true),
74
74
  numberOfDrafts: new AsyncLock(true)
75
75
  }
@@ -80,7 +80,7 @@ const fetchActivitySummary = debounce(async () => {
80
80
  query {
81
81
  activitySummary {
82
82
  numberOfToDos
83
- numberOfApprovalWaitings
83
+ numberOfApprovalPendings
84
84
  numberOfPicks
85
85
  numberOfDrafts
86
86
  }
@@ -89,15 +89,15 @@ const fetchActivitySummary = debounce(async () => {
89
89
  })
90
90
 
91
91
  if (response.data) {
92
- const { numberOfToDos, numberOfApprovalWaitings, numberOfPicks, numberOfDrafts } = response.data.activitySummary
92
+ const { numberOfToDos, numberOfApprovalPendings, numberOfPicks, numberOfDrafts } = response.data.activitySummary
93
93
 
94
94
  summary['numberOfToDos'] = numberOfToDos
95
- summary['numberOfApprovalWaitings'] = numberOfApprovalWaitings
95
+ summary['numberOfApprovalPendings'] = numberOfApprovalPendings
96
96
  summary['numberOfPicks'] = numberOfPicks
97
97
  summary['numberOfDrafts'] = numberOfDrafts
98
98
 
99
99
  generatorLocks['numberOfToDos']?.unlock(numberOfToDos)
100
- generatorLocks['numberOfApprovalWaitings']?.unlock(numberOfApprovalWaitings)
100
+ generatorLocks['numberOfApprovalPendings']?.unlock(numberOfApprovalPendings)
101
101
  generatorLocks['numberOfPicks']?.unlock(numberOfPicks)
102
102
  generatorLocks['numberOfDrafts']?.unlock(numberOfDrafts)
103
103
  }
@@ -18,7 +18,7 @@ const formatter = new Intl.DateTimeFormat(navigator.language, { dateStyle: 'full
18
18
  export const ActivityInstanceStatus = {
19
19
  Draft: 'draft',
20
20
  Posted: 'posted',
21
- WaitingAssignment: 'waiting-assignment',
21
+ PendingAssignment: 'pending-assignment',
22
22
  Assigned: 'assigned',
23
23
  Started: 'started',
24
24
  Pending: 'pending',
@@ -89,7 +89,6 @@ export class StarterListPage extends connect(store)(localize(i18next)(PageView))
89
89
  @change=${(e: CustomEvent) => {
90
90
  this.filters = (e.currentTarget as any)?.value
91
91
  }}
92
- multiple
93
92
  ></ox-input-select-buttons>
94
93
  </div>
95
94
 
@@ -19,7 +19,7 @@ const formatter = new Intl.DateTimeFormat(navigator.language, { dateStyle: 'full
19
19
  export const ActivityInstanceStatus = {
20
20
  Draft: 'draft',
21
21
  Posted: 'posted',
22
- WaitingAssignment: 'waiting-assignment',
22
+ PendingAssignment: 'pending-assignment',
23
23
  Assigned: 'assigned',
24
24
  Started: 'started',
25
25
  Pending: 'pending',
@@ -68,7 +68,7 @@ export class ActivityInstancePage extends connect(store)(localize(i18next)(PageV
68
68
  @property({ type: Object }) board: any
69
69
 
70
70
  get context() {
71
- const assignable = [ActivityInstanceStatus.Posted, ActivityInstanceStatus.WaitingAssignment].includes(
71
+ const assignable = [ActivityInstanceStatus.Posted, ActivityInstanceStatus.PendingAssignment].includes(
72
72
  this.activityInstance?.state
73
73
  )
74
74
  const abortable = [ActivityInstanceStatus.Draft, ActivityInstanceStatus.Posted].includes(
@@ -198,6 +198,20 @@ export class ActivityTemplateListPage extends connect(store)(localize(i18next)(P
198
198
  sortable: true,
199
199
  width: 60
200
200
  },
201
+ {
202
+ type: 'number',
203
+ name: 'priority',
204
+ header: i18next.t('field.priority'),
205
+ record: {
206
+ editable: false,
207
+ renderer: function (value, column, record, rowIndex, field) {
208
+ const color = ['', 'gray', 'yellow', 'orange', 'red'][value || 0]
209
+ const count = new Array(value > 4 ? 4 : value || 0).fill('')
210
+ return html`${count.map(() => html`<mwc-icon style="color:${color};">star</mwc-icon>`)}`
211
+ }
212
+ },
213
+ width: 60
214
+ },
201
215
  {
202
216
  type: 'image',
203
217
  name: 'thumbnail',
@@ -324,6 +338,7 @@ export class ActivityTemplateListPage extends connect(store)(localize(i18next)(P
324
338
  provider
325
339
  release
326
340
  activityType
341
+ priority
327
342
  startable
328
343
  model {
329
344
  name
@@ -14,15 +14,12 @@ import { navigate, PageView, store } from '@operato/shell'
14
14
  import { CommonGristStyles, ScrollbarStyles } from '@operato/styles'
15
15
  import { adjustFilters, isMobileDevice, sleep } from '@operato/utils'
16
16
 
17
- import { ActivityThreadStatus } from '../../types/activity-thread'
18
- import { Priorities } from '../../types/types.js'
19
-
20
17
  const MIN = 60
21
18
  const HOUR = 60 * MIN
22
19
  const DAY = 24 * HOUR
23
20
 
24
- @customElement('approval-waiting-list-page')
25
- export class ApprovalWaitingListPage extends connect(store)(localize(i18next)(PageView)) {
21
+ @customElement('approval-pending-list-page')
22
+ export class ApprovalPendingListPage extends connect(store)(localize(i18next)(PageView)) {
26
23
  static styles = [
27
24
  ScrollbarStyles,
28
25
  CommonGristStyles,
@@ -55,7 +52,7 @@ export class ApprovalWaitingListPage extends connect(store)(localize(i18next)(Pa
55
52
  handler: (search: string) => {
56
53
  this.grist.searchText = search
57
54
  },
58
- placeholder: i18next.t('title.approval waiting list'),
55
+ placeholder: i18next.t('title.approval pending list'),
59
56
  value: this.grist.searchText
60
57
  },
61
58
  filter: {
@@ -63,7 +60,7 @@ export class ApprovalWaitingListPage extends connect(store)(localize(i18next)(Pa
63
60
  this.grist.toggleHeadroom()
64
61
  }
65
62
  },
66
- help: 'worklist/approval-waiting-list',
63
+ help: 'worklist/approval-pending-list',
67
64
  actions: []
68
65
  }
69
66
  }
@@ -95,7 +92,6 @@ export class ApprovalWaitingListPage extends connect(store)(localize(i18next)(Pa
95
92
  this.filters = (e.currentTarget as any)?.value
96
93
  this.grist.fetch()
97
94
  }}
98
- multiple
99
95
  ></ox-input-select-buttons>
100
96
  </div>
101
97
 
@@ -284,7 +280,7 @@ export class ApprovalWaitingListPage extends connect(store)(localize(i18next)(Pa
284
280
  const response = await client.query({
285
281
  query: gql`
286
282
  query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
287
- responses: approvalWaitingList(filters: $filters, pagination: $pagination, sortings: $sortings) {
283
+ responses: approvalPendingList(filters: $filters, pagination: $pagination, sortings: $sortings) {
288
284
  items {
289
285
  id
290
286
  round
@@ -89,7 +89,6 @@ export class DoneListPage extends connect(store)(localize(i18next)(PageView)) {
89
89
  this.filters = (e.currentTarget as any)?.value
90
90
  this.grist.fetch()
91
91
  }}
92
- multiple
93
92
  ></ox-input-select-buttons>
94
93
  </div>
95
94
 
@@ -184,7 +183,7 @@ export class DoneListPage extends connect(store)(localize(i18next)(PageView)) {
184
183
  options: [
185
184
  { display: i18next.t('label.activity-state-draft'), value: 'draft' },
186
185
  { display: i18next.t('label.activity-state-posted'), value: 'posted' },
187
- { display: i18next.t('label.activity-state-waiting-assignment'), value: 'waiting-assignment' },
186
+ { display: i18next.t('label.activity-state-pending-assignment'), value: 'pending-assignment' },
188
187
  { display: i18next.t('label.activity-state-assigned'), value: 'assigned' },
189
188
  { display: i18next.t('label.activity-state-started'), value: 'started' },
190
189
  { display: i18next.t('label.activity-state-pending'), value: 'pending' },
@@ -264,8 +263,8 @@ export class DoneListPage extends connect(store)(localize(i18next)(PageView)) {
264
263
  },
265
264
  sorters: [
266
265
  {
267
- name: 'dueAt',
268
- desc: false
266
+ name: 'terminatedAt',
267
+ desc: true
269
268
  }
270
269
  ]
271
270
  }
@@ -341,14 +340,14 @@ export class DoneListPage extends connect(store)(localize(i18next)(PageView)) {
341
340
  total: response.data.responses.total || 0,
342
341
  records: (response.data.responses.items || []).map(item => {
343
342
  return {
343
+ ...item.activityInstance,
344
344
  id: item.id,
345
345
  state: item.state,
346
346
  output: item.output,
347
347
  dueAt: item.dueAt,
348
348
  assignedAt: item.assignedAt,
349
349
  startedAt: item.startedAt,
350
- terminatedAt: item.terminatedAt,
351
- ...item.activityInstance
350
+ terminatedAt: item.terminatedAt
352
351
  }
353
352
  })
354
353
  }
@@ -200,7 +200,7 @@ export class DraftListPage extends connect(store)(localize(i18next)(PageView)) {
200
200
  options: [
201
201
  { display: i18next.t('label.activity-state-draft'), value: 'draft' },
202
202
  { display: i18next.t('label.activity-state-posted'), value: 'posted' },
203
- { display: i18next.t('label.activity-state-waiting-assignment'), value: 'waiting-assignment' },
203
+ { display: i18next.t('label.activity-state-pending-assignment'), value: 'pending-assignment' },
204
204
  { display: i18next.t('label.activity-state-assigned'), value: 'assigned' },
205
205
  { display: i18next.t('label.activity-state-started'), value: 'started' },
206
206
  { display: i18next.t('label.activity-state-pending'), value: 'pending' },
@@ -13,24 +13,8 @@ import { i18next, localize } from '@operato/i18n'
13
13
  import { openPopup } from '@operato/popup'
14
14
  import { PageView, store } from '@operato/shell'
15
15
  import { CommonGristStyles, ScrollbarStyles } from '@operato/styles'
16
- import { isMobileDevice } from '@operato/utils'
16
+ import { adjustFilters, isMobileDevice } from '@operato/utils'
17
17
 
18
- const FILTERS = [
19
- {
20
- display: 'Important',
21
- value: 'Important'
22
- },
23
- {
24
- display: 'Imminent',
25
- value: 'Imminent'
26
- },
27
- {
28
- display: 'Disapproved',
29
- value: 'Disapproved'
30
- }
31
- ]
32
-
33
- @customElement('pickable-list-page')
34
18
  export class PickableListPage extends connect(store)(localize(i18next)(PageView)) {
35
19
  static styles = [
36
20
  ScrollbarStyles,
@@ -85,11 +69,19 @@ export class PickableListPage extends connect(store)(localize(i18next)(PageView)
85
69
  <div id="filters">
86
70
  <ox-input-select-buttons
87
71
  .value=${this.filters}
88
- .options=${FILTERS}
72
+ .options=${[
73
+ {
74
+ display: i18next.t('label.filter-important'),
75
+ value: 'important'
76
+ },
77
+ {
78
+ display: i18next.t('label.filter-due'),
79
+ value: 'due'
80
+ }
81
+ ]}
89
82
  @change=${(e: CustomEvent) => {
90
83
  this.filters = (e.currentTarget as any)?.value
91
84
  }}
92
- multiple
93
85
  ></ox-input-select-buttons>
94
86
  </div>
95
87
 
@@ -115,8 +107,9 @@ export class PickableListPage extends connect(store)(localize(i18next)(PageView)
115
107
  {
116
108
  type: 'gutter',
117
109
  gutterName: 'button',
118
- name: 'start',
119
- icon: 'add_shopping_cart',
110
+ name: 'pick',
111
+ icon: 'shop',
112
+ title: i18next.t('title.pick activity'),
120
113
  handlers: {
121
114
  click: (columns, data, column, record, rowIndex) => {
122
115
  if (!record.id) {
@@ -192,10 +185,6 @@ export class PickableListPage extends connect(store)(localize(i18next)(PageView)
192
185
  editable: false
193
186
  },
194
187
  sortable: true,
195
- // filter: {
196
- // type: 'date',
197
- // operator: 'between'
198
- // },
199
188
  width: 180
200
189
  },
201
190
  {
@@ -216,7 +205,6 @@ export class PickableListPage extends connect(store)(localize(i18next)(PageView)
216
205
  editable: false
217
206
  },
218
207
  sortable: true,
219
- // filter: 'between',
220
208
  width: 180
221
209
  },
222
210
  {
@@ -245,6 +233,16 @@ export class PickableListPage extends connect(store)(localize(i18next)(PageView)
245
233
  }
246
234
 
247
235
  async fetchHandler({ page, limit, sortings = [], filters = [] }: FetchOption) {
236
+ if (this.filters?.includes('important')) {
237
+ filters = adjustFilters(filters, [{ name: 'priority', operator: 'gte', value: 2 }])
238
+ }
239
+
240
+ if (this.filters?.includes('due')) {
241
+ /* 24시간 이내에 만기가 도래하는 작업 */
242
+ let tomorrow = new Date(Date.now() + 24 * 3600 * 1000).toISOString().replace('T', ' ')
243
+ filters = adjustFilters(filters, [{ name: 'dueAt', operator: 'lte', value: tomorrow }])
244
+ }
245
+
248
246
  const response = await client.query({
249
247
  query: gql`
250
248
  query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
@@ -85,20 +85,19 @@ export class TodoListPage extends connect(store)(localize(i18next)(PageView)) {
85
85
  display: i18next.t('label.filter-due'),
86
86
  value: 'due'
87
87
  },
88
- {
89
- display: i18next.t('label.filter-rejected'),
90
- value: 'rejected'
91
- },
92
88
  {
93
89
  display: i18next.t('label.filter-proceeding'),
94
90
  value: 'proceeding'
91
+ },
92
+ {
93
+ display: i18next.t('label.filter-pending-approval'),
94
+ value: 'pending-approval'
95
95
  }
96
96
  ]}
97
97
  @change=${(e: CustomEvent) => {
98
98
  this.filters = (e.currentTarget as any)?.value
99
99
  this.grist.fetch()
100
100
  }}
101
- multiple
102
101
  ></ox-input-select-buttons>
103
102
  </div>
104
103
 
@@ -126,6 +125,7 @@ export class TodoListPage extends connect(store)(localize(i18next)(PageView)) {
126
125
  gutterName: 'button',
127
126
  name: 'start',
128
127
  icon: 'play_arrow',
128
+ title: i18next.t('title.open this activity page'),
129
129
  handlers: {
130
130
  click: (columns, data, column, record, rowIndex) => {
131
131
  const { id } = record
@@ -288,13 +288,18 @@ export class TodoListPage extends connect(store)(localize(i18next)(PageView)) {
288
288
  filters = adjustFilters(filters, [{ name: 'dueAt', operator: 'lte', value: tomorrow }])
289
289
  }
290
290
 
291
- const status = [
292
- this.filters?.includes('rejected') && ActivityThreadStatus.Rejected,
293
- this.filters?.includes('proceeding') && ActivityThreadStatus.Started
294
- ].filter(Boolean)
291
+ if (this.filters?.includes('proceeding')) {
292
+ filters = adjustFilters(filters, [{ name: 'state', operator: 'eq', value: ActivityThreadStatus.Started }])
293
+ }
295
294
 
296
- if (status.length > 0) {
297
- filters = adjustFilters(filters, [{ name: 'state', operator: 'in', value: status }])
295
+ if (this.filters?.includes('pending-approval')) {
296
+ filters = adjustFilters(filters, [
297
+ {
298
+ name: 'state',
299
+ operator: 'in',
300
+ value: [ActivityThreadStatus.Rejected, ActivityThreadStatus.Submitted, ActivityThreadStatus.Escalated]
301
+ }
302
+ ])
298
303
  }
299
304
 
300
305
  const response = await client.query({
package/client/route.ts CHANGED
@@ -8,10 +8,6 @@ export default function route(page: string) {
8
8
  import('./pages/dashboard/dashboard-home.js')
9
9
  return page
10
10
 
11
- case 'assigned-list':
12
- import('./pages/todo/assigned-list-page.js')
13
- return page
14
-
15
11
  case 'todo-list':
16
12
  import('./pages/todo/todo-list-page.js')
17
13
  return page
@@ -20,8 +16,8 @@ export default function route(page: string) {
20
16
  import('./pages/todo/done-list-page.js')
21
17
  return page
22
18
 
23
- case 'approval-waiting-list':
24
- import('./pages/todo/approval-waiting-list-page.js')
19
+ case 'approval-pending-list':
20
+ import('./pages/todo/approval-pending-list-page.js')
25
21
  return page
26
22
 
27
23
  case 'draft-list':
@@ -7,7 +7,7 @@ import { Activity, ActivityType, ActivityUIType } from './activity'
7
7
  export enum ActivityInstanceStatus {
8
8
  Draft = 'draft',
9
9
  Posted = 'posted',
10
- WaitingAssignment = 'waiting-assignment',
10
+ PendingAssignment = 'pending-assignment',
11
11
  Assigned = 'assigned',
12
12
  Started = 'started',
13
13
  Pending = 'pending',
@@ -57,7 +57,7 @@ async function subscribeActivityApproval() {
57
57
  var summary = {};
58
58
  var generatorLocks = {
59
59
  numberOfToDos: new AsyncLock(true),
60
- numberOfApprovalWaitings: new AsyncLock(true),
60
+ numberOfApprovalPendings: new AsyncLock(true),
61
61
  numberOfPicks: new AsyncLock(true),
62
62
  numberOfDrafts: new AsyncLock(true)
63
63
  };
@@ -68,7 +68,7 @@ const fetchActivitySummary = debounce(async () => {
68
68
  query {
69
69
  activitySummary {
70
70
  numberOfToDos
71
- numberOfApprovalWaitings
71
+ numberOfApprovalPendings
72
72
  numberOfPicks
73
73
  numberOfDrafts
74
74
  }
@@ -76,13 +76,13 @@ const fetchActivitySummary = debounce(async () => {
76
76
  `
77
77
  });
78
78
  if (response.data) {
79
- const { numberOfToDos, numberOfApprovalWaitings, numberOfPicks, numberOfDrafts } = response.data.activitySummary;
79
+ const { numberOfToDos, numberOfApprovalPendings, numberOfPicks, numberOfDrafts } = response.data.activitySummary;
80
80
  summary['numberOfToDos'] = numberOfToDos;
81
- summary['numberOfApprovalWaitings'] = numberOfApprovalWaitings;
81
+ summary['numberOfApprovalPendings'] = numberOfApprovalPendings;
82
82
  summary['numberOfPicks'] = numberOfPicks;
83
83
  summary['numberOfDrafts'] = numberOfDrafts;
84
84
  (_a = generatorLocks['numberOfToDos']) === null || _a === void 0 ? void 0 : _a.unlock(numberOfToDos);
85
- (_b = generatorLocks['numberOfApprovalWaitings']) === null || _b === void 0 ? void 0 : _b.unlock(numberOfApprovalWaitings);
85
+ (_b = generatorLocks['numberOfApprovalPendings']) === null || _b === void 0 ? void 0 : _b.unlock(numberOfApprovalPendings);
86
86
  (_c = generatorLocks['numberOfPicks']) === null || _c === void 0 ? void 0 : _c.unlock(numberOfPicks);
87
87
  (_d = generatorLocks['numberOfDrafts']) === null || _d === void 0 ? void 0 : _d.unlock(numberOfDrafts);
88
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"activity-summary-generator.js","sourceRoot":"","sources":["../client/activity-summary-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import debounce from 'lodash-es/debounce'\nimport gql from 'graphql-tag'\nimport { client, subscribe } from '@operato/graphql'\nimport { AsyncLock } from '@operato/utils'\n\nasync function subscribeActivityInstance() {\n return await subscribe(\n {\n query: gql`\n subscription {\n activityInstance {\n name\n }\n }\n `\n },\n {\n next: async ({ data }) => {\n if (data) {\n fetchActivitySummary()\n }\n }\n }\n )\n}\n\nasync function subscribeActivityThread() {\n return await subscribe(\n {\n query: gql`\n subscription {\n activityThread {\n transaction\n }\n }\n `\n },\n {\n next: async ({ data }) => {\n if (data) {\n fetchActivitySummary()\n }\n }\n }\n )\n}\n\nasync function subscribeActivityApproval() {\n return await subscribe(\n {\n query: gql`\n subscription {\n activityApproval {\n judgment\n }\n }\n `\n },\n {\n next: async ({ data }) => {\n if (data) {\n fetchActivitySummary()\n }\n }\n }\n )\n}\n\nvar summary = {}\nvar generatorLocks = {\n numberOfToDos: new AsyncLock(true),\n numberOfApprovalWaitings: new AsyncLock(true),\n numberOfPicks: new AsyncLock(true),\n numberOfDrafts: new AsyncLock(true)\n}\n\nconst fetchActivitySummary = debounce(async () => {\n const response = await client.query({\n query: gql`\n query {\n activitySummary {\n numberOfToDos\n numberOfApprovalWaitings\n numberOfPicks\n numberOfDrafts\n }\n }\n `\n })\n\n if (response.data) {\n const { numberOfToDos, numberOfApprovalWaitings, numberOfPicks, numberOfDrafts } = response.data.activitySummary\n\n summary['numberOfToDos'] = numberOfToDos\n summary['numberOfApprovalWaitings'] = numberOfApprovalWaitings\n summary['numberOfPicks'] = numberOfPicks\n summary['numberOfDrafts'] = numberOfDrafts\n\n generatorLocks['numberOfToDos']?.unlock(numberOfToDos)\n generatorLocks['numberOfApprovalWaitings']?.unlock(numberOfApprovalWaitings)\n generatorLocks['numberOfPicks']?.unlock(numberOfPicks)\n generatorLocks['numberOfDrafts']?.unlock(numberOfDrafts)\n }\n}, 1000)\n\nexport async function* generateActivitySummary(name: string) {\n /* 1. 앞에 사용되었던 generator가 종료될 기회를 준다. */\n generatorLocks[name]?.unlock()\n\n /* 2. 마지막 값을 일단 yield 한다. */\n yield summary[name]\n\n while (true) {\n generatorLocks[name].lock()\n\n let badge = await generatorLocks[name].promise\n if (badge === undefined) {\n /* 새로운 generator가 생성된 경우이면, 기존 generator는 종료한다. */\n return\n }\n\n yield badge\n }\n}\n\nexport async function startSubscribeActivitySummary() {\n await subscribeActivityInstance()\n await subscribeActivityThread()\n await subscribeActivityApproval()\n\n fetchActivitySummary()\n}\n"]}
1
+ {"version":3,"file":"activity-summary-generator.js","sourceRoot":"","sources":["../client/activity-summary-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import debounce from 'lodash-es/debounce'\nimport gql from 'graphql-tag'\nimport { client, subscribe } from '@operato/graphql'\nimport { AsyncLock } from '@operato/utils'\n\nasync function subscribeActivityInstance() {\n return await subscribe(\n {\n query: gql`\n subscription {\n activityInstance {\n name\n }\n }\n `\n },\n {\n next: async ({ data }) => {\n if (data) {\n fetchActivitySummary()\n }\n }\n }\n )\n}\n\nasync function subscribeActivityThread() {\n return await subscribe(\n {\n query: gql`\n subscription {\n activityThread {\n transaction\n }\n }\n `\n },\n {\n next: async ({ data }) => {\n if (data) {\n fetchActivitySummary()\n }\n }\n }\n )\n}\n\nasync function subscribeActivityApproval() {\n return await subscribe(\n {\n query: gql`\n subscription {\n activityApproval {\n judgment\n }\n }\n `\n },\n {\n next: async ({ data }) => {\n if (data) {\n fetchActivitySummary()\n }\n }\n }\n )\n}\n\nvar summary = {}\nvar generatorLocks = {\n numberOfToDos: new AsyncLock(true),\n numberOfApprovalPendings: new AsyncLock(true),\n numberOfPicks: new AsyncLock(true),\n numberOfDrafts: new AsyncLock(true)\n}\n\nconst fetchActivitySummary = debounce(async () => {\n const response = await client.query({\n query: gql`\n query {\n activitySummary {\n numberOfToDos\n numberOfApprovalPendings\n numberOfPicks\n numberOfDrafts\n }\n }\n `\n })\n\n if (response.data) {\n const { numberOfToDos, numberOfApprovalPendings, numberOfPicks, numberOfDrafts } = response.data.activitySummary\n\n summary['numberOfToDos'] = numberOfToDos\n summary['numberOfApprovalPendings'] = numberOfApprovalPendings\n summary['numberOfPicks'] = numberOfPicks\n summary['numberOfDrafts'] = numberOfDrafts\n\n generatorLocks['numberOfToDos']?.unlock(numberOfToDos)\n generatorLocks['numberOfApprovalPendings']?.unlock(numberOfApprovalPendings)\n generatorLocks['numberOfPicks']?.unlock(numberOfPicks)\n generatorLocks['numberOfDrafts']?.unlock(numberOfDrafts)\n }\n}, 1000)\n\nexport async function* generateActivitySummary(name: string) {\n /* 1. 앞에 사용되었던 generator가 종료될 기회를 준다. */\n generatorLocks[name]?.unlock()\n\n /* 2. 마지막 값을 일단 yield 한다. */\n yield summary[name]\n\n while (true) {\n generatorLocks[name].lock()\n\n let badge = await generatorLocks[name].promise\n if (badge === undefined) {\n /* 새로운 generator가 생성된 경우이면, 기존 generator는 종료한다. */\n return\n }\n\n yield badge\n }\n}\n\nexport async function startSubscribeActivitySummary() {\n await subscribeActivityInstance()\n await subscribeActivityThread()\n await subscribeActivityApproval()\n\n fetchActivitySummary()\n}\n"]}
@@ -4,7 +4,7 @@ import { PageView } from '@operato/shell';
4
4
  export declare const ActivityInstanceStatus: {
5
5
  Draft: string;
6
6
  Posted: string;
7
- WaitingAssignment: string;
7
+ PendingAssignment: string;
8
8
  Assigned: string;
9
9
  Started: string;
10
10
  Pending: string;
@@ -15,7 +15,7 @@ const formatter = new Intl.DateTimeFormat(navigator.language, { dateStyle: 'full
15
15
  export const ActivityInstanceStatus = {
16
16
  Draft: 'draft',
17
17
  Posted: 'posted',
18
- WaitingAssignment: 'waiting-assignment',
18
+ PendingAssignment: 'pending-assignment',
19
19
  Assigned: 'assigned',
20
20
  Started: 'started',
21
21
  Pending: 'pending',
@@ -1 +1 @@
1
- {"version":3,"file":"activity-page.js","sourceRoot":"","sources":["../../../client/pages/activity/activity-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/property-editor/ox-properties-dynamic-view.js'\nimport '@operato/board/ox-board-viewer.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { PageView, store } from '@operato/shell'\nimport { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { provider } from '@things-factory/board-ui'\n\nconst formatter = new Intl.DateTimeFormat(navigator.language, { dateStyle: 'full', timeStyle: 'short' })\n\nexport const ActivityInstanceStatus = {\n Draft: 'draft',\n Posted: 'posted',\n WaitingAssignment: 'waiting-assignment',\n Assigned: 'assigned',\n Started: 'started',\n Pending: 'pending',\n Ended: 'ended',\n Aborted: 'aborted'\n}\n\n@customElement('activity-page')\nexport class ActivityPage extends connect(store)(localize(i18next)(PageView)) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n width: 100%;\n padding: 5px;\n overflow: auto;\n }\n\n [header] {\n display: block;\n padding: 5px;\n }\n\n [content] {\n flex: 1;\n display: block;\n padding: 5px;\n }\n\n ox-board-viewer {\n width: 100%;\n height: 100%;\n }\n `\n ]\n\n @property({ type: Object }) activityInstance: any\n @property({ type: Object }) board: any\n\n get context() {\n const startable = [ActivityInstanceStatus.Assigned, ActivityInstanceStatus.Posted].includes(\n this.activityInstance?.state\n )\n\n const finishable = [ActivityInstanceStatus.Started].includes(this.activityInstance?.state)\n const savable = finishable\n\n return {\n title: this.lifecycle?.params?.['title'] || i18next.t('title.activity'),\n help: 'worklist/activity',\n actions: [\n startable && {\n title: i18next.t('button.play'),\n action: this._startActivityInstance.bind(this),\n ...CommonButtonStyles.play\n },\n\n savable && {\n title: i18next.t('button.save'),\n action: this._saveActivityInstance.bind(this),\n ...CommonButtonStyles.save\n },\n\n finishable && {\n title: i18next.t('button.finish'),\n action: this._endActivityInstance.bind(this),\n ...CommonButtonStyles.save\n }\n ].filter(Boolean /* truthy only */)\n }\n }\n\n render() {\n const { name, description, state, thumbnail, dueAt, createdAt } = this.activityInstance || {}\n return html`\n <div header>\n <div>name: ${name}</div>\n <div>description: ${description}</div>\n <div>state: ${state}</div>\n <div>posted at: ${createdAt && formatter.format(new Date(createdAt))}</div>\n <div>due at: ${dueAt && formatter.format(new Date(dueAt))}</div>\n <img src=${thumbnail} />\n </div>\n\n <div content>${this.activityContent()}</div>\n `\n }\n\n activityContent() {\n switch (this.activityInstance?.uiType) {\n case 'template':\n return this.templateContent()\n case 'generated':\n return this.generatedContent()\n case 'board':\n return this.boardContent()\n case 'page':\n case 'external':\n default:\n return html``\n }\n }\n\n templateContent() {\n const { uiSource: template } = this.activityInstance\n return unsafeHTML(template)\n }\n\n getInputSpec() {\n const model = this.activityInstance?.activity?.model\n\n return (model || [])\n .filter(item => item.inout === 'in' || item.inout === 'inout')\n .map(item => {\n return {\n ...item,\n label: item.name\n }\n })\n }\n\n getOutputSpec() {\n const model = this.activityInstance?.activity?.model\n\n return (model || [])\n .filter(item => item.inout === 'inout' || item.inout === 'out')\n .map(item => {\n return {\n ...item,\n label: item.name\n }\n })\n }\n\n generatedContent() {\n var { input, output } = this.activityInstance || {}\n\n const inputSpec = this.getInputSpec()\n const outputSpec = this.getOutputSpec()\n\n if (!output) {\n output = inputSpec\n .filter(item => item.inout === 'inout')\n .reduce((inout, item) => {\n inout[item.name] = input[item.name]\n return inout\n }, {})\n }\n\n return html`\n <fieldset>\n <legend>Input</legend>\n <ox-properties-dynamic-view data-name=\"input\" .props=${inputSpec} .value=${input}></ox-properties-dynamic-view>\n </fieldset>\n\n <fieldset>\n <legend>Output</legend>\n <ox-properties-dynamic-view\n data-name=\"output\"\n .props=${outputSpec}\n .value=${output}\n @property-change=${e => (this.activityInstance.output = e.currentTarget.value)}\n ></ox-properties-dynamic-view>\n </fieldset>\n `\n }\n\n boardContent() {\n const { uiSource: boardId, input, output } = this.activityInstance\n\n if (!this.board || this.board.id !== boardId) {\n this.board = {\n id: boardId\n }\n }\n\n return html`\n <ox-board-viewer\n style=\"background-color: white;\"\n .board=${this.board}\n .provider=${provider}\n .values=${{ ...input, ...output }}\n hide-fullscreen\n hide-navigation\n ></ox-board-viewer>\n `\n }\n\n @query('ox-board-viewer') boardViewer: any\n\n getOutputFromBoard() {\n const outputSpec = this.getOutputSpec()\n const data = this.boardViewer.getSceneValues()\n\n return outputSpec.reduce((output, spec) => {\n output[spec.name] = data[spec.name]\n return output\n }, {})\n }\n\n updated(changes) {\n if (changes.has('activityInstance')) {\n this.updateContext()\n }\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) {\n if (this.active) {\n this.fetchActivityInstance(lifecycle.resourceId)\n }\n }\n\n async fetchActivityInstance(id) {\n const response = await client.query({\n query: gql`\n query activityInstance($id: String!) {\n activityInstance(id: $id) {\n id\n name\n description\n state\n activity {\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 thumbnail\n input\n output\n uiType\n uiSource\n dueAt\n createdAt\n }\n }\n `,\n variables: {\n id\n }\n })\n\n this.activityInstance = response.data.activityInstance\n }\n\n async _startActivityInstance() {\n var { id, output, reason, uiType } = this.activityInstance\n if (uiType === 'board') {\n output = this.getOutputFromBoard()\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $output: Object) {\n startActivityInstance(id: $id, output: $output) {\n name\n }\n }\n `,\n variables: {\n id,\n output\n }\n })\n\n if (!response.errors) {\n await this.fetchActivityInstance(this.activityInstance.id)\n\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n message: i18next.t('text.task_is_started_successfully')\n }\n })\n )\n }\n }\n\n async _saveActivityInstance() {\n var { id, output, reason, uiType } = this.activityInstance\n if (uiType === 'board') {\n output = this.getOutputFromBoard()\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $save: ActivityInstanceSave!) {\n saveActivityInstance(id: $id, save: $save) {\n id\n name\n description\n state\n activity {\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 thumbnail\n input\n output\n uiType\n uiSource\n dueAt\n createdAt\n }\n }\n `,\n variables: {\n id,\n save: {\n output\n }\n }\n })\n\n if (!response.errors) {\n this.activityInstance = response.data.saveActivityInstance\n\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n message: i18next.t('text.task_is_saved_successfully')\n }\n })\n )\n }\n }\n\n async _endActivityInstance() {\n var { id, output, reason, uiType } = this.activityInstance\n if (uiType === 'board') {\n output = this.getOutputFromBoard()\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $output: Object, $reason: String) {\n endActivityInstance(id: $id, output: $output, reason: $reason) {\n id\n name\n description\n state\n activity {\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 thumbnail\n input\n output\n uiType\n uiSource\n dueAt\n createdAt\n }\n }\n `,\n variables: {\n id,\n output,\n reason\n }\n })\n\n if (!response.errors) {\n this.activityInstance = response.data.endActivityInstance\n\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n message: i18next.t('text.task_is_finished_successfully')\n }\n })\n )\n }\n }\n}\n"]}
1
+ {"version":3,"file":"activity-page.js","sourceRoot":"","sources":["../../../client/pages/activity/activity-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/property-editor/ox-properties-dynamic-view.js'\nimport '@operato/board/ox-board-viewer.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { PageView, store } from '@operato/shell'\nimport { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { provider } from '@things-factory/board-ui'\n\nconst formatter = new Intl.DateTimeFormat(navigator.language, { dateStyle: 'full', timeStyle: 'short' })\n\nexport const ActivityInstanceStatus = {\n Draft: 'draft',\n Posted: 'posted',\n PendingAssignment: 'pending-assignment',\n Assigned: 'assigned',\n Started: 'started',\n Pending: 'pending',\n Ended: 'ended',\n Aborted: 'aborted'\n}\n\n@customElement('activity-page')\nexport class ActivityPage extends connect(store)(localize(i18next)(PageView)) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n width: 100%;\n padding: 5px;\n overflow: auto;\n }\n\n [header] {\n display: block;\n padding: 5px;\n }\n\n [content] {\n flex: 1;\n display: block;\n padding: 5px;\n }\n\n ox-board-viewer {\n width: 100%;\n height: 100%;\n }\n `\n ]\n\n @property({ type: Object }) activityInstance: any\n @property({ type: Object }) board: any\n\n get context() {\n const startable = [ActivityInstanceStatus.Assigned, ActivityInstanceStatus.Posted].includes(\n this.activityInstance?.state\n )\n\n const finishable = [ActivityInstanceStatus.Started].includes(this.activityInstance?.state)\n const savable = finishable\n\n return {\n title: this.lifecycle?.params?.['title'] || i18next.t('title.activity'),\n help: 'worklist/activity',\n actions: [\n startable && {\n title: i18next.t('button.play'),\n action: this._startActivityInstance.bind(this),\n ...CommonButtonStyles.play\n },\n\n savable && {\n title: i18next.t('button.save'),\n action: this._saveActivityInstance.bind(this),\n ...CommonButtonStyles.save\n },\n\n finishable && {\n title: i18next.t('button.finish'),\n action: this._endActivityInstance.bind(this),\n ...CommonButtonStyles.save\n }\n ].filter(Boolean /* truthy only */)\n }\n }\n\n render() {\n const { name, description, state, thumbnail, dueAt, createdAt } = this.activityInstance || {}\n return html`\n <div header>\n <div>name: ${name}</div>\n <div>description: ${description}</div>\n <div>state: ${state}</div>\n <div>posted at: ${createdAt && formatter.format(new Date(createdAt))}</div>\n <div>due at: ${dueAt && formatter.format(new Date(dueAt))}</div>\n <img src=${thumbnail} />\n </div>\n\n <div content>${this.activityContent()}</div>\n `\n }\n\n activityContent() {\n switch (this.activityInstance?.uiType) {\n case 'template':\n return this.templateContent()\n case 'generated':\n return this.generatedContent()\n case 'board':\n return this.boardContent()\n case 'page':\n case 'external':\n default:\n return html``\n }\n }\n\n templateContent() {\n const { uiSource: template } = this.activityInstance\n return unsafeHTML(template)\n }\n\n getInputSpec() {\n const model = this.activityInstance?.activity?.model\n\n return (model || [])\n .filter(item => item.inout === 'in' || item.inout === 'inout')\n .map(item => {\n return {\n ...item,\n label: item.name\n }\n })\n }\n\n getOutputSpec() {\n const model = this.activityInstance?.activity?.model\n\n return (model || [])\n .filter(item => item.inout === 'inout' || item.inout === 'out')\n .map(item => {\n return {\n ...item,\n label: item.name\n }\n })\n }\n\n generatedContent() {\n var { input, output } = this.activityInstance || {}\n\n const inputSpec = this.getInputSpec()\n const outputSpec = this.getOutputSpec()\n\n if (!output) {\n output = inputSpec\n .filter(item => item.inout === 'inout')\n .reduce((inout, item) => {\n inout[item.name] = input[item.name]\n return inout\n }, {})\n }\n\n return html`\n <fieldset>\n <legend>Input</legend>\n <ox-properties-dynamic-view data-name=\"input\" .props=${inputSpec} .value=${input}></ox-properties-dynamic-view>\n </fieldset>\n\n <fieldset>\n <legend>Output</legend>\n <ox-properties-dynamic-view\n data-name=\"output\"\n .props=${outputSpec}\n .value=${output}\n @property-change=${e => (this.activityInstance.output = e.currentTarget.value)}\n ></ox-properties-dynamic-view>\n </fieldset>\n `\n }\n\n boardContent() {\n const { uiSource: boardId, input, output } = this.activityInstance\n\n if (!this.board || this.board.id !== boardId) {\n this.board = {\n id: boardId\n }\n }\n\n return html`\n <ox-board-viewer\n style=\"background-color: white;\"\n .board=${this.board}\n .provider=${provider}\n .values=${{ ...input, ...output }}\n hide-fullscreen\n hide-navigation\n ></ox-board-viewer>\n `\n }\n\n @query('ox-board-viewer') boardViewer: any\n\n getOutputFromBoard() {\n const outputSpec = this.getOutputSpec()\n const data = this.boardViewer.getSceneValues()\n\n return outputSpec.reduce((output, spec) => {\n output[spec.name] = data[spec.name]\n return output\n }, {})\n }\n\n updated(changes) {\n if (changes.has('activityInstance')) {\n this.updateContext()\n }\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) {\n if (this.active) {\n this.fetchActivityInstance(lifecycle.resourceId)\n }\n }\n\n async fetchActivityInstance(id) {\n const response = await client.query({\n query: gql`\n query activityInstance($id: String!) {\n activityInstance(id: $id) {\n id\n name\n description\n state\n activity {\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 thumbnail\n input\n output\n uiType\n uiSource\n dueAt\n createdAt\n }\n }\n `,\n variables: {\n id\n }\n })\n\n this.activityInstance = response.data.activityInstance\n }\n\n async _startActivityInstance() {\n var { id, output, reason, uiType } = this.activityInstance\n if (uiType === 'board') {\n output = this.getOutputFromBoard()\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $output: Object) {\n startActivityInstance(id: $id, output: $output) {\n name\n }\n }\n `,\n variables: {\n id,\n output\n }\n })\n\n if (!response.errors) {\n await this.fetchActivityInstance(this.activityInstance.id)\n\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n message: i18next.t('text.task_is_started_successfully')\n }\n })\n )\n }\n }\n\n async _saveActivityInstance() {\n var { id, output, reason, uiType } = this.activityInstance\n if (uiType === 'board') {\n output = this.getOutputFromBoard()\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $save: ActivityInstanceSave!) {\n saveActivityInstance(id: $id, save: $save) {\n id\n name\n description\n state\n activity {\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 thumbnail\n input\n output\n uiType\n uiSource\n dueAt\n createdAt\n }\n }\n `,\n variables: {\n id,\n save: {\n output\n }\n }\n })\n\n if (!response.errors) {\n this.activityInstance = response.data.saveActivityInstance\n\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n message: i18next.t('text.task_is_saved_successfully')\n }\n })\n )\n }\n }\n\n async _endActivityInstance() {\n var { id, output, reason, uiType } = this.activityInstance\n if (uiType === 'board') {\n output = this.getOutputFromBoard()\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $output: Object, $reason: String) {\n endActivityInstance(id: $id, output: $output, reason: $reason) {\n id\n name\n description\n state\n activity {\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 thumbnail\n input\n output\n uiType\n uiSource\n dueAt\n createdAt\n }\n }\n `,\n variables: {\n id,\n output,\n reason\n }\n })\n\n if (!response.errors) {\n this.activityInstance = response.data.endActivityInstance\n\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n message: i18next.t('text.task_is_finished_successfully')\n }\n })\n )\n }\n }\n}\n"]}
@@ -61,7 +61,6 @@ let StarterListPage = class StarterListPage extends connect(store)(localize(i18n
61
61
  var _a;
62
62
  this.filters = (_a = e.currentTarget) === null || _a === void 0 ? void 0 : _a.value;
63
63
  }}
64
- multiple
65
64
  ></ox-input-select-buttons>
66
65
  </div>
67
66