@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.
- package/client/activity-summary-generator.ts +5 -5
- package/client/bootstrap.ts +3 -6
- package/client/grist-editor/grist-editor-activity-search-key.ts +3 -2
- package/client/grist-editor/grist-renderer-activity-search-key.ts +25 -0
- package/client/pages/activity/activity-list-page.ts +25 -52
- package/client/pages/activity/activity-page.ts +1 -1
- package/client/pages/activity/activity-partial-view.ts +0 -3
- package/client/pages/activity/starter-list-page.ts +0 -1
- package/client/pages/activity-instance/activity-instance-list-page.ts +8 -3
- package/client/pages/activity-instance/activity-instance-page.ts +2 -2
- package/client/pages/activity-thread/activity-thread-page.ts +4 -11
- package/client/pages/installable-activity/installable-activity-list-page.ts +19 -26
- package/client/pages/todo/{approval-waiting-list-page.ts → approval-pending-list-page.ts} +14 -23
- package/client/pages/todo/done-list-page.ts +23 -22
- package/client/pages/todo/draft-list-page.ts +16 -14
- package/client/pages/todo/pickable-list-page.ts +24 -26
- package/client/pages/todo/todo-list-page.ts +34 -19
- package/client/route.ts +2 -6
- package/client/types/activity-instance.ts +1 -1
- package/client/types/activity.ts +0 -6
- package/dist-client/activity-summary-generator.js +5 -5
- package/dist-client/activity-summary-generator.js.map +1 -1
- package/dist-client/bootstrap.js +3 -2
- package/dist-client/bootstrap.js.map +1 -1
- package/dist-client/grist-editor/grist-editor-activity-search-key.js +3 -2
- package/dist-client/grist-editor/grist-editor-activity-search-key.js.map +1 -1
- package/dist-client/grist-editor/grist-renderer-activity-search-key.d.ts +3 -0
- package/dist-client/grist-editor/grist-renderer-activity-search-key.js +22 -0
- package/dist-client/grist-editor/grist-renderer-activity-search-key.js.map +1 -0
- package/dist-client/pages/activity/activity-list-page.js +25 -52
- package/dist-client/pages/activity/activity-list-page.js.map +1 -1
- package/dist-client/pages/activity/activity-page.d.ts +1 -1
- package/dist-client/pages/activity/activity-page.js +1 -1
- package/dist-client/pages/activity/activity-page.js.map +1 -1
- package/dist-client/pages/activity/activity-partial-view.js +1 -1
- package/dist-client/pages/activity/activity-partial-view.js.map +1 -1
- package/dist-client/pages/activity/starter-list-page.js +0 -1
- package/dist-client/pages/activity/starter-list-page.js.map +1 -1
- package/dist-client/pages/activity-instance/activity-instance-list-page.js +8 -3
- package/dist-client/pages/activity-instance/activity-instance-list-page.js.map +1 -1
- package/dist-client/pages/activity-instance/activity-instance-page.d.ts +1 -1
- package/dist-client/pages/activity-instance/activity-instance-page.js +2 -2
- package/dist-client/pages/activity-instance/activity-instance-page.js.map +1 -1
- package/dist-client/pages/activity-thread/activity-thread-page.js +4 -6
- package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
- package/dist-client/pages/installable-activity/installable-activity-list-page.d.ts +0 -1
- package/dist-client/pages/installable-activity/installable-activity-list-page.js +17 -24
- package/dist-client/pages/installable-activity/installable-activity-list-page.js.map +1 -1
- package/dist-client/pages/todo/approval-pending-list-page.d.ts +40 -0
- package/dist-client/pages/todo/approval-pending-list-page.js +360 -0
- package/dist-client/pages/todo/approval-pending-list-page.js.map +1 -0
- package/dist-client/pages/todo/approval-waiting-list-page.js +9 -15
- package/dist-client/pages/todo/approval-waiting-list-page.js.map +1 -1
- package/dist-client/pages/todo/assigned-list-page.js +0 -1
- package/dist-client/pages/todo/assigned-list-page.js.map +1 -1
- package/dist-client/pages/todo/done-list-page.js +22 -21
- package/dist-client/pages/todo/done-list-page.js.map +1 -1
- package/dist-client/pages/todo/draft-list-page.js +16 -15
- package/dist-client/pages/todo/draft-list-page.js.map +1 -1
- package/dist-client/pages/todo/pickable-list-page.js +26 -31
- package/dist-client/pages/todo/pickable-list-page.js.map +1 -1
- package/dist-client/pages/todo/todo-list-page.js +34 -20
- package/dist-client/pages/todo/todo-list-page.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +2 -5
- package/dist-client/route.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/types/activity-instance.d.ts +1 -1
- package/dist-client/types/activity-instance.js +1 -1
- package/dist-client/types/activity-instance.js.map +1 -1
- package/dist-client/types/activity.d.ts +0 -3
- package/dist-client/types/activity.js.map +1 -1
- package/dist-server/controllers/activity-instance/end.js +3 -0
- package/dist-server/controllers/activity-instance/end.js.map +1 -1
- package/dist-server/controllers/activity-instance/post.js +2 -1
- package/dist-server/controllers/activity-instance/post.js.map +1 -1
- package/dist-server/controllers/activity-instance/terminate.js +3 -0
- package/dist-server/controllers/activity-instance/terminate.js.map +1 -1
- package/dist-server/controllers/activity-thread/abort.js +5 -2
- package/dist-server/controllers/activity-thread/abort.js.map +1 -1
- package/dist-server/controllers/activity-thread/adjust.js +8 -0
- package/dist-server/controllers/activity-thread/adjust.js.map +1 -1
- package/dist-server/controllers/activity-thread/end.js +5 -2
- package/dist-server/controllers/activity-thread/end.js.map +1 -1
- package/dist-server/controllers/activity-thread/save.js +7 -4
- package/dist-server/controllers/activity-thread/save.js.map +1 -1
- package/dist-server/controllers/activity-thread/submit.js +6 -3
- package/dist-server/controllers/activity-thread/submit.js.map +1 -1
- package/dist-server/controllers/common.js +1 -1
- package/dist-server/controllers/common.js.map +1 -1
- package/dist-server/service/activity/activity-history.js +0 -15
- package/dist-server/service/activity/activity-history.js.map +1 -1
- package/dist-server/service/activity/activity-type.js +0 -24
- package/dist-server/service/activity/activity-type.js.map +1 -1
- package/dist-server/service/activity/activity.js +7 -22
- package/dist-server/service/activity/activity.js.map +1 -1
- package/dist-server/service/activity-approval/activity-approval-query.js +2 -2
- package/dist-server/service/activity-approval/activity-approval-query.js.map +1 -1
- package/dist-server/service/activity-instance/activity-instance-query.js +1 -1
- package/dist-server/service/activity-instance/activity-instance-query.js.map +1 -1
- package/dist-server/service/activity-instance/activity-instance.js +1 -1
- package/dist-server/service/activity-instance/activity-instance.js.map +1 -1
- package/dist-server/service/activity-summary/activity-summary-query.js +3 -3
- package/dist-server/service/activity-summary/activity-summary-query.js.map +1 -1
- package/dist-server/service/activity-summary/activity-summary.js +1 -1
- package/dist-server/service/activity-summary/activity-summary.js.map +1 -1
- package/dist-server/service/installable-activity/installable-activity.js +7 -0
- package/dist-server/service/installable-activity/installable-activity.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/server/controllers/activity-instance/end.ts +4 -0
- package/server/controllers/activity-instance/post.ts +2 -0
- package/server/controllers/activity-instance/terminate.ts +4 -0
- package/server/controllers/activity-thread/abort.ts +6 -2
- package/server/controllers/activity-thread/adjust.ts +12 -0
- package/server/controllers/activity-thread/end.ts +6 -2
- package/server/controllers/activity-thread/save.ts +9 -4
- package/server/controllers/activity-thread/submit.ts +7 -3
- package/server/controllers/common.ts +1 -1
- package/server/service/activity/activity-history.ts +0 -12
- package/server/service/activity/activity-type.ts +0 -18
- package/server/service/activity/activity.ts +7 -19
- package/server/service/activity-approval/activity-approval-query.ts +1 -1
- package/server/service/activity-instance/activity-instance-query.ts +1 -1
- package/server/service/activity-instance/activity-instance.ts +1 -1
- package/server/service/activity-summary/activity-summary-query.ts +2 -2
- package/server/service/activity-summary/activity-summary.ts +1 -1
- package/server/service/installable-activity/installable-activity.ts +3 -0
- package/things-factory.config.js +1 -2
- package/translations/en.json +25 -3
- package/translations/ko.json +25 -3
- package/translations/ms.json +67 -45
- package/translations/zh.json +66 -44
- 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: '
|
|
181
|
+
type: 'number',
|
|
182
182
|
name: 'priority',
|
|
183
183
|
header: i18next.t('field.priority'),
|
|
184
184
|
record: {
|
|
185
185
|
editable: false,
|
|
186
|
-
|
|
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: '
|
|
199
|
-
{ display: '
|
|
200
|
-
{ display: '
|
|
201
|
-
{ display: '
|
|
202
|
-
{ display: '
|
|
203
|
-
{ display: '
|
|
204
|
-
{ display: '
|
|
205
|
-
{ display: '
|
|
206
|
-
{ display: '
|
|
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
|
-
|
|
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=${
|
|
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: '
|
|
119
|
-
icon: '
|
|
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-
|
|
91
|
-
value: '
|
|
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: '
|
|
173
|
+
type: 'number',
|
|
171
174
|
name: 'priority',
|
|
172
175
|
header: i18next.t('field.priority'),
|
|
173
176
|
record: {
|
|
174
177
|
editable: false,
|
|
175
|
-
|
|
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: '
|
|
188
|
-
{ display: '
|
|
189
|
-
{ display: '
|
|
190
|
-
{ display: '
|
|
191
|
-
{ display: '
|
|
192
|
-
{ display: '
|
|
193
|
-
{ display: '
|
|
194
|
-
{ display: '
|
|
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
|
-
|
|
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('
|
|
287
|
-
filters = adjustFilters(filters, [{ name: 'state', operator: 'eq', value: ActivityThreadStatus.
|
|
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-
|
|
24
|
-
import('./pages/todo/approval-
|
|
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
|
-
|
|
10
|
+
PendingAssignment = 'pending-assignment',
|
|
11
11
|
Assigned = 'assigned',
|
|
12
12
|
Started = 'started',
|
|
13
13
|
Pending = 'pending',
|
package/client/types/activity.ts
CHANGED
|
@@ -57,7 +57,7 @@ async function subscribeActivityApproval() {
|
|
|
57
57
|
var summary = {};
|
|
58
58
|
var generatorLocks = {
|
|
59
59
|
numberOfToDos: new AsyncLock(true),
|
|
60
|
-
|
|
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
|
-
|
|
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,
|
|
79
|
+
const { numberOfToDos, numberOfApprovalPendings, numberOfPicks, numberOfDrafts } = response.data.activitySummary;
|
|
80
80
|
summary['numberOfToDos'] = numberOfToDos;
|
|
81
|
-
summary['
|
|
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['
|
|
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
|
|
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"]}
|
package/dist-client/bootstrap.js
CHANGED
|
@@ -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 {
|
|
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',
|
|
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,
|
|
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
|
-
|
|
14
|
-
|
|
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,
|
|
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,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: '
|
|
20
|
-
{ display: '
|
|
21
|
-
{ display: '
|
|
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:
|
|
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
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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
|