@things-factory/dataset 8.0.0-beta.9 → 8.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. package/client/activities/activity-data-collect-edit.ts +105 -0
  2. package/client/activities/activity-data-collect-view.ts +91 -0
  3. package/client/activities/activity-data-review-edit.ts +133 -0
  4. package/client/activities/activity-data-review-view.ts +145 -0
  5. package/client/activities/activity-ooc-resolve-edit.ts +195 -0
  6. package/client/activities/activity-ooc-resolve-view.ts +143 -0
  7. package/client/activities/activity-ooc-review-edit.ts +173 -0
  8. package/client/activities/activity-ooc-review-view.ts +129 -0
  9. package/client/bootstrap.ts +35 -0
  10. package/client/components/data-entry-form.ts +109 -0
  11. package/client/index.ts +1 -0
  12. package/client/pages/data-archive/data-archive-list-page.ts +277 -0
  13. package/client/pages/data-archive/data-archive-request-popup.ts +177 -0
  14. package/client/pages/data-entry/data-entry-list-page.ts +464 -0
  15. package/client/pages/data-key-set/data-key-item-list.ts +183 -0
  16. package/client/pages/data-key-set/data-key-set-importer.ts +89 -0
  17. package/client/pages/data-key-set/data-key-set-list-page.ts +413 -0
  18. package/client/pages/data-ooc/data-ooc-list-page.ts +549 -0
  19. package/client/pages/data-ooc/data-ooc-page.ts +164 -0
  20. package/client/pages/data-ooc/data-ooc-view.ts +236 -0
  21. package/client/pages/data-ooc/data-oocs-page.ts +200 -0
  22. package/client/pages/data-report/data-report-embed-page.ts +108 -0
  23. package/client/pages/data-report/data-report-list-page.ts +454 -0
  24. package/client/pages/data-report/data-report-samples-page.ts +174 -0
  25. package/client/pages/data-report/jasper-report-oocs-page.ts +110 -0
  26. package/client/pages/data-report/jasper-report-samples-crosstab-page.ts +110 -0
  27. package/client/pages/data-report/jasper-report-samples-page.ts +110 -0
  28. package/client/pages/data-sample/data-sample-list-page.ts +442 -0
  29. package/client/pages/data-sample/data-sample-page.ts +55 -0
  30. package/client/pages/data-sample/data-sample-search-page.ts +424 -0
  31. package/client/pages/data-sample/data-sample-view.ts +292 -0
  32. package/client/pages/data-sample/data-samples-page.ts +249 -0
  33. package/client/pages/data-sensor/data-sensor-list-page.ts +456 -0
  34. package/client/pages/data-set/data-item-list.ts +304 -0
  35. package/client/pages/data-set/data-set-importer.ts +89 -0
  36. package/client/pages/data-set/data-set-list-page.ts +1078 -0
  37. package/client/pages/data-summary/data-summary-list-page.ts +363 -0
  38. package/client/pages/data-summary/data-summary-period-page.ts +439 -0
  39. package/client/pages/data-summary/data-summary-search-page.ts +426 -0
  40. package/client/pages/data-summary/data-summary-view.ts +133 -0
  41. package/client/route.ts +91 -0
  42. package/client/tsconfig.json +13 -0
  43. package/dist-client/activities/activity-data-review-edit.d.ts +1 -5
  44. package/dist-client/activities/activity-data-review-edit.js +5 -143
  45. package/dist-client/activities/activity-data-review-edit.js.map +1 -1
  46. package/dist-client/pages/data-entry/data-entry-list-page.js +2 -2
  47. package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -1
  48. package/dist-client/tsconfig.tsbuildinfo +1 -1
  49. package/dist-server/activities/activity-data-review.js +5 -18
  50. package/dist-server/activities/activity-data-review.js.map +1 -1
  51. package/dist-server/activities/activity-ooc-review.js +52 -13
  52. package/dist-server/activities/activity-ooc-review.js.map +1 -1
  53. package/dist-server/controllers/create-data-sample.js +94 -4
  54. package/dist-server/controllers/create-data-sample.js.map +1 -1
  55. package/dist-server/controllers/index.d.ts +0 -3
  56. package/dist-server/controllers/index.js +0 -3
  57. package/dist-server/controllers/index.js.map +1 -1
  58. package/dist-server/service/data-sample/data-sample-query.d.ts +1 -1
  59. package/dist-server/service/data-sample/data-sample-query.js +3 -3
  60. package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
  61. package/dist-server/service/index.d.ts +1 -1
  62. package/dist-server/tsconfig.tsbuildinfo +1 -1
  63. package/package.json +26 -26
  64. package/server/activities/activity-data-collect.ts +100 -0
  65. package/server/activities/activity-data-review.ts +82 -0
  66. package/server/activities/activity-ooc-resolve.ts +123 -0
  67. package/server/activities/activity-ooc-review.ts +144 -0
  68. package/server/activities/index.ts +11 -0
  69. package/server/controllers/create-data-sample.ts +426 -0
  70. package/server/controllers/data-use-case.ts +98 -0
  71. package/server/controllers/finalize-data-collection.ts +388 -0
  72. package/server/controllers/index.ts +3 -0
  73. package/server/controllers/issue-data-collection-task.ts +70 -0
  74. package/server/controllers/jasper-report.ts +186 -0
  75. package/server/controllers/query-data-summary-by-period.ts +178 -0
  76. package/server/controllers/shiny-report.ts +54 -0
  77. package/server/engine/index.ts +1 -0
  78. package/server/engine/task/create-data-sample.ts +100 -0
  79. package/server/engine/task/index.ts +2 -0
  80. package/server/engine/task/issue-collect-data.ts +45 -0
  81. package/server/index.ts +8 -0
  82. package/server/routes.ts +188 -0
  83. package/server/service/data-archive/data-archive-mutation.ts +273 -0
  84. package/server/service/data-archive/data-archive-query.ts +58 -0
  85. package/server/service/data-archive/data-archive-type.ts +48 -0
  86. package/server/service/data-archive/data-archive.ts +69 -0
  87. package/server/service/data-archive/index.ts +6 -0
  88. package/server/service/data-key-set/data-key-item-type.ts +31 -0
  89. package/server/service/data-key-set/data-key-set-mutation.ts +201 -0
  90. package/server/service/data-key-set/data-key-set-query.ts +68 -0
  91. package/server/service/data-key-set/data-key-set-type.ts +70 -0
  92. package/server/service/data-key-set/data-key-set.ts +86 -0
  93. package/server/service/data-key-set/index.ts +6 -0
  94. package/server/service/data-ooc/data-ooc-mutation.ts +154 -0
  95. package/server/service/data-ooc/data-ooc-query.ts +106 -0
  96. package/server/service/data-ooc/data-ooc-subscription.ts +48 -0
  97. package/server/service/data-ooc/data-ooc-type.ts +71 -0
  98. package/server/service/data-ooc/data-ooc.ts +259 -0
  99. package/server/service/data-ooc/index.ts +7 -0
  100. package/server/service/data-sample/data-sample-mutation.ts +18 -0
  101. package/server/service/data-sample/data-sample-query.ts +215 -0
  102. package/server/service/data-sample/data-sample-type.ts +47 -0
  103. package/server/service/data-sample/data-sample.ts +193 -0
  104. package/server/service/data-sample/index.ts +6 -0
  105. package/server/service/data-sensor/data-sensor-mutation.ts +116 -0
  106. package/server/service/data-sensor/data-sensor-query.ts +76 -0
  107. package/server/service/data-sensor/data-sensor-type.ts +104 -0
  108. package/server/service/data-sensor/data-sensor.ts +126 -0
  109. package/server/service/data-sensor/index.ts +6 -0
  110. package/server/service/data-set/data-item-type.ts +155 -0
  111. package/server/service/data-set/data-set-mutation.ts +552 -0
  112. package/server/service/data-set/data-set-query.ts +461 -0
  113. package/server/service/data-set/data-set-type.ts +204 -0
  114. package/server/service/data-set/data-set.ts +326 -0
  115. package/server/service/data-set/index.ts +6 -0
  116. package/server/service/data-set-history/data-set-history-query.ts +126 -0
  117. package/server/service/data-set-history/data-set-history-type.ts +12 -0
  118. package/server/service/data-set-history/data-set-history.ts +217 -0
  119. package/server/service/data-set-history/event-subscriber.ts +17 -0
  120. package/server/service/data-set-history/index.ts +7 -0
  121. package/server/service/data-spec/data-spec-manager.ts +21 -0
  122. package/server/service/data-spec/data-spec-query.ts +21 -0
  123. package/server/service/data-spec/data-spec.ts +45 -0
  124. package/server/service/data-spec/index.ts +5 -0
  125. package/server/service/data-summary/data-summary-mutation.ts +45 -0
  126. package/server/service/data-summary/data-summary-query.ts +179 -0
  127. package/server/service/data-summary/data-summary-type.ts +86 -0
  128. package/server/service/data-summary/data-summary.ts +170 -0
  129. package/server/service/data-summary/index.ts +7 -0
  130. package/server/service/index.ts +57 -0
  131. package/server/tsconfig.json +10 -0
  132. package/server/utils/config-resolver.ts +29 -0
  133. package/server/utils/index.ts +1 -0
  134. package/translations/en.json +0 -3
  135. package/translations/ja.json +0 -3
  136. package/translations/ko.json +0 -3
  137. package/translations/ms.json +0 -3
  138. package/translations/zh.json +0 -3
  139. package/dist-server/controllers/create-data-ooc.d.ts +0 -4
  140. package/dist-server/controllers/create-data-ooc.js +0 -65
  141. package/dist-server/controllers/create-data-ooc.js.map +0 -1
  142. package/dist-server/controllers/issue-ooc-resolve.d.ts +0 -3
  143. package/dist-server/controllers/issue-ooc-resolve.js +0 -49
  144. package/dist-server/controllers/issue-ooc-resolve.js.map +0 -1
  145. package/dist-server/controllers/issue-ooc-review.d.ts +0 -3
  146. package/dist-server/controllers/issue-ooc-review.js +0 -47
  147. package/dist-server/controllers/issue-ooc-review.js.map +0 -1
@@ -0,0 +1,549 @@
1
+ import '@material/web/icon/icon.js'
2
+ import '@operato/data-grist'
3
+ import '@operato/context/ox-context-page-toolbar.js'
4
+ import '@operato/input/ox-input-select-buttons.js'
5
+
6
+ import { p13n } from '@operato/p13n'
7
+
8
+ import './data-ooc-view.js'
9
+
10
+ import gql from 'graphql-tag'
11
+ import { css, html } from 'lit'
12
+ import { customElement, property, query, state } from 'lit/decorators.js'
13
+ import { connect } from 'pwa-helpers/connect-mixin'
14
+
15
+ import { GhostPrint } from '@operato/ghost-print'
16
+
17
+ function getOocStatus() {
18
+ return [
19
+ {
20
+ display: i18next.t('label.state-issued'),
21
+ value: 'ISSUED'
22
+ },
23
+ {
24
+ display: i18next.t('label.state-reviewed'),
25
+ value: 'REVIEWED'
26
+ },
27
+ {
28
+ display: i18next.t('label.state-corrected'),
29
+ value: 'CORRECTED'
30
+ }
31
+ ]
32
+ }
33
+
34
+ import { DataGrist, FetchOption, GristRecord } from '@operato/data-grist'
35
+ import { client } from '@operato/graphql'
36
+ import { i18next, localize } from '@operato/i18n'
37
+ import { openPopup } from '@operato/layout'
38
+ import { PageView, store } from '@operato/shell'
39
+ import { CommonGristStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
40
+ import { isMobileDevice, adjustFilters } from '@operato/utils'
41
+
42
+ @customElement('data-ooc-list-page')
43
+ export class DataOocListPage extends connect(store)(p13n(localize(i18next)(PageView))) {
44
+ static styles = [
45
+ ScrollbarStyles,
46
+ CommonGristStyles,
47
+ CommonHeaderStyles,
48
+ css`
49
+ :host {
50
+ display: flex;
51
+ flex-direction: column;
52
+
53
+ overflow: hidden;
54
+
55
+ --grid-header-padding: 2px 0 2px 9px;
56
+ }
57
+
58
+ ox-grist {
59
+ overflow-y: auto;
60
+ flex: 1;
61
+ }
62
+
63
+ .header {
64
+ grid-template-areas: 'filters actions';
65
+ }
66
+ `
67
+ ]
68
+
69
+ @state() private gristConfig: any
70
+ @state() private mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'
71
+ @state() private state?: string[]
72
+
73
+ @query('ox-grist') private grist!: DataGrist
74
+
75
+ get context() {
76
+ return {
77
+ title: i18next.t('title.data-ooc list'),
78
+ search: {
79
+ handler: (search: string) => {
80
+ this.grist.searchText = search
81
+ },
82
+ value: this.grist?.searchText || ''
83
+ },
84
+ filter: {
85
+ handler: () => {
86
+ this.grist.toggleHeadroom()
87
+ }
88
+ },
89
+ help: 'dataset/data-ooc',
90
+ actions: [
91
+ {
92
+ title: i18next.t('button.print'),
93
+ action: this.printOocs.bind(this),
94
+ icon: 'print'
95
+ }
96
+ ],
97
+ exportable: {
98
+ name: i18next.t('title.data-ooc list'),
99
+ data: this._exportableData.bind(this)
100
+ },
101
+ toolbar: false
102
+ }
103
+ }
104
+
105
+ render() {
106
+ const mode = this.mode || (isMobileDevice() ? 'LIST' : 'GRID')
107
+
108
+ return html`
109
+ <ox-grist
110
+ .mode=${mode}
111
+ .config=${this.gristConfig}
112
+ .fetchHandler=${this.fetchHandler.bind(this)}
113
+ .personalConfigProvider=${this.getPagePreferenceProvider('ox-grist')!}
114
+ >
115
+ <div slot="headroom" class="header">
116
+ <div class="filters">
117
+ <ox-input-select-buttons
118
+ .value=${this.state}
119
+ .options=${getOocStatus()}
120
+ @change=${(e: CustomEvent) => {
121
+ this.state = (e.currentTarget as any)?.value
122
+ this.grist.fetch()
123
+ }}
124
+ ></ox-input-select-buttons>
125
+ </div>
126
+
127
+ <ox-context-page-toolbar class="actions" .context=${this.context}></ox-context-page-toolbar>
128
+ </div>
129
+
130
+ <ox-grist-personalizer slot="setting"></ox-grist-personalizer>
131
+ </ox-grist>
132
+ `
133
+ }
134
+
135
+ async pageInitialized(lifecycle) {
136
+ this.gristConfig = {
137
+ list: {
138
+ fields: ['dataSet', 'data', 'correctiveAction', 'corrector', 'correctedAt', 'collectedAt', 'creator']
139
+ },
140
+ columns: [
141
+ { type: 'gutter', gutterName: 'sequence', fixed: true },
142
+ { type: 'gutter', gutterName: 'row-selector', multiple: true, fixed: true },
143
+ {
144
+ type: 'gutter',
145
+ gutterName: 'button',
146
+ fixed: true,
147
+ icon: 'assignment_turned_in',
148
+ iconOnly: false,
149
+ title: i18next.t('button.detail'),
150
+ width: 72
151
+ },
152
+ {
153
+ type: 'string',
154
+ name: 'name',
155
+ fixed: true,
156
+ label: true,
157
+ header: i18next.t('field.name'),
158
+ record: {
159
+ editable: false
160
+ },
161
+ filter: 'search',
162
+ sortable: true,
163
+ width: 120,
164
+ imex: true
165
+ },
166
+ {
167
+ type: 'string',
168
+ name: 'description',
169
+ label: true,
170
+ header: i18next.t('field.description'),
171
+ record: {
172
+ editable: false
173
+ },
174
+ filter: 'search',
175
+ width: 150,
176
+ imex: true
177
+ },
178
+ {
179
+ type: 'string',
180
+ name: 'history',
181
+ hidden: true,
182
+ imex: true
183
+ },
184
+ {
185
+ type: 'checkbox',
186
+ name: 'ooc',
187
+ header: i18next.t('field.ooc'),
188
+ record: {
189
+ editable: false
190
+ },
191
+ width: 30
192
+ },
193
+ {
194
+ type: 'checkbox',
195
+ name: 'oos',
196
+ header: i18next.t('field.oos'),
197
+ record: {
198
+ editable: false
199
+ },
200
+ width: 30
201
+ },
202
+ {
203
+ type: 'select',
204
+ name: 'state',
205
+ label: true,
206
+ header: i18next.t('field.status'),
207
+ record: {
208
+ editable: false,
209
+ options: [{ display: '', value: '' }, ...getOocStatus()]
210
+ },
211
+ width: 100,
212
+ filter: true,
213
+ imex: true
214
+ },
215
+ {
216
+ type: 'textarea',
217
+ name: 'correctiveInstruction',
218
+ label: true,
219
+ header: i18next.t('field.corrective-instruction'),
220
+ record: {
221
+ editable: false,
222
+ language: 'text'
223
+ },
224
+ width: 150,
225
+ imex: true
226
+ },
227
+ {
228
+ type: 'textarea',
229
+ name: 'correctiveAction',
230
+ label: true,
231
+ header: i18next.t('field.corrective-action'),
232
+ record: {
233
+ editable: false,
234
+ language: 'text'
235
+ },
236
+ width: 150,
237
+ imex: true
238
+ },
239
+ {
240
+ type: 'resource-object',
241
+ name: 'dataSet',
242
+ header: i18next.t('field.data-set'),
243
+ sortable: true,
244
+ width: 120,
245
+ imex: true
246
+ },
247
+ {
248
+ type: 'string',
249
+ name: 'key01',
250
+ header: {
251
+ renderer: i18next.t('field.key-01'),
252
+ group: i18next.t('field.key')
253
+ },
254
+ record: {
255
+ editable: false
256
+ },
257
+ sortable: true,
258
+ width: 120,
259
+ imex: true
260
+ },
261
+ {
262
+ type: 'string',
263
+ name: 'key02',
264
+ header: {
265
+ renderer: i18next.t('field.key-02'),
266
+ group: i18next.t('field.key')
267
+ },
268
+ record: {
269
+ editable: false
270
+ },
271
+ sortable: true,
272
+ width: 120,
273
+ imex: true
274
+ },
275
+ {
276
+ type: 'string',
277
+ name: 'key03',
278
+ header: {
279
+ renderer: i18next.t('field.key-03'),
280
+ group: i18next.t('field.key')
281
+ },
282
+ record: {
283
+ editable: false
284
+ },
285
+ sortable: true,
286
+ width: 120,
287
+ imex: true
288
+ },
289
+ {
290
+ type: 'string',
291
+ name: 'key04',
292
+ header: {
293
+ renderer: i18next.t('field.key-04'),
294
+ group: i18next.t('field.key')
295
+ },
296
+ record: {
297
+ editable: false
298
+ },
299
+ sortable: true,
300
+ width: 120,
301
+ imex: true
302
+ },
303
+ {
304
+ type: 'string',
305
+ name: 'key05',
306
+ header: {
307
+ renderer: i18next.t('field.key-05'),
308
+ group: i18next.t('field.key')
309
+ },
310
+ record: {
311
+ editable: false
312
+ },
313
+ sortable: true,
314
+ width: 120,
315
+ imex: true
316
+ },
317
+ {
318
+ type: 'json5',
319
+ name: 'partitionKeys',
320
+ header: i18next.t('field.partition-keys'),
321
+ record: {
322
+ editable: false
323
+ },
324
+ width: 200,
325
+ imex: true
326
+ },
327
+ {
328
+ type: 'json5',
329
+ name: 'data',
330
+ header: i18next.t('field.data'),
331
+ record: {
332
+ editable: false
333
+ },
334
+ width: 200,
335
+ imex: true
336
+ },
337
+ {
338
+ type: 'text',
339
+ name: 'rawData',
340
+ header: i18next.t('field.raw-data'),
341
+ record: {
342
+ editable: false
343
+ },
344
+ width: 200,
345
+ imex: true
346
+ },
347
+ {
348
+ type: 'string',
349
+ name: 'workDate',
350
+ header: i18next.t('field.work-date'),
351
+ sortable: true,
352
+ width: 80,
353
+ imex: true
354
+ },
355
+ {
356
+ type: 'string',
357
+ name: 'workShift',
358
+ header: i18next.t('field.work-shift'),
359
+ sortable: true,
360
+ width: 40,
361
+ imex: true
362
+ },
363
+ {
364
+ type: 'datetime',
365
+ name: 'collectedAt',
366
+ header: i18next.t('field.collected-at'),
367
+ sortable: true,
368
+ width: 180,
369
+ imex: true
370
+ },
371
+ {
372
+ type: 'resource-object',
373
+ name: 'updater',
374
+ header: i18next.t('field.updater'),
375
+ sortable: true,
376
+ width: 120,
377
+ imex: true
378
+ },
379
+ {
380
+ type: 'datetime',
381
+ name: 'updatedAt',
382
+ header: i18next.t('field.updated_at'),
383
+ sortable: true,
384
+ width: 180,
385
+ imex: true
386
+ }
387
+ ],
388
+ rows: {
389
+ appendable: false,
390
+ selectable: {
391
+ multiple: true
392
+ },
393
+ handlers: {
394
+ click: (columns, data, column, record, rowIndex) => {
395
+ const popup = openPopup(
396
+ html` <data-ooc-view data-ooc-id=${record.id} style="background-color: white;"></data-ooc-view> `,
397
+ {
398
+ backdrop: true,
399
+ size: 'large',
400
+ title: i18next.t('title.data-ooc view')
401
+ }
402
+ )
403
+ popup.onclosed = () => {
404
+ // this.grist.fetch()
405
+ }
406
+ }
407
+ }
408
+ },
409
+ sorters: [
410
+ {
411
+ name: 'collectedAt',
412
+ desc: true
413
+ }
414
+ ]
415
+ }
416
+ }
417
+
418
+ async fetchHandler({ page, limit, sortings = [], filters = [] }: FetchOption) {
419
+ if (this.state) {
420
+ filters = adjustFilters(filters, [{ name: 'state', operator: 'eq', value: this.state }])
421
+ }
422
+
423
+ const response = await client.query({
424
+ query: gql`
425
+ query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
426
+ responses: dataOocs(filters: $filters, pagination: $pagination, sortings: $sortings) {
427
+ items {
428
+ id
429
+ name
430
+ description
431
+ useCase
432
+ dataSet {
433
+ id
434
+ name
435
+ }
436
+ key01
437
+ key02
438
+ key03
439
+ key04
440
+ key05
441
+ partitionKeys
442
+ dataItems {
443
+ name
444
+ description
445
+ active
446
+ hidden
447
+ tag
448
+ group
449
+ type
450
+ unit
451
+ options
452
+ quota
453
+ spec
454
+ stat
455
+ }
456
+ data
457
+ rawData
458
+ judgment
459
+ ooc
460
+ oos
461
+ state
462
+ history
463
+ workDate
464
+ workShift
465
+ correctiveInstruction
466
+ correctiveAction
467
+ reviewedAt
468
+ reviewer {
469
+ id
470
+ name
471
+ }
472
+ correctedAt
473
+ corrector {
474
+ id
475
+ name
476
+ }
477
+ updater {
478
+ id
479
+ name
480
+ }
481
+ updatedAt
482
+ collectedAt
483
+ }
484
+ total
485
+ }
486
+ }
487
+ `,
488
+ variables: {
489
+ filters,
490
+ pagination: { page, limit },
491
+ sortings
492
+ }
493
+ })
494
+
495
+ return {
496
+ total: response.data.responses.total || 0,
497
+ records: response.data.responses.items || []
498
+ }
499
+ }
500
+
501
+ _exportableData() {
502
+ let records = [] as GristRecord
503
+ if (this.grist.selected && this.grist.selected.length > 0) {
504
+ records = this.grist.selected
505
+ } else {
506
+ records = this.grist.data.records
507
+ }
508
+
509
+ var headerSetting = this.grist.compiledConfig.columns
510
+ .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
511
+ .map(column => {
512
+ return column.imex === true
513
+ ? {
514
+ header: column.header.renderer(column),
515
+ key: column.name,
516
+ width: column.width,
517
+ type: column.type
518
+ }
519
+ : column.imex
520
+ })
521
+
522
+ var data = records.map(item => {
523
+ return {
524
+ id: item.id,
525
+ ...this.gristConfig.columns
526
+ .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
527
+ .reduce((record, column) => {
528
+ const key = column.imex === true ? column.name : column.imex.key
529
+ record[key] = key
530
+ .split('.')
531
+ .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
532
+ return record
533
+ }, {})
534
+ }
535
+ })
536
+
537
+ return { header: headerSetting, data: data }
538
+ }
539
+
540
+ printOocs() {
541
+ const selected = this.grist.selected
542
+ const ids = selected.map(record => record.id).join('|')
543
+
544
+ GhostPrint.print({
545
+ src: `./data-oocs?ids=${ids}`
546
+ // pending: 200 * selected.length
547
+ })
548
+ }
549
+ }
@@ -0,0 +1,164 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ import { PropertyValues, html, css } from 'lit'
4
+ import { customElement, property } from 'lit/decorators.js'
5
+ import { PageView } from '@operato/shell'
6
+ import { i18next, localize } from '@operato/i18n'
7
+ import { client } from '@operato/graphql'
8
+
9
+ import './data-ooc-view.js'
10
+
11
+ @customElement('data-ooc-page')
12
+ export class DataOocViewPage extends localize(i18next)(PageView) {
13
+ static styles = [
14
+ css`
15
+ :host {
16
+ display: flex;
17
+ }
18
+
19
+ data-ooc-view {
20
+ flex: 1;
21
+ }
22
+
23
+ @media print {
24
+ :host {
25
+ display: block;
26
+ overflow: visible;
27
+ }
28
+ }
29
+ `
30
+ ]
31
+
32
+ @property({ type: Object }) dataOoc?: any
33
+
34
+ get context() {
35
+ return {
36
+ title: i18next.t('title.data-ooc view'),
37
+ help: 'dataset/data-ooc',
38
+ actions: []
39
+ }
40
+ }
41
+
42
+ render() {
43
+ return html` <data-ooc-view .dataOoc=${this.dataOoc}></data-ooc-view> `
44
+ }
45
+
46
+ updated(changes: PropertyValues<this>) {}
47
+
48
+ pageUpdated(changes: any, lifecycle: any, before: any) {
49
+ if (this.active) {
50
+ /*
51
+ * this page is activated
52
+ */
53
+ this.fetchOoc(lifecycle.resourceId)
54
+ } else {
55
+ /* this page is deactivated */
56
+ }
57
+ }
58
+
59
+ async fetchOoc(id: string) {
60
+ const response = await client.query({
61
+ query: gql`
62
+ query ($id: String!) {
63
+ dataOoc(id: $id) {
64
+ id
65
+ name
66
+ description
67
+ useCase
68
+ dataSet {
69
+ id
70
+ name
71
+ }
72
+ key01
73
+ key02
74
+ key03
75
+ key04
76
+ key05
77
+ partitionKeys
78
+ dataItems {
79
+ name
80
+ description
81
+ active
82
+ hidden
83
+ tag
84
+ group
85
+ type
86
+ unit
87
+ options
88
+ quota
89
+ spec
90
+ stat
91
+ }
92
+ data
93
+ rawData
94
+ judgment
95
+ ooc
96
+ oos
97
+ state
98
+ history
99
+ workDate
100
+ workShift
101
+ correctiveInstruction
102
+ correctiveAction
103
+ reviewedAt
104
+ reviewer {
105
+ id
106
+ name
107
+ }
108
+ correctedAt
109
+ corrector {
110
+ id
111
+ name
112
+ }
113
+ updater {
114
+ id
115
+ name
116
+ }
117
+ updatedAt
118
+ collectedAt
119
+ reviewActivityInstance {
120
+ ...ActivityInstanceFragment
121
+ }
122
+ resolveActivityInstance {
123
+ ...ActivityInstanceFragment
124
+ }
125
+ }
126
+ }
127
+
128
+ fragment ActivityInstanceFragment on ActivityInstance {
129
+ activityThreads {
130
+ assignee {
131
+ name
132
+ }
133
+ output
134
+ activityApprovals {
135
+ judgment
136
+ approver {
137
+ name
138
+ }
139
+ comment
140
+ createdAt
141
+ updatedAt
142
+ terminatedAt
143
+ }
144
+ activityThreadHistories {
145
+ transaction
146
+ reason
147
+ updater {
148
+ name
149
+ }
150
+ updatedAt
151
+ state
152
+ output
153
+ }
154
+ }
155
+ }
156
+ `,
157
+ variables: {
158
+ id
159
+ }
160
+ })
161
+
162
+ this.dataOoc = response.data.dataOoc
163
+ }
164
+ }