@things-factory/dataset 5.0.0-alpha.2 → 5.0.0-alpha.22

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 (96) hide show
  1. package/README.md +13 -0
  2. package/assets/data-samples.jpg +0 -0
  3. package/client/bootstrap.js +16 -1
  4. package/client/pages/data-entry-form.js +84 -0
  5. package/client/pages/data-item-list.js +58 -16
  6. package/client/pages/data-ooc-view.js +182 -0
  7. package/client/pages/data-ooc.js +487 -0
  8. package/client/pages/data-sample-view.js +97 -0
  9. package/client/pages/data-sample.js +149 -56
  10. package/client/pages/data-sensor.js +8 -18
  11. package/client/pages/data-set.js +200 -75
  12. package/client/route.js +4 -0
  13. package/dist-server/controllers/create-data-sample.js +124 -0
  14. package/dist-server/controllers/create-data-sample.js.map +1 -0
  15. package/dist-server/controllers/data-use-case.js +57 -0
  16. package/dist-server/controllers/data-use-case.js.map +1 -0
  17. package/dist-server/controllers/index.js +17 -0
  18. package/dist-server/controllers/index.js.map +1 -1
  19. package/dist-server/index.js +2 -0
  20. package/dist-server/index.js.map +1 -1
  21. package/dist-server/routes.js +9 -24
  22. package/dist-server/routes.js.map +1 -1
  23. package/dist-server/service/data-item/data-item-mutation.js +5 -1
  24. package/dist-server/service/data-item/data-item-mutation.js.map +1 -1
  25. package/dist-server/service/data-item/data-item-type.js +14 -5
  26. package/dist-server/service/data-item/data-item-type.js.map +1 -1
  27. package/dist-server/service/data-item/data-item.js +20 -7
  28. package/dist-server/service/data-item/data-item.js.map +1 -1
  29. package/dist-server/service/data-ooc/data-ooc-mutation.js +92 -0
  30. package/dist-server/service/data-ooc/data-ooc-mutation.js.map +1 -0
  31. package/dist-server/service/data-ooc/data-ooc-query.js +115 -0
  32. package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -0
  33. package/dist-server/service/data-ooc/data-ooc-subscription.js +65 -0
  34. package/dist-server/service/data-ooc/data-ooc-subscription.js.map +1 -0
  35. package/dist-server/service/data-ooc/data-ooc-type.js +107 -0
  36. package/dist-server/service/data-ooc/data-ooc-type.js.map +1 -0
  37. package/dist-server/service/data-ooc/data-ooc.js +237 -0
  38. package/dist-server/service/data-ooc/data-ooc.js.map +1 -0
  39. package/dist-server/service/data-ooc/index.js +10 -0
  40. package/dist-server/service/data-ooc/index.js.map +1 -0
  41. package/dist-server/service/data-sample/data-sample-mutation.js +3 -105
  42. package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -1
  43. package/dist-server/service/data-sample/data-sample-type.js +13 -42
  44. package/dist-server/service/data-sample/data-sample-type.js.map +1 -1
  45. package/dist-server/service/data-sample/data-sample.js +40 -9
  46. package/dist-server/service/data-sample/data-sample.js.map +1 -1
  47. package/dist-server/service/data-set/data-set-mutation.js +1 -2
  48. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  49. package/dist-server/service/data-set/data-set-query.js +12 -0
  50. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  51. package/dist-server/service/data-set/data-set-type.js +19 -2
  52. package/dist-server/service/data-set/data-set-type.js.map +1 -1
  53. package/dist-server/service/data-set/data-set.js +22 -10
  54. package/dist-server/service/data-set/data-set.js.map +1 -1
  55. package/dist-server/service/data-spec/data-spec-manager.js +20 -0
  56. package/dist-server/service/data-spec/data-spec-manager.js.map +1 -0
  57. package/dist-server/service/data-spec/data-spec-query.js +48 -0
  58. package/dist-server/service/data-spec/data-spec-query.js.map +1 -0
  59. package/dist-server/service/data-spec/data-spec.js +78 -0
  60. package/dist-server/service/data-spec/data-spec.js.map +1 -0
  61. package/dist-server/service/data-spec/index.js +8 -0
  62. package/dist-server/service/data-spec/index.js.map +1 -0
  63. package/dist-server/service/index.js +12 -4
  64. package/dist-server/service/index.js.map +1 -1
  65. package/package.json +15 -12
  66. package/server/controllers/create-data-sample.ts +166 -0
  67. package/server/controllers/data-use-case.ts +85 -0
  68. package/server/controllers/index.ts +1 -0
  69. package/server/index.ts +3 -0
  70. package/server/routes.ts +17 -31
  71. package/server/service/data-item/data-item-mutation.ts +6 -1
  72. package/server/service/data-item/data-item-type.ts +11 -7
  73. package/server/service/data-item/data-item.ts +16 -6
  74. package/server/service/data-ooc/data-ooc-mutation.ts +150 -0
  75. package/server/service/data-ooc/data-ooc-query.ts +63 -0
  76. package/server/service/data-ooc/data-ooc-subscription.ts +51 -0
  77. package/server/service/data-ooc/data-ooc-type.ts +68 -0
  78. package/server/service/data-ooc/data-ooc.ts +204 -0
  79. package/server/service/data-ooc/index.ts +7 -0
  80. package/server/service/data-sample/data-sample-mutation.ts +6 -128
  81. package/server/service/data-sample/data-sample-type.ts +8 -29
  82. package/server/service/data-sample/data-sample.ts +36 -6
  83. package/server/service/data-set/data-set-mutation.ts +1 -4
  84. package/server/service/data-set/data-set-query.ts +8 -1
  85. package/server/service/data-set/data-set-type.ts +17 -6
  86. package/server/service/data-set/data-set.ts +18 -8
  87. package/server/service/data-spec/data-spec-manager.ts +21 -0
  88. package/server/service/data-spec/data-spec-query.ts +21 -0
  89. package/server/service/data-spec/data-spec.ts +44 -0
  90. package/server/service/data-spec/index.ts +5 -0
  91. package/server/service/index.ts +16 -8
  92. package/things-factory.config.js +4 -0
  93. package/translations/en.json +21 -0
  94. package/translations/ko.json +22 -1
  95. package/translations/ms.json +21 -0
  96. package/translations/zh.json +21 -0
@@ -1,4 +1,5 @@
1
1
  import '@operato/data-grist'
2
+ import './data-sample-view.js'
2
3
 
3
4
  import gql from 'graphql-tag'
4
5
  import { css, html } from 'lit'
@@ -6,9 +7,9 @@ import { connect } from 'pwa-helpers/connect-mixin'
6
7
 
7
8
  import { client } from '@operato/graphql'
8
9
  import { i18next, localize } from '@operato/i18n'
9
- import { notify } from '@operato/layout'
10
+ import { openPopup } from '@operato/layout'
10
11
  import { PageView, store } from '@operato/shell'
11
- import { CommonButtonStyles, ScrollbarStyles } from '@operato/styles'
12
+ import { ScrollbarStyles } from '@operato/styles'
12
13
  import { isMobileDevice } from '@operato/utils'
13
14
 
14
15
  export class DataSample extends connect(store)(localize(i18next)(PageView)) {
@@ -54,13 +55,11 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
54
55
  return {
55
56
  title: i18next.t('title.data-sample list'),
56
57
  help: 'integration/ui/data-sample',
57
- actions: [
58
- {
59
- title: i18next.t('button.delete'),
60
- action: this._deleteDataSample.bind(this),
61
- ...CommonButtonStyles.delete
62
- }
63
- ]
58
+ actions: [],
59
+ exportable: {
60
+ name: i18next.t('title.data-sample list'),
61
+ data: this._exportableData.bind(this)
62
+ }
64
63
  }
65
64
  }
66
65
 
@@ -111,17 +110,35 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
111
110
  columns: [
112
111
  { type: 'gutter', gutterName: 'sequence' },
113
112
  { type: 'gutter', gutterName: 'row-selector', multiple: true },
113
+ {
114
+ type: 'gutter',
115
+ gutterName: 'button',
116
+ icon: 'assignment',
117
+ handlers: {
118
+ click: (columns, data, column, record, rowIndex) => {
119
+ openPopup(
120
+ html` <data-sample-view .dataSample=${record} style="background-color: white;"></data-sample-view> `,
121
+ {
122
+ backdrop: true,
123
+ size: 'large',
124
+ title: i18next.t('title.data-sample view')
125
+ }
126
+ )
127
+ }
128
+ }
129
+ },
114
130
  {
115
131
  type: 'string',
116
132
  name: 'name',
117
133
  label: true,
118
134
  header: i18next.t('field.name'),
119
135
  record: {
120
- editable: true
136
+ editable: false
121
137
  },
122
138
  filter: 'search',
123
139
  sortable: true,
124
- width: 150
140
+ width: 120,
141
+ imex: true
125
142
  },
126
143
  {
127
144
  type: 'string',
@@ -129,32 +146,63 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
129
146
  label: true,
130
147
  header: i18next.t('field.description'),
131
148
  record: {
132
- editable: true
149
+ editable: false
133
150
  },
134
151
  filter: 'search',
135
- width: 200
152
+ width: 150,
153
+ imex: true
136
154
  },
137
155
  {
138
- type: 'object',
156
+ type: 'resource-object',
139
157
  name: 'dataSet',
140
158
  header: i18next.t('field.data-set'),
141
159
  record: {
142
160
  editable: false
143
161
  },
144
162
  sortable: true,
145
- width: 120
163
+ width: 120,
164
+ imex: true
165
+ },
166
+ {
167
+ type: 'json5',
168
+ name: 'partitionKeys',
169
+ header: i18next.t('field.partition-keys'),
170
+ record: {
171
+ editable: false
172
+ },
173
+ width: 200,
174
+ imex: true
175
+ },
176
+ {
177
+ type: 'checkbox',
178
+ name: 'ooc',
179
+ header: i18next.t('field.ooc'),
180
+ record: {
181
+ editable: false
182
+ },
183
+ width: 30
146
184
  },
147
185
  {
148
- type: 'json',
186
+ type: 'checkbox',
187
+ name: 'oos',
188
+ header: i18next.t('field.oos'),
189
+ record: {
190
+ editable: false
191
+ },
192
+ width: 30
193
+ },
194
+ {
195
+ type: 'json5',
149
196
  name: 'data',
150
197
  header: i18next.t('field.data'),
151
198
  record: {
152
199
  editable: false
153
200
  },
154
- width: 200
201
+ width: 200,
202
+ imex: true
155
203
  },
156
204
  {
157
- type: 'json',
205
+ type: 'json5',
158
206
  name: 'spec',
159
207
  header: i18next.t('field.spec'),
160
208
  record: {
@@ -163,45 +211,78 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
163
211
  width: 200
164
212
  },
165
213
  {
166
- type: 'code',
214
+ type: 'text',
167
215
  name: 'rawData',
168
216
  header: i18next.t('field.raw-data'),
169
217
  record: {
170
218
  editable: false
171
219
  },
172
- width: 200
220
+ width: 200,
221
+ imex: true
173
222
  },
174
223
  {
175
- type: 'object',
176
- name: 'updater',
177
- header: i18next.t('field.updater'),
224
+ type: 'string',
225
+ name: 'workDate',
226
+ header: i18next.t('field.work-date'),
178
227
  sortable: true,
179
- width: 120
228
+ width: 80,
229
+ imex: true
180
230
  },
181
231
  {
182
- type: 'datetime',
183
- name: 'updatedAt',
184
- header: i18next.t('field.updated_at'),
232
+ type: 'string',
233
+ name: 'workShift',
234
+ header: i18next.t('field.work-shift'),
185
235
  sortable: true,
186
- width: 180
236
+ width: 40,
237
+ imex: true
187
238
  },
188
239
  {
189
240
  type: 'datetime',
190
241
  name: 'collectedAt',
191
242
  header: i18next.t('field.collected_at'),
192
243
  sortable: true,
193
- width: 180
244
+ width: 180,
245
+ imex: true
246
+ },
247
+ {
248
+ type: 'resource-object',
249
+ name: 'updater',
250
+ header: i18next.t('field.updater'),
251
+ sortable: true,
252
+ width: 120,
253
+ imex: true
254
+ },
255
+ {
256
+ type: 'datetime',
257
+ name: 'updatedAt',
258
+ header: i18next.t('field.updated_at'),
259
+ sortable: true,
260
+ width: 180,
261
+ imex: true
194
262
  }
195
263
  ],
196
264
  rows: {
197
265
  appendable: false,
198
266
  selectable: {
199
267
  multiple: true
268
+ },
269
+ classifier: function (record, rowIndex) {
270
+ var emphasized
271
+ if (record['oos']) {
272
+ emphasized = ['red']
273
+ } else if (record['ooc']) {
274
+ emphasized = 'orange'
275
+ }
276
+
277
+ return {
278
+ emphasized
279
+ }
200
280
  }
201
281
  },
202
282
  sorters: [
203
283
  {
204
- name: 'name'
284
+ name: 'updatedAt',
285
+ desc: true
205
286
  }
206
287
  ]
207
288
  }
@@ -235,8 +316,13 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
235
316
  name
236
317
  description
237
318
  }
319
+ partitionKeys
238
320
  data
239
321
  spec
322
+ ooc
323
+ oos
324
+ workDate
325
+ workShift
240
326
  updater {
241
327
  id
242
328
  name
@@ -261,36 +347,43 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
261
347
  }
262
348
  }
263
349
 
264
- async _deleteDataSample() {
265
- if (confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) {
266
- const ids = this.grist.selected.map(record => record.id)
267
- if (ids && ids.length > 0) {
268
- const response = await client.mutate({
269
- mutation: gql`
270
- mutation ($ids: [String!]!) {
271
- deleteDataSamples(ids: $ids)
350
+ _exportableData() {
351
+ let records = []
352
+ if (this.grist.selected && this.grist.selected.length > 0) {
353
+ records = this.grist.selected
354
+ } else {
355
+ records = this.grist.data.records
356
+ }
357
+
358
+ var headerSetting = this.grist.compiledConfig.columns
359
+ .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
360
+ .map(column => {
361
+ return column.imex === true
362
+ ? {
363
+ header: column.header.renderer(),
364
+ key: column.name,
365
+ width: column.width,
366
+ type: column.type
272
367
  }
273
- `,
274
- variables: {
275
- ids
276
- }
277
- })
368
+ : column.imex
369
+ })
278
370
 
279
- if (!response.errors) {
280
- this.grist.fetch()
281
- notify({
282
- message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })
283
- })
284
- }
371
+ var data = records.map(item => {
372
+ return {
373
+ id: item.id,
374
+ ...this.gristConfig.columns
375
+ .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
376
+ .reduce((record, column) => {
377
+ const key = column.imex === true ? column.name : column.imex.key
378
+ record[key] = key
379
+ .split('.')
380
+ .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
381
+ return record
382
+ }, {})
285
383
  }
286
- }
287
- }
384
+ })
288
385
 
289
- async stateChanged(state) {
290
- if (this.active && this._currentPopupName && !state.layout.viewparts[this._currentPopupName]) {
291
- this.grist.fetch()
292
- this._currentPopupName = null
293
- }
386
+ return { header: headerSetting, data: data }
294
387
  }
295
388
  }
296
389
 
@@ -1,15 +1,15 @@
1
1
  import '@operato/data-grist'
2
2
 
3
- import gql from 'graphql-tag'
3
+ import { CommonButtonStyles, ScrollbarStyles } from '@operato/styles'
4
+ import { PageView, store } from '@operato/shell'
4
5
  import { css, html } from 'lit'
5
- import { connect } from 'pwa-helpers/connect-mixin'
6
+ import { i18next, localize } from '@operato/i18n'
6
7
 
7
8
  import { client } from '@operato/graphql'
8
- import { i18next, localize } from '@operato/i18n'
9
- import { notify } from '@operato/layout'
10
- import { PageView, store } from '@operato/shell'
11
- import { CommonButtonStyles, ScrollbarStyles } from '@operato/styles'
9
+ import { connect } from 'pwa-helpers/connect-mixin'
10
+ import gql from 'graphql-tag'
12
11
  import { isMobileDevice } from '@operato/utils'
12
+ import { notify } from '@operato/layout'
13
13
 
14
14
  export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
15
15
  static get properties() {
@@ -153,6 +153,7 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
153
153
  editable: true
154
154
  },
155
155
  sortable: true,
156
+ filter: true,
156
157
  width: 60
157
158
  },
158
159
  {
@@ -176,6 +177,7 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
176
177
  editable: true
177
178
  },
178
179
  sortable: true,
180
+ filter: 'search',
179
181
  width: 150
180
182
  },
181
183
  {
@@ -334,11 +336,6 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
334
336
  model
335
337
  serialNo
336
338
  netmask
337
- collecter {
338
- id
339
- name
340
- }
341
- collectedAt
342
339
  updater {
343
340
  id
344
341
  name
@@ -387,13 +384,6 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
387
384
  }
388
385
  }
389
386
 
390
- async stateChanged(state) {
391
- if (this.active && this._currentPopupName && !state.layout.viewparts[this._currentPopupName]) {
392
- this.grist.fetch()
393
- this._currentPopupName = null
394
- }
395
- }
396
-
397
387
  async _copyDataSensor() {
398
388
  var selected = this.grist.selected
399
389
  if (selected.length == 0) return