@things-factory/worklist 6.0.37 → 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 (134) hide show
  1. package/client/activity-summary-generator.ts +5 -5
  2. package/client/bootstrap.ts +3 -6
  3. package/client/grist-editor/grist-editor-activity-search-key.ts +3 -2
  4. package/client/grist-editor/grist-renderer-activity-search-key.ts +25 -0
  5. package/client/pages/activity/activity-list-page.ts +25 -52
  6. package/client/pages/activity/activity-page.ts +1 -1
  7. package/client/pages/activity/activity-partial-view.ts +0 -3
  8. package/client/pages/activity/starter-list-page.ts +0 -1
  9. package/client/pages/activity-instance/activity-instance-list-page.ts +8 -3
  10. package/client/pages/activity-instance/activity-instance-page.ts +2 -2
  11. package/client/pages/activity-thread/activity-thread-page.ts +4 -11
  12. package/client/pages/installable-activity/installable-activity-list-page.ts +19 -26
  13. package/client/pages/todo/{approval-waiting-list-page.ts → approval-pending-list-page.ts} +14 -23
  14. package/client/pages/todo/done-list-page.ts +23 -22
  15. package/client/pages/todo/draft-list-page.ts +16 -14
  16. package/client/pages/todo/pickable-list-page.ts +24 -26
  17. package/client/pages/todo/todo-list-page.ts +34 -19
  18. package/client/route.ts +2 -6
  19. package/client/types/activity-instance.ts +1 -1
  20. package/client/types/activity.ts +0 -6
  21. package/dist-client/activity-summary-generator.js +5 -5
  22. package/dist-client/activity-summary-generator.js.map +1 -1
  23. package/dist-client/bootstrap.js +3 -2
  24. package/dist-client/bootstrap.js.map +1 -1
  25. package/dist-client/grist-editor/grist-editor-activity-search-key.js +3 -2
  26. package/dist-client/grist-editor/grist-editor-activity-search-key.js.map +1 -1
  27. package/dist-client/grist-editor/grist-renderer-activity-search-key.d.ts +3 -0
  28. package/dist-client/grist-editor/grist-renderer-activity-search-key.js +22 -0
  29. package/dist-client/grist-editor/grist-renderer-activity-search-key.js.map +1 -0
  30. package/dist-client/pages/activity/activity-list-page.js +25 -52
  31. package/dist-client/pages/activity/activity-list-page.js.map +1 -1
  32. package/dist-client/pages/activity/activity-page.d.ts +1 -1
  33. package/dist-client/pages/activity/activity-page.js +1 -1
  34. package/dist-client/pages/activity/activity-page.js.map +1 -1
  35. package/dist-client/pages/activity/activity-partial-view.js +1 -1
  36. package/dist-client/pages/activity/activity-partial-view.js.map +1 -1
  37. package/dist-client/pages/activity/starter-list-page.js +0 -1
  38. package/dist-client/pages/activity/starter-list-page.js.map +1 -1
  39. package/dist-client/pages/activity-instance/activity-instance-list-page.js +8 -3
  40. package/dist-client/pages/activity-instance/activity-instance-list-page.js.map +1 -1
  41. package/dist-client/pages/activity-instance/activity-instance-page.d.ts +1 -1
  42. package/dist-client/pages/activity-instance/activity-instance-page.js +2 -2
  43. package/dist-client/pages/activity-instance/activity-instance-page.js.map +1 -1
  44. package/dist-client/pages/activity-thread/activity-thread-page.js +4 -6
  45. package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
  46. package/dist-client/pages/installable-activity/installable-activity-list-page.d.ts +0 -1
  47. package/dist-client/pages/installable-activity/installable-activity-list-page.js +17 -24
  48. package/dist-client/pages/installable-activity/installable-activity-list-page.js.map +1 -1
  49. package/dist-client/pages/todo/approval-pending-list-page.d.ts +40 -0
  50. package/dist-client/pages/todo/approval-pending-list-page.js +360 -0
  51. package/dist-client/pages/todo/approval-pending-list-page.js.map +1 -0
  52. package/dist-client/pages/todo/approval-waiting-list-page.js +9 -15
  53. package/dist-client/pages/todo/approval-waiting-list-page.js.map +1 -1
  54. package/dist-client/pages/todo/assigned-list-page.js +0 -1
  55. package/dist-client/pages/todo/assigned-list-page.js.map +1 -1
  56. package/dist-client/pages/todo/done-list-page.js +22 -21
  57. package/dist-client/pages/todo/done-list-page.js.map +1 -1
  58. package/dist-client/pages/todo/draft-list-page.js +16 -15
  59. package/dist-client/pages/todo/draft-list-page.js.map +1 -1
  60. package/dist-client/pages/todo/pickable-list-page.js +26 -31
  61. package/dist-client/pages/todo/pickable-list-page.js.map +1 -1
  62. package/dist-client/pages/todo/todo-list-page.js +34 -20
  63. package/dist-client/pages/todo/todo-list-page.js.map +1 -1
  64. package/dist-client/route.d.ts +1 -1
  65. package/dist-client/route.js +2 -5
  66. package/dist-client/route.js.map +1 -1
  67. package/dist-client/tsconfig.tsbuildinfo +1 -1
  68. package/dist-client/types/activity-instance.d.ts +1 -1
  69. package/dist-client/types/activity-instance.js +1 -1
  70. package/dist-client/types/activity-instance.js.map +1 -1
  71. package/dist-client/types/activity.d.ts +0 -3
  72. package/dist-client/types/activity.js.map +1 -1
  73. package/dist-server/controllers/activity-instance/end.js +3 -0
  74. package/dist-server/controllers/activity-instance/end.js.map +1 -1
  75. package/dist-server/controllers/activity-instance/post.js +2 -1
  76. package/dist-server/controllers/activity-instance/post.js.map +1 -1
  77. package/dist-server/controllers/activity-instance/terminate.js +3 -0
  78. package/dist-server/controllers/activity-instance/terminate.js.map +1 -1
  79. package/dist-server/controllers/activity-thread/abort.js +5 -2
  80. package/dist-server/controllers/activity-thread/abort.js.map +1 -1
  81. package/dist-server/controllers/activity-thread/adjust.js +8 -0
  82. package/dist-server/controllers/activity-thread/adjust.js.map +1 -1
  83. package/dist-server/controllers/activity-thread/end.js +5 -2
  84. package/dist-server/controllers/activity-thread/end.js.map +1 -1
  85. package/dist-server/controllers/activity-thread/save.js +7 -4
  86. package/dist-server/controllers/activity-thread/save.js.map +1 -1
  87. package/dist-server/controllers/activity-thread/submit.js +6 -3
  88. package/dist-server/controllers/activity-thread/submit.js.map +1 -1
  89. package/dist-server/controllers/common.js +1 -1
  90. package/dist-server/controllers/common.js.map +1 -1
  91. package/dist-server/service/activity/activity-history.js +0 -15
  92. package/dist-server/service/activity/activity-history.js.map +1 -1
  93. package/dist-server/service/activity/activity-type.js +0 -24
  94. package/dist-server/service/activity/activity-type.js.map +1 -1
  95. package/dist-server/service/activity/activity.js +7 -22
  96. package/dist-server/service/activity/activity.js.map +1 -1
  97. package/dist-server/service/activity-approval/activity-approval-query.js +2 -2
  98. package/dist-server/service/activity-approval/activity-approval-query.js.map +1 -1
  99. package/dist-server/service/activity-instance/activity-instance-query.js +1 -1
  100. package/dist-server/service/activity-instance/activity-instance-query.js.map +1 -1
  101. package/dist-server/service/activity-instance/activity-instance.js +1 -1
  102. package/dist-server/service/activity-instance/activity-instance.js.map +1 -1
  103. package/dist-server/service/activity-summary/activity-summary-query.js +3 -3
  104. package/dist-server/service/activity-summary/activity-summary-query.js.map +1 -1
  105. package/dist-server/service/activity-summary/activity-summary.js +1 -1
  106. package/dist-server/service/activity-summary/activity-summary.js.map +1 -1
  107. package/dist-server/service/installable-activity/installable-activity.js +7 -0
  108. package/dist-server/service/installable-activity/installable-activity.js.map +1 -1
  109. package/dist-server/tsconfig.tsbuildinfo +1 -1
  110. package/package.json +3 -3
  111. package/server/controllers/activity-instance/end.ts +4 -0
  112. package/server/controllers/activity-instance/post.ts +2 -0
  113. package/server/controllers/activity-instance/terminate.ts +4 -0
  114. package/server/controllers/activity-thread/abort.ts +6 -2
  115. package/server/controllers/activity-thread/adjust.ts +12 -0
  116. package/server/controllers/activity-thread/end.ts +6 -2
  117. package/server/controllers/activity-thread/save.ts +9 -4
  118. package/server/controllers/activity-thread/submit.ts +7 -3
  119. package/server/controllers/common.ts +1 -1
  120. package/server/service/activity/activity-history.ts +0 -12
  121. package/server/service/activity/activity-type.ts +0 -18
  122. package/server/service/activity/activity.ts +7 -19
  123. package/server/service/activity-approval/activity-approval-query.ts +1 -1
  124. package/server/service/activity-instance/activity-instance-query.ts +1 -1
  125. package/server/service/activity-instance/activity-instance.ts +1 -1
  126. package/server/service/activity-summary/activity-summary-query.ts +2 -2
  127. package/server/service/activity-summary/activity-summary.ts +1 -1
  128. package/server/service/installable-activity/installable-activity.ts +3 -0
  129. package/things-factory.config.js +1 -2
  130. package/translations/en.json +25 -3
  131. package/translations/ko.json +25 -3
  132. package/translations/ms.json +67 -45
  133. package/translations/zh.json +66 -44
  134. package/client/pages/todo/assigned-list-page.ts +0 -258
@@ -178,14 +178,17 @@ export class DraftListPage extends connect(store)(localize(i18next)(PageView)) {
178
178
  hidden: true
179
179
  },
180
180
  {
181
- type: 'select',
181
+ type: 'number',
182
182
  name: 'priority',
183
183
  header: i18next.t('field.priority'),
184
184
  record: {
185
185
  editable: false,
186
- options: Priorities
186
+ renderer: function (value, column, record, rowIndex, field) {
187
+ const color = ['', 'gray', 'yellow', 'orange', 'red'][value || 0]
188
+ const count = new Array(value > 4 ? 4 : value || 0).fill('')
189
+ return html`${count.map(() => html`<mwc-icon style="color:${color};">star</mwc-icon>`)}`
190
+ }
187
191
  },
188
- // filter: true,
189
192
  width: 60
190
193
  },
191
194
  {
@@ -195,19 +198,18 @@ export class DraftListPage extends connect(store)(localize(i18next)(PageView)) {
195
198
  record: {
196
199
  editable: false,
197
200
  options: [
198
- { display: 'Draft', value: 'draft' },
199
- { display: 'Posted', value: 'posted' },
200
- { display: 'WaitingAssignment', value: 'waiting-assignment' },
201
- { display: 'Assigned', value: 'assigned' },
202
- { display: 'Started', value: 'started' },
203
- { display: 'Pending', value: 'pending' },
204
- { display: 'Escalated', value: 'escalated' },
205
- { display: 'Ended', value: 'ended' },
206
- { display: 'Aborted', value: 'aborted' }
201
+ { display: i18next.t('label.activity-state-draft'), value: 'draft' },
202
+ { display: i18next.t('label.activity-state-posted'), value: 'posted' },
203
+ { display: i18next.t('label.activity-state-pending-assignment'), value: 'pending-assignment' },
204
+ { display: i18next.t('label.activity-state-assigned'), value: 'assigned' },
205
+ { display: i18next.t('label.activity-state-started'), value: 'started' },
206
+ { display: i18next.t('label.activity-state-pending'), value: 'pending' },
207
+ { display: i18next.t('label.activity-state-escalated'), value: 'escalated' },
208
+ { display: i18next.t('label.activity-state-ended'), value: 'ended' },
209
+ { display: i18next.t('label.activity-state-aborted'), value: 'aborted' }
207
210
  ]
208
211
  },
209
- // filter: true,
210
- width: 60
212
+ width: 80
211
213
  },
212
214
  {
213
215
  type: 'datetime',
@@ -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!]) {
@@ -15,7 +15,6 @@ import { CommonGristStyles, ScrollbarStyles } from '@operato/styles'
15
15
  import { adjustFilters, isMobileDevice, sleep } from '@operato/utils'
16
16
 
17
17
  import { ActivityThreadStatus } from '../../types/activity-thread'
18
- import { Priorities } from '../../types/types.js'
19
18
 
20
19
  const MIN = 60
21
20
  const HOUR = 60 * MIN
@@ -87,15 +86,18 @@ export class TodoListPage extends connect(store)(localize(i18next)(PageView)) {
87
86
  value: 'due'
88
87
  },
89
88
  {
90
- display: i18next.t('label.filter-rejected'),
91
- value: 'rejected'
89
+ display: i18next.t('label.filter-proceeding'),
90
+ value: 'proceeding'
91
+ },
92
+ {
93
+ display: i18next.t('label.filter-pending-approval'),
94
+ value: 'pending-approval'
92
95
  }
93
96
  ]}
94
97
  @change=${(e: CustomEvent) => {
95
98
  this.filters = (e.currentTarget as any)?.value
96
99
  this.grist.fetch()
97
100
  }}
98
- multiple
99
101
  ></ox-input-select-buttons>
100
102
  </div>
101
103
 
@@ -123,6 +125,7 @@ export class TodoListPage extends connect(store)(localize(i18next)(PageView)) {
123
125
  gutterName: 'button',
124
126
  name: 'start',
125
127
  icon: 'play_arrow',
128
+ title: i18next.t('title.open this activity page'),
126
129
  handlers: {
127
130
  click: (columns, data, column, record, rowIndex) => {
128
131
  const { id } = record
@@ -167,14 +170,17 @@ export class TodoListPage extends connect(store)(localize(i18next)(PageView)) {
167
170
  hidden: true
168
171
  },
169
172
  {
170
- type: 'select',
173
+ type: 'number',
171
174
  name: 'priority',
172
175
  header: i18next.t('field.priority'),
173
176
  record: {
174
177
  editable: false,
175
- options: Priorities
178
+ renderer: function (value, column, record, rowIndex, field) {
179
+ const color = ['', 'gray', 'yellow', 'orange', 'red'][value || 0]
180
+ const count = new Array(value > 4 ? 4 : value || 0).fill('')
181
+ return html`${count.map(() => html`<mwc-icon style="color:${color};">star</mwc-icon>`)}`
182
+ }
176
183
  },
177
- // filter: true,
178
184
  width: 60
179
185
  },
180
186
  {
@@ -184,18 +190,17 @@ export class TodoListPage extends connect(store)(localize(i18next)(PageView)) {
184
190
  record: {
185
191
  editable: false,
186
192
  options: [
187
- { display: 'Assigned', value: 'assigned' },
188
- { display: 'Started', value: 'started' },
189
- { display: 'Delegated', value: 'delegated' },
190
- { display: 'Submitted', value: 'submitted' },
191
- { display: 'Escalated', value: 'escalated' },
192
- { display: 'Rejected', value: 'rejected' },
193
- { display: 'Ended', value: 'ended' },
194
- { display: 'Aborted', value: 'aborted' }
193
+ { display: i18next.t('label.activity-state-assigned'), value: 'assigned' },
194
+ { display: i18next.t('label.activity-state-started'), value: 'started' },
195
+ { display: i18next.t('label.activity-state-delegated'), value: 'delegated' },
196
+ { display: i18next.t('label.activity-state-submitted'), value: 'submitted' },
197
+ { display: i18next.t('label.activity-state-escalated'), value: 'escalated' },
198
+ { display: i18next.t('label.activity-state-rejected'), value: 'rejected' },
199
+ { display: i18next.t('label.activity-state-ended'), value: 'ended' },
200
+ { display: i18next.t('label.activity-state-aborted'), value: 'aborted' }
195
201
  ]
196
202
  },
197
- filter: false,
198
- width: 60
203
+ width: 80
199
204
  },
200
205
  {
201
206
  type: 'datetime',
@@ -283,8 +288,18 @@ export class TodoListPage extends connect(store)(localize(i18next)(PageView)) {
283
288
  filters = adjustFilters(filters, [{ name: 'dueAt', operator: 'lte', value: tomorrow }])
284
289
  }
285
290
 
286
- if (this.filters?.includes('rejected')) {
287
- filters = adjustFilters(filters, [{ name: 'state', operator: 'eq', value: ActivityThreadStatus.Rejected }])
291
+ if (this.filters?.includes('proceeding')) {
292
+ filters = adjustFilters(filters, [{ name: 'state', operator: 'eq', value: ActivityThreadStatus.Started }])
293
+ }
294
+
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
+ ])
288
303
  }
289
304
 
290
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',
@@ -61,12 +61,6 @@ export class Activity {
61
61
 
62
62
  standardTime?: number
63
63
 
64
- cycleTime?: number
65
-
66
- tactTime?: number
67
-
68
- leadTime?: number
69
-
70
64
  issuerRole?: Role
71
65
 
72
66
  assigneeRole?: Role
@@ -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"]}
@@ -5,12 +5,13 @@ import { html } from 'lit-html';
5
5
  import { store } from '@operato/shell';
6
6
  import { openOverlay, TOOL_POSITION } from '@operato/layout';
7
7
  import { APPEND_CONTEXT_TOOL } from '@things-factory/context-ui';
8
- import { OxGristRendererJson5, registerEditor as registerGristEditor, registerRenderer as registerGristRenderer } from '@operato/data-grist';
8
+ import { registerEditor as registerGristEditor, registerRenderer as registerGristRenderer } from '@operato/data-grist';
9
9
  import { OxGristEditorDuration } from '@operato/grist-editor/ox-grist-editor-duration.js';
10
10
  import { OxGristEditorQuantifier } from '@operato/grist-editor/ox-grist-editor-quantifier.js';
11
11
  import { OxGristRendererDuration } from '@operato/grist-editor/ox-grist-renderer-duration.js';
12
12
  import { OxGristRendererQuantifier } from '@operato/grist-editor/ox-grist-renderer-quantifier.js';
13
13
  import { GristEditorActivitySearchKeys } from './grist-editor/grist-editor-activity-search-key.js';
14
+ import { GristRendererActivitySearchKeys } from './grist-editor/grist-renderer-activity-search-key.js';
14
15
  export default function bootstrap() {
15
16
  ;
16
17
  [
@@ -46,6 +47,6 @@ export default function bootstrap() {
46
47
  registerGristEditor('quantifier', OxGristEditorQuantifier);
47
48
  registerGristRenderer('quantifier', OxGristRendererQuantifier);
48
49
  registerGristEditor('activity-search-keys', GristEditorActivitySearchKeys);
49
- registerGristRenderer('activity-search-keys', OxGristRendererJson5);
50
+ registerGristRenderer('activity-search-keys', GristRendererActivitySearchKeys);
50
51
  }
51
52
  //# sourceMappingURL=bootstrap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../client/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAC3B,OAAO,mDAAmD,CAAA;AAC1D,OAAO,iDAAiD,CAAA;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,OAAO,EACL,oBAAoB,EACpB,cAAc,IAAI,mBAAmB,EACrC,gBAAgB,IAAI,qBAAqB,EAC1C,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAA;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAA;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAA;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAA;AACjG,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAA;AAElG,MAAM,CAAC,OAAO,UAAU,SAAS;IAC/B,CAAC;IAAA;QACC;YACE,QAAQ,EAAE,IAAI,CAAA,6EAA6E;YAC3F,OAAO,EAAE,kBAAkB;SAC5B;QACD;YACE,QAAQ,EAAE,IAAI,CAAA,yEAAyE;YACvF,OAAO,EAAE,gBAAgB;SAC1B;KACF,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAClC,KAAK,CAAC,QAAQ,CAAC;YACb,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE;gBACJ,QAAQ,EAAE,aAAa,CAAC,KAAK;gBAC7B,QAAQ,EAAE,IAAI,CAAA;;qBAED,KAAK,EAAC,CAAC,EAAC,EAAE;oBACjB,WAAW,CAAC,yBAAyB,EAAE;wBACrC,QAAQ;qBACT,CAAC,CAAA;gBACJ,CAAC;;;SAGJ;gBACD,OAAO;aACR;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAA;IACtD,qBAAqB,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAA;IAC1D,mBAAmB,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAA;IAC1D,qBAAqB,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAA;IAE9D,mBAAmB,CAAC,sBAAsB,EAAE,6BAA6B,CAAC,CAAA;IAC1E,qBAAqB,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,CAAA;AACrE,CAAC","sourcesContent":["import '@material/mwc-icon'\nimport './templates/activity-approval-context-template.js'\nimport './templates/activity-thread-context-template.js'\n\nimport { html } from 'lit-html'\nimport { store } from '@operato/shell'\nimport { openOverlay, TOOL_POSITION } from '@operato/layout'\nimport { APPEND_CONTEXT_TOOL } from '@things-factory/context-ui'\n\nimport {\n OxGristRendererJson5,\n registerEditor as registerGristEditor,\n registerRenderer as registerGristRenderer\n} from '@operato/data-grist'\nimport { OxGristEditorDuration } from '@operato/grist-editor/ox-grist-editor-duration.js'\nimport { OxGristEditorQuantifier } from '@operato/grist-editor/ox-grist-editor-quantifier.js'\nimport { OxGristRendererDuration } from '@operato/grist-editor/ox-grist-renderer-duration.js'\nimport { OxGristRendererQuantifier } from '@operato/grist-editor/ox-grist-renderer-quantifier.js'\nimport { GristEditorActivitySearchKeys } from './grist-editor/grist-editor-activity-search-key.js'\n\nexport default function bootstrap() {\n ;[\n {\n template: html` <activity-approval-context-template></activity-approval-context-template> `,\n context: 'activityApproval'\n },\n {\n template: html` <activity-thread-context-template></activity-thread-context-template> `,\n context: 'activityThread'\n }\n ].forEach(({ template, context }) => {\n store.dispatch({\n type: APPEND_CONTEXT_TOOL,\n tool: {\n position: TOOL_POSITION.FRONT,\n template: html`\n <mwc-icon\n @click=${async e => {\n openOverlay('context-toolbar-overlay', {\n template\n })\n }}\n >info</mwc-icon\n >\n `,\n context\n }\n })\n })\n\n registerGristEditor('duration', OxGristEditorDuration)\n registerGristRenderer('duration', OxGristRendererDuration)\n registerGristEditor('quantifier', OxGristEditorQuantifier)\n registerGristRenderer('quantifier', OxGristRendererQuantifier)\n\n registerGristEditor('activity-search-keys', GristEditorActivitySearchKeys)\n registerGristRenderer('activity-search-keys', OxGristRendererJson5)\n}\n"]}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../client/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAC3B,OAAO,mDAAmD,CAAA;AAC1D,OAAO,iDAAiD,CAAA;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,OAAO,EAAE,cAAc,IAAI,mBAAmB,EAAE,gBAAgB,IAAI,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AACtH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAA;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAA;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAA;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAA;AACjG,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAA;AAClG,OAAO,EAAE,+BAA+B,EAAE,MAAM,sDAAsD,CAAA;AAEtG,MAAM,CAAC,OAAO,UAAU,SAAS;IAC/B,CAAC;IAAA;QACC;YACE,QAAQ,EAAE,IAAI,CAAA,6EAA6E;YAC3F,OAAO,EAAE,kBAAkB;SAC5B;QACD;YACE,QAAQ,EAAE,IAAI,CAAA,yEAAyE;YACvF,OAAO,EAAE,gBAAgB;SAC1B;KACF,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAClC,KAAK,CAAC,QAAQ,CAAC;YACb,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE;gBACJ,QAAQ,EAAE,aAAa,CAAC,KAAK;gBAC7B,QAAQ,EAAE,IAAI,CAAA;;qBAED,KAAK,EAAC,CAAC,EAAC,EAAE;oBACjB,WAAW,CAAC,yBAAyB,EAAE;wBACrC,QAAQ;qBACT,CAAC,CAAA;gBACJ,CAAC;;;SAGJ;gBACD,OAAO;aACR;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAA;IACtD,qBAAqB,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAA;IAC1D,mBAAmB,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAA;IAC1D,qBAAqB,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAA;IAE9D,mBAAmB,CAAC,sBAAsB,EAAE,6BAA6B,CAAC,CAAA;IAC1E,qBAAqB,CAAC,sBAAsB,EAAE,+BAA+B,CAAC,CAAA;AAChF,CAAC","sourcesContent":["import '@material/mwc-icon'\nimport './templates/activity-approval-context-template.js'\nimport './templates/activity-thread-context-template.js'\n\nimport { html } from 'lit-html'\nimport { store } from '@operato/shell'\nimport { openOverlay, TOOL_POSITION } from '@operato/layout'\nimport { APPEND_CONTEXT_TOOL } from '@things-factory/context-ui'\n\nimport { registerEditor as registerGristEditor, registerRenderer as registerGristRenderer } from '@operato/data-grist'\nimport { OxGristEditorDuration } from '@operato/grist-editor/ox-grist-editor-duration.js'\nimport { OxGristEditorQuantifier } from '@operato/grist-editor/ox-grist-editor-quantifier.js'\nimport { OxGristRendererDuration } from '@operato/grist-editor/ox-grist-renderer-duration.js'\nimport { OxGristRendererQuantifier } from '@operato/grist-editor/ox-grist-renderer-quantifier.js'\nimport { GristEditorActivitySearchKeys } from './grist-editor/grist-editor-activity-search-key.js'\nimport { GristRendererActivitySearchKeys } from './grist-editor/grist-renderer-activity-search-key.js'\n\nexport default function bootstrap() {\n ;[\n {\n template: html` <activity-approval-context-template></activity-approval-context-template> `,\n context: 'activityApproval'\n },\n {\n template: html` <activity-thread-context-template></activity-thread-context-template> `,\n context: 'activityThread'\n }\n ].forEach(({ template, context }) => {\n store.dispatch({\n type: APPEND_CONTEXT_TOOL,\n tool: {\n position: TOOL_POSITION.FRONT,\n template: html`\n <mwc-icon\n @click=${async e => {\n openOverlay('context-toolbar-overlay', {\n template\n })\n }}\n >info</mwc-icon\n >\n `,\n context\n }\n })\n })\n\n registerGristEditor('duration', OxGristEditorDuration)\n registerGristRenderer('duration', OxGristRendererDuration)\n registerGristEditor('quantifier', OxGristEditorQuantifier)\n registerGristRenderer('quantifier', OxGristRendererQuantifier)\n\n registerGristEditor('activity-search-keys', GristEditorActivitySearchKeys)\n registerGristRenderer('activity-search-keys', GristRendererActivitySearchKeys)\n}\n"]}
@@ -10,8 +10,9 @@ import { i18next } from '@operato/i18n';
10
10
  import { openPopup } from '@operato/popup';
11
11
  let GristEditorActivitySearchKeys = class GristEditorActivitySearchKeys extends OxGristEditor {
12
12
  get editorTemplate() {
13
- const value = typeof this.value === 'object' ? JSON.stringify(this.value) : this.value;
14
- return html ` <div tabindex="0">${value || ''}</div> `;
13
+ return this.value && this.value instanceof Array && this.value.length > 0
14
+ ? html `<mwc-icon style="--mdc-icon-size:1.3em">key</mwc-icon>`
15
+ : html ``;
15
16
  }
16
17
  _onclick(e) {
17
18
  e.stopPropagation();
@@ -1 +1 @@
1
- {"version":3,"file":"grist-editor-activity-search-key.js","sourceRoot":"","sources":["../../client/grist-editor/grist-editor-activity-search-key.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,OAAO,qDAAqD,CAAA;AAE5D,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAe,MAAM,gBAAgB,CAAA;AAGhD,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,aAAa;IAG9D,IAAI,cAAc;QAChB,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAA;QACtF,OAAO,IAAI,CAAA,sBAAsB,KAAK,IAAI,EAAE,SAAS,CAAA;IACvD,CAAC;IAED,QAAQ,CAAC,CAAQ;QACf,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAA;QACjB,IAAI,GAAG,IAAI,OAAO,EAAE;YAClB,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,IAAI,CAAC,eAAe,EAAE,CAAA;SACvB;IACH,CAAC;IAED,KAAK,CAAC,eAAe;;QACnB,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,KAAK,CAAA;SAClB;QAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAA,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,0CAAE,OAAO,KAAI,EAAE,CAAA;QAExD,MAAM,eAAe,GAAG,CAAC,MAAW,EAAE,EAAE;YACtC,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;gBAC9B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,MAAM,EAAE,IAAI,CAAC,KAAK;oBAClB,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd;aACF,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED;;;;;;;UAOE;QACF,IAAI,QAAQ,GAAG,IAAI,CAAA;iDAC0B,IAAI,CAAC,KAAK,qBAAqB,eAAe;;KAE1F,CAAA;QAED,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE;YAC/B,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,EAAE,KAAI,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG;YAClE,IAAI;SACL,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AAhEY,6BAA6B;IADzC,aAAa,CAAC,mCAAmC,CAAC;GACtC,6BAA6B,CAgEzC;SAhEY,6BAA6B","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport '../grist-editor/popup-activity-search-keys-input.js'\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { i18next } from '@operato/i18n'\nimport { openPopup, PopupHandle } from '@operato/popup'\n\n@customElement('grist-editor-activity-search-keys')\nexport class GristEditorActivitySearchKeys extends OxGristEditor {\n private popup?: PopupHandle\n\n get editorTemplate() {\n const value = typeof this.value === 'object' ? JSON.stringify(this.value) : this.value\n return html` <div tabindex=\"0\">${value || ''}</div> `\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n this.openEditorPopup()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.openEditorPopup()\n }\n }\n\n async openEditorPopup() {\n if (this.popup) {\n delete this.popup\n }\n\n const { name, help } = this.column.record?.options || {}\n\n const confirmCallback = (newval: any) => {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: newval,\n record: this.record,\n column: this.column,\n row: this.row\n }\n })\n )\n }\n\n /* \n 주의 : 이 팝업 템플릿은 layout 모듈에 의해서 render 되므로, \n layout의 구성에 변화가 발생하면, 다시 render된다.\n 이 팝업이 떠 있는 상태에서, 또 다른 팝업이 뜨는 경우도 layout 구성의 변화를 야기한다. (overlay의 갯수의 증가)\n 이 경우 value, options, confirmCallback 등 클로져를 사용한 것들이 초기 바인딩된 값으로 다시 바인딩되게 되는데,\n 만약, 템플릿 내부에서 이들 속성의 레퍼런스가 변화했다면, 원래 상태로 되돌아가는 현상이 발생하게 된다.\n 따라서, 가급적 이들 속성의 레퍼런스를 변화시키지 않는 것이 좋다.\n */\n var template = html`\n <popup-activity-search-keys-input .value=${this.value} .confirmCallback=${confirmCallback}>\n </popup-activity-search-keys-input>\n `\n\n this.popup = openPopup(template, {\n backdrop: true,\n size: 'large',\n title: `${name?.toUpperCase() || i18next.t('field.search-keys')} `,\n help\n })\n }\n}\n"]}
1
+ {"version":3,"file":"grist-editor-activity-search-key.js","sourceRoot":"","sources":["../../client/grist-editor/grist-editor-activity-search-key.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,OAAO,qDAAqD,CAAA;AAE5D,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAe,MAAM,gBAAgB,CAAA;AAGhD,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,aAAa;IAG9D,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,YAAY,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YACvE,CAAC,CAAC,IAAI,CAAA,wDAAwD;YAC9D,CAAC,CAAC,IAAI,CAAA,EAAE,CAAA;IACZ,CAAC;IAED,QAAQ,CAAC,CAAQ;QACf,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAA;QACjB,IAAI,GAAG,IAAI,OAAO,EAAE;YAClB,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,IAAI,CAAC,eAAe,EAAE,CAAA;SACvB;IACH,CAAC;IAED,KAAK,CAAC,eAAe;;QACnB,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,KAAK,CAAA;SAClB;QAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAA,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,0CAAE,OAAO,KAAI,EAAE,CAAA;QAExD,MAAM,eAAe,GAAG,CAAC,MAAW,EAAE,EAAE;YACtC,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;gBAC9B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,MAAM,EAAE,IAAI,CAAC,KAAK;oBAClB,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd;aACF,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED;;;;;;;UAOE;QACF,IAAI,QAAQ,GAAG,IAAI,CAAA;iDAC0B,IAAI,CAAC,KAAK,qBAAqB,eAAe;;KAE1F,CAAA;QAED,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE;YAC/B,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,EAAE,KAAI,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG;YAClE,IAAI;SACL,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AAjEY,6BAA6B;IADzC,aAAa,CAAC,mCAAmC,CAAC;GACtC,6BAA6B,CAiEzC;SAjEY,6BAA6B","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport '../grist-editor/popup-activity-search-keys-input.js'\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { i18next } from '@operato/i18n'\nimport { openPopup, PopupHandle } from '@operato/popup'\n\n@customElement('grist-editor-activity-search-keys')\nexport class GristEditorActivitySearchKeys extends OxGristEditor {\n private popup?: PopupHandle\n\n get editorTemplate() {\n return this.value && this.value instanceof Array && this.value.length > 0\n ? html`<mwc-icon style=\"--mdc-icon-size:1.3em\">key</mwc-icon>`\n : html``\n }\n\n _onclick(e: Event): void {\n e.stopPropagation()\n this.openEditorPopup()\n }\n\n _onkeydown(e: KeyboardEvent): void {\n const key = e.key\n if (key == 'Enter') {\n e.stopPropagation()\n this.openEditorPopup()\n }\n }\n\n async openEditorPopup() {\n if (this.popup) {\n delete this.popup\n }\n\n const { name, help } = this.column.record?.options || {}\n\n const confirmCallback = (newval: any) => {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: newval,\n record: this.record,\n column: this.column,\n row: this.row\n }\n })\n )\n }\n\n /* \n 주의 : 이 팝업 템플릿은 layout 모듈에 의해서 render 되므로, \n layout의 구성에 변화가 발생하면, 다시 render된다.\n 이 팝업이 떠 있는 상태에서, 또 다른 팝업이 뜨는 경우도 layout 구성의 변화를 야기한다. (overlay의 갯수의 증가)\n 이 경우 value, options, confirmCallback 등 클로져를 사용한 것들이 초기 바인딩된 값으로 다시 바인딩되게 되는데,\n 만약, 템플릿 내부에서 이들 속성의 레퍼런스가 변화했다면, 원래 상태로 되돌아가는 현상이 발생하게 된다.\n 따라서, 가급적 이들 속성의 레퍼런스를 변화시키지 않는 것이 좋다.\n */\n var template = html`\n <popup-activity-search-keys-input .value=${this.value} .confirmCallback=${confirmCallback}>\n </popup-activity-search-keys-input>\n `\n\n this.popup = openPopup(template, {\n backdrop: true,\n size: 'large',\n title: `${name?.toUpperCase() || i18next.t('field.search-keys')} `,\n help\n })\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import '@material/mwc-icon';
2
+ import { FieldRenderer } from '@operato/data-grist';
3
+ export declare const GristRendererActivitySearchKeys: FieldRenderer;
@@ -0,0 +1,22 @@
1
+ import '@material/mwc-icon';
2
+ import { html } from 'lit';
3
+ function onmouseover(e, value) {
4
+ const element = e.target;
5
+ const tooltip = value.map(key => key.name).join(',');
6
+ element.setAttribute('data-tooltip', tooltip);
7
+ }
8
+ function onmouseout(e) {
9
+ const element = e.target;
10
+ element.removeAttribute('data-tooltip');
11
+ }
12
+ export const GristRendererActivitySearchKeys = (value, column, record, rowIndex, field) => {
13
+ return value && value instanceof Array && value.length > 0
14
+ ? html `<mwc-icon
15
+ style="--mdc-icon-size:1.3em"
16
+ @mouseover=${(e) => onmouseover(e, value)}
17
+ @mouseout=${onmouseout}
18
+ >key</mwc-icon
19
+ >`
20
+ : html ``;
21
+ };
22
+ //# sourceMappingURL=grist-renderer-activity-search-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grist-renderer-activity-search-key.js","sourceRoot":"","sources":["../../client/grist-editor/grist-renderer-activity-search-key.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAG1B,SAAS,WAAW,CAAC,CAAa,EAAE,KAAY;IAC9C,MAAM,OAAO,GAAG,CAAC,CAAC,MAAwB,CAAA;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACpD,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,UAAU,CAAC,CAAa;IAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,MAAwB,CAAA;IAC1C,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IACvG,OAAO,KAAK,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QACxD,CAAC,CAAC,IAAI,CAAA;;qBAEW,CAAC,CAAa,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC;oBACzC,UAAU;;QAEtB;QACJ,CAAC,CAAC,IAAI,CAAA,EAAE,CAAA;AACZ,CAAC,CAAA","sourcesContent":["import '@material/mwc-icon'\nimport { html } from 'lit'\nimport { FieldRenderer } from '@operato/data-grist'\n\nfunction onmouseover(e: MouseEvent, value: any[]) {\n const element = e.target as HTMLPreElement\n const tooltip = value.map(key => key.name).join(',')\n element.setAttribute('data-tooltip', tooltip)\n}\n\nfunction onmouseout(e: MouseEvent) {\n const element = e.target as HTMLPreElement\n element.removeAttribute('data-tooltip')\n}\n\nexport const GristRendererActivitySearchKeys: FieldRenderer = (value, column, record, rowIndex, field) => {\n return value && value instanceof Array && value.length > 0\n ? html`<mwc-icon\n style=\"--mdc-icon-size:1.3em\"\n @mouseover=${(e: MouseEvent) => onmouseover(e, value)}\n @mouseout=${onmouseout}\n >key</mwc-icon\n >`\n : html``\n}\n"]}
@@ -16,9 +16,9 @@ import { isMobileDevice } from '@operato/utils';
16
16
  import { ActivityTypes, ActivityUITypes } from '../../types/types.js';
17
17
  export const ActivityStatus = [
18
18
  { display: '', value: '' },
19
- { display: 'Draft', value: 'draft' },
20
- { display: 'Released', value: 'released' },
21
- { display: 'Deprecated', value: 'deprecated' }
19
+ { display: i18next.t('label.activity-state-draft'), value: 'draft' },
20
+ { display: i18next.t('label.activity-state-released'), value: 'released' },
21
+ { display: i18next.t('label.activity-state-deprecated'), value: 'deprecated' }
22
22
  ];
23
23
  const DEFAULT_TZ = Intl.DateTimeFormat().resolvedOptions().timeZone;
24
24
  const TIMEZONE_OPTIONS = ['', DEFAULT_TZ, ...moment.tz.names().filter(tz => tz !== DEFAULT_TZ)];
@@ -94,6 +94,7 @@ let ActivityListPage = class ActivityListPage extends connect(store)(localize(i1
94
94
  {
95
95
  type: 'gutter',
96
96
  gutterName: 'button',
97
+ title: i18next.t('title.activity schedule (un)register'),
97
98
  icon: record => (!record || !record.name ? '' : record.scheduleId ? 'pause' : 'play_arrow'),
98
99
  handlers: {
99
100
  click: (columns, data, column, record, rowIndex) => {
@@ -113,6 +114,7 @@ let ActivityListPage = class ActivityListPage extends connect(store)(localize(i1
113
114
  {
114
115
  type: 'gutter',
115
116
  gutterName: 'button',
117
+ title: i18next.t('title.activity model item list'),
116
118
  icon: 'reorder',
117
119
  handlers: {
118
120
  click: (columns, data, column, record, rowIndex) => {
@@ -173,9 +175,18 @@ let ActivityListPage = class ActivityListPage extends connect(store)(localize(i1
173
175
  options: ActivityTypes
174
176
  },
175
177
  sortable: true,
176
- // filter: true,
177
178
  width: 60
178
179
  },
180
+ {
181
+ type: 'boolean',
182
+ name: 'startable',
183
+ label: true,
184
+ header: i18next.t('field.startable'),
185
+ record: {
186
+ editable: true
187
+ },
188
+ width: 50
189
+ },
179
190
  {
180
191
  type: 'activity-search-keys',
181
192
  name: 'searchKeys',
@@ -184,26 +195,21 @@ let ActivityListPage = class ActivityListPage extends connect(store)(localize(i1
184
195
  record: {
185
196
  editable: true
186
197
  },
187
- width: 120
198
+ width: 50
188
199
  },
189
200
  {
190
201
  type: 'number',
191
202
  name: 'priority',
192
203
  header: i18next.t('field.priority'),
193
204
  record: {
194
- editable: true
195
- },
196
- width: 30
197
- },
198
- {
199
- type: 'boolean',
200
- name: 'startable',
201
- label: true,
202
- header: i18next.t('field.startable'),
203
- record: {
204
- editable: true
205
+ editable: true,
206
+ renderer: function (value, column, record, rowIndex, field) {
207
+ const color = ['', 'gray', 'yellow', 'orange', 'red'][value || 0];
208
+ const count = new Array(value > 4 ? 4 : value || 0).fill('');
209
+ return html `${count.map(() => html `<mwc-icon style="color:${color};">star</mwc-icon>`)}`;
210
+ }
205
211
  },
206
- width: 80
212
+ width: 60
207
213
  },
208
214
  {
209
215
  type: 'crontab',
@@ -290,7 +296,7 @@ let ActivityListPage = class ActivityListPage extends connect(store)(localize(i1
290
296
  record: {
291
297
  editable: true
292
298
  },
293
- width: 120
299
+ width: 50
294
300
  },
295
301
  {
296
302
  type: 'approval-line',
@@ -299,7 +305,7 @@ let ActivityListPage = class ActivityListPage extends connect(store)(localize(i1
299
305
  record: {
300
306
  editable: true
301
307
  },
302
- width: 120
308
+ width: 50
303
309
  },
304
310
  {
305
311
  type: 'select',
@@ -395,36 +401,6 @@ let ActivityListPage = class ActivityListPage extends connect(store)(localize(i1
395
401
  sortable: true,
396
402
  width: 80
397
403
  },
398
- {
399
- type: 'duration',
400
- name: 'cycleTime',
401
- header: i18next.t('field.cycle-time'),
402
- record: {
403
- editable: true
404
- },
405
- sortable: true,
406
- width: 80
407
- },
408
- {
409
- type: 'duration',
410
- name: 'tactTime',
411
- header: i18next.t('field.tact-time'),
412
- record: {
413
- editable: true
414
- },
415
- sortable: true,
416
- width: 80
417
- },
418
- {
419
- type: 'duration',
420
- name: 'leadTime',
421
- header: i18next.t('field.lead-time'),
422
- record: {
423
- editable: true
424
- },
425
- sortable: true,
426
- width: 80
427
- },
428
404
  {
429
405
  type: 'resource-object',
430
406
  name: 'updater',
@@ -535,9 +511,6 @@ let ActivityListPage = class ActivityListPage extends connect(store)(localize(i1
535
511
  timezone
536
512
  scheduleId
537
513
  standardTime
538
- leadTime
539
- cycleTime
540
- tactTime
541
514
  updater {
542
515
  id
543
516
  name