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

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/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 +278 -0
  4. package/client/activities/activity-data-review-view.ts +226 -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.js +19 -10
  44. package/dist-client/activities/activity-data-review-edit.js.map +1 -1
  45. package/dist-client/activities/activity-data-review-view.js +80 -0
  46. package/dist-client/activities/activity-data-review-view.js.map +1 -1
  47. package/dist-client/pages/data-entry/data-entry-list-page.js +2 -2
  48. package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -1
  49. package/dist-client/tsconfig.tsbuildinfo +1 -1
  50. package/dist-server/controllers/create-data-ooc.js +2 -0
  51. package/dist-server/controllers/create-data-ooc.js.map +1 -1
  52. package/dist-server/service/data-archive/index.d.ts +1 -1
  53. package/dist-server/service/data-ooc/index.d.ts +1 -1
  54. package/dist-server/service/data-sample/data-sample-query.d.ts +1 -1
  55. package/dist-server/service/data-sample/data-sample-query.js +3 -3
  56. package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
  57. package/dist-server/service/data-sample/index.d.ts +1 -1
  58. package/dist-server/service/data-set/index.d.ts +1 -1
  59. package/dist-server/service/index.d.ts +2 -2
  60. package/dist-server/tsconfig.tsbuildinfo +1 -1
  61. package/package.json +26 -26
  62. package/server/activities/activity-data-collect.ts +100 -0
  63. package/server/activities/activity-data-review.ts +109 -0
  64. package/server/activities/activity-ooc-resolve.ts +123 -0
  65. package/server/activities/activity-ooc-review.ts +95 -0
  66. package/server/activities/index.ts +11 -0
  67. package/server/controllers/create-data-ooc.ts +80 -0
  68. package/server/controllers/create-data-sample.ts +323 -0
  69. package/server/controllers/data-use-case.ts +98 -0
  70. package/server/controllers/finalize-data-collection.ts +388 -0
  71. package/server/controllers/index.ts +6 -0
  72. package/server/controllers/issue-data-collection-task.ts +70 -0
  73. package/server/controllers/issue-ooc-resolve.ts +58 -0
  74. package/server/controllers/issue-ooc-review.ts +52 -0
  75. package/server/controllers/jasper-report.ts +186 -0
  76. package/server/controllers/query-data-summary-by-period.ts +178 -0
  77. package/server/controllers/shiny-report.ts +54 -0
  78. package/server/engine/index.ts +1 -0
  79. package/server/engine/task/create-data-sample.ts +100 -0
  80. package/server/engine/task/index.ts +2 -0
  81. package/server/engine/task/issue-collect-data.ts +45 -0
  82. package/server/index.ts +8 -0
  83. package/server/routes.ts +188 -0
  84. package/server/service/data-archive/data-archive-mutation.ts +273 -0
  85. package/server/service/data-archive/data-archive-query.ts +58 -0
  86. package/server/service/data-archive/data-archive-type.ts +48 -0
  87. package/server/service/data-archive/data-archive.ts +69 -0
  88. package/server/service/data-archive/index.ts +6 -0
  89. package/server/service/data-key-set/data-key-item-type.ts +31 -0
  90. package/server/service/data-key-set/data-key-set-mutation.ts +201 -0
  91. package/server/service/data-key-set/data-key-set-query.ts +68 -0
  92. package/server/service/data-key-set/data-key-set-type.ts +70 -0
  93. package/server/service/data-key-set/data-key-set.ts +86 -0
  94. package/server/service/data-key-set/index.ts +6 -0
  95. package/server/service/data-ooc/data-ooc-mutation.ts +154 -0
  96. package/server/service/data-ooc/data-ooc-query.ts +106 -0
  97. package/server/service/data-ooc/data-ooc-subscription.ts +48 -0
  98. package/server/service/data-ooc/data-ooc-type.ts +71 -0
  99. package/server/service/data-ooc/data-ooc.ts +259 -0
  100. package/server/service/data-ooc/index.ts +7 -0
  101. package/server/service/data-sample/data-sample-mutation.ts +18 -0
  102. package/server/service/data-sample/data-sample-query.ts +215 -0
  103. package/server/service/data-sample/data-sample-type.ts +47 -0
  104. package/server/service/data-sample/data-sample.ts +193 -0
  105. package/server/service/data-sample/index.ts +6 -0
  106. package/server/service/data-sensor/data-sensor-mutation.ts +116 -0
  107. package/server/service/data-sensor/data-sensor-query.ts +76 -0
  108. package/server/service/data-sensor/data-sensor-type.ts +104 -0
  109. package/server/service/data-sensor/data-sensor.ts +126 -0
  110. package/server/service/data-sensor/index.ts +6 -0
  111. package/server/service/data-set/data-item-type.ts +155 -0
  112. package/server/service/data-set/data-set-mutation.ts +552 -0
  113. package/server/service/data-set/data-set-query.ts +461 -0
  114. package/server/service/data-set/data-set-type.ts +204 -0
  115. package/server/service/data-set/data-set.ts +326 -0
  116. package/server/service/data-set/index.ts +6 -0
  117. package/server/service/data-set-history/data-set-history-query.ts +126 -0
  118. package/server/service/data-set-history/data-set-history-type.ts +12 -0
  119. package/server/service/data-set-history/data-set-history.ts +217 -0
  120. package/server/service/data-set-history/event-subscriber.ts +17 -0
  121. package/server/service/data-set-history/index.ts +7 -0
  122. package/server/service/data-spec/data-spec-manager.ts +21 -0
  123. package/server/service/data-spec/data-spec-query.ts +21 -0
  124. package/server/service/data-spec/data-spec.ts +45 -0
  125. package/server/service/data-spec/index.ts +5 -0
  126. package/server/service/data-summary/data-summary-mutation.ts +45 -0
  127. package/server/service/data-summary/data-summary-query.ts +179 -0
  128. package/server/service/data-summary/data-summary-type.ts +86 -0
  129. package/server/service/data-summary/data-summary.ts +170 -0
  130. package/server/service/data-summary/index.ts +7 -0
  131. package/server/service/index.ts +57 -0
  132. package/server/tsconfig.json +10 -0
  133. package/server/utils/config-resolver.ts +29 -0
  134. package/server/utils/index.ts +1 -0
@@ -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
+ }