@things-factory/dataset 5.0.0-alpha.9 → 5.0.0-zeta.1

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 (105) hide show
  1. package/README.md +9 -0
  2. package/assets/data-samples.jpg +0 -0
  3. package/client/bootstrap.js +21 -1
  4. package/client/pages/{data-entry-form.js → data-entry/data-entry-form.js} +15 -3
  5. package/client/pages/data-entry/data-entry-list-page.js +390 -0
  6. package/client/pages/data-ooc/data-ooc-list-page.js +416 -0
  7. package/client/pages/data-ooc/data-ooc-view.js +183 -0
  8. package/client/pages/data-report/data-report-embed-page.js +113 -0
  9. package/client/pages/data-report/data-report-list-page.js +432 -0
  10. package/client/pages/data-report/jasper-report-oocs-page.js +122 -0
  11. package/client/pages/data-report/jasper-report-samples-crosstab-page.js +122 -0
  12. package/client/pages/data-report/jasper-report-samples-page.js +122 -0
  13. package/client/pages/data-sample/data-sample-list-page.js +372 -0
  14. package/client/pages/data-sample/data-sample-view.js +98 -0
  15. package/client/pages/{data-sensor.js → data-sensor/data-sensor-list-page.js} +43 -68
  16. package/client/pages/{data-item-list.js → data-set/data-item-list.js} +36 -11
  17. package/client/pages/{data-set-importer.js → data-set/data-set-importer.js} +0 -0
  18. package/client/pages/data-set/data-set-list-page.js +739 -0
  19. package/client/route.js +34 -6
  20. package/config/config.development.js +13 -0
  21. package/config/config.production.js +1 -0
  22. package/dist-server/controllers/create-data-sample.js +133 -0
  23. package/dist-server/controllers/create-data-sample.js.map +1 -0
  24. package/dist-server/controllers/data-use-case.js +57 -0
  25. package/dist-server/controllers/data-use-case.js.map +1 -0
  26. package/dist-server/controllers/index.js +18 -0
  27. package/dist-server/controllers/index.js.map +1 -1
  28. package/dist-server/controllers/jasper-report.js +156 -0
  29. package/dist-server/controllers/jasper-report.js.map +1 -0
  30. package/dist-server/index.js +1 -0
  31. package/dist-server/index.js.map +1 -1
  32. package/dist-server/routes.js +13 -24
  33. package/dist-server/routes.js.map +1 -1
  34. package/dist-server/service/data-item/data-item-query.js +6 -2
  35. package/dist-server/service/data-item/data-item-query.js.map +1 -1
  36. package/dist-server/service/data-item/data-item-type.js +15 -7
  37. package/dist-server/service/data-item/data-item-type.js.map +1 -1
  38. package/dist-server/service/data-item/data-item.js +17 -3
  39. package/dist-server/service/data-item/data-item.js.map +1 -1
  40. package/dist-server/service/data-ooc/data-ooc-mutation.js +92 -0
  41. package/dist-server/service/data-ooc/data-ooc-mutation.js.map +1 -0
  42. package/dist-server/service/data-ooc/data-ooc-query.js +120 -0
  43. package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -0
  44. package/dist-server/service/data-ooc/data-ooc-subscription.js +65 -0
  45. package/dist-server/service/data-ooc/data-ooc-subscription.js.map +1 -0
  46. package/dist-server/service/data-ooc/data-ooc-type.js +107 -0
  47. package/dist-server/service/data-ooc/data-ooc-type.js.map +1 -0
  48. package/dist-server/service/data-ooc/data-ooc.js +237 -0
  49. package/dist-server/service/data-ooc/data-ooc.js.map +1 -0
  50. package/dist-server/service/data-ooc/index.js +10 -0
  51. package/dist-server/service/data-ooc/index.js.map +1 -0
  52. package/dist-server/service/data-sample/data-sample-mutation.js +2 -138
  53. package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -1
  54. package/dist-server/service/data-sample/data-sample-query.js +7 -2
  55. package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
  56. package/dist-server/service/data-sample/data-sample-type.js +12 -42
  57. package/dist-server/service/data-sample/data-sample-type.js.map +1 -1
  58. package/dist-server/service/data-sample/data-sample.js +34 -3
  59. package/dist-server/service/data-sample/data-sample.js.map +1 -1
  60. package/dist-server/service/data-sensor/data-sensor-query.js +7 -2
  61. package/dist-server/service/data-sensor/data-sensor-query.js.map +1 -1
  62. package/dist-server/service/data-set/data-set-mutation.js +40 -14
  63. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  64. package/dist-server/service/data-set/data-set-query.js +190 -3
  65. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  66. package/dist-server/service/data-set/data-set-type.js +84 -3
  67. package/dist-server/service/data-set/data-set-type.js.map +1 -1
  68. package/dist-server/service/data-set/data-set.js +110 -15
  69. package/dist-server/service/data-set/data-set.js.map +1 -1
  70. package/dist-server/service/index.js +6 -2
  71. package/dist-server/service/index.js.map +1 -1
  72. package/package.json +19 -13
  73. package/server/controllers/create-data-sample.ts +177 -0
  74. package/server/controllers/data-use-case.ts +85 -0
  75. package/server/controllers/index.ts +2 -0
  76. package/server/controllers/jasper-report.ts +170 -0
  77. package/server/index.ts +1 -0
  78. package/server/routes.ts +21 -31
  79. package/server/service/data-item/data-item-query.ts +8 -3
  80. package/server/service/data-item/data-item-type.ts +10 -6
  81. package/server/service/data-item/data-item.ts +15 -4
  82. package/server/service/data-ooc/data-ooc-mutation.ts +150 -0
  83. package/server/service/data-ooc/data-ooc-query.ts +69 -0
  84. package/server/service/data-ooc/data-ooc-subscription.ts +51 -0
  85. package/server/service/data-ooc/data-ooc-type.ts +68 -0
  86. package/server/service/data-ooc/data-ooc.ts +204 -0
  87. package/server/service/data-ooc/index.ts +7 -0
  88. package/server/service/data-sample/data-sample-mutation.ts +3 -168
  89. package/server/service/data-sample/data-sample-query.ts +9 -3
  90. package/server/service/data-sample/data-sample-type.ts +7 -28
  91. package/server/service/data-sample/data-sample.ts +33 -3
  92. package/server/service/data-sensor/data-sensor-query.ts +9 -3
  93. package/server/service/data-set/data-set-mutation.ts +53 -14
  94. package/server/service/data-set/data-set-query.ts +161 -4
  95. package/server/service/data-set/data-set-type.ts +65 -4
  96. package/server/service/data-set/data-set.ts +100 -12
  97. package/server/service/index.ts +6 -2
  98. package/things-factory.config.js +35 -7
  99. package/translations/en.json +46 -3
  100. package/translations/ko.json +45 -3
  101. package/translations/ms.json +44 -3
  102. package/translations/zh.json +44 -3
  103. package/client/pages/data-sample.js +0 -307
  104. package/client/pages/data-set.js +0 -457
  105. package/yarn-error.log +0 -23244
@@ -8,20 +8,22 @@ import { client } from '@operato/graphql'
8
8
  import { i18next, localize } from '@operato/i18n'
9
9
  import { notify } from '@operato/layout'
10
10
  import { PageView, store } from '@operato/shell'
11
- import { CommonButtonStyles, ScrollbarStyles } from '@operato/styles'
11
+ import { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'
12
12
  import { isMobileDevice } from '@operato/utils'
13
13
 
14
- export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
14
+ export class DataSensorListPage extends connect(store)(localize(i18next)(PageView)) {
15
15
  static get properties() {
16
16
  return {
17
17
  active: String,
18
- gristConfig: Object
18
+ gristConfig: Object,
19
+ mode: String
19
20
  }
20
21
  }
21
22
 
22
23
  static get styles() {
23
24
  return [
24
25
  ScrollbarStyles,
26
+ CommonGristStyles,
25
27
  css`
26
28
  :host {
27
29
  display: flex;
@@ -34,18 +36,6 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
34
36
  overflow-y: auto;
35
37
  flex: 1;
36
38
  }
37
-
38
- #filters {
39
- display: flex;
40
- flex-direction: row;
41
- justify-content: space-between;
42
-
43
- background-color: white;
44
- }
45
-
46
- #filters > * {
47
- padding: var(--padding-default) var(--padding-wide);
48
- }
49
39
  `
50
40
  ]
51
41
  }
@@ -53,7 +43,7 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
53
43
  get context() {
54
44
  return {
55
45
  title: i18next.t('title.data-sensor list'),
56
- help: 'integration/ui/data-sensor',
46
+ help: 'dataset/data-sensor',
57
47
  actions: [
58
48
  {
59
49
  title: i18next.t('button.copy'),
@@ -75,14 +65,42 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
75
65
  }
76
66
 
77
67
  render() {
68
+ const mode = this.mode || (isMobileDevice() ? 'LIST' : 'GRID')
69
+
78
70
  return html`
79
71
  <ox-grist
80
- .mode=${isMobileDevice() ? 'LIST' : 'GRID'}
72
+ .mode=${mode}
81
73
  .config=${this.gristConfig}
82
74
  .fetchHandler=${this.fetchHandler.bind(this)}
75
+ ?url-params-sensitive=${this.active}
83
76
  >
84
- <div slot="headroom" id="filters">
85
- <ox-filters-form></ox-filters-form>
77
+ <div slot="headroom">
78
+ <div id="filters">
79
+ <ox-filters-form></ox-filters-form>
80
+ </div>
81
+
82
+ <div id="sorters">
83
+ Sort
84
+ <mwc-icon
85
+ @click=${e => {
86
+ const target = e.currentTarget
87
+ this.renderRoot.querySelector('#sorter-control').open({
88
+ right: 0,
89
+ top: target.offsetTop + target.offsetHeight
90
+ })
91
+ }}
92
+ >expand_more</mwc-icon
93
+ >
94
+ <ox-popup id="sorter-control">
95
+ <ox-sorters-control> </ox-sorters-control>
96
+ </ox-popup>
97
+ </div>
98
+
99
+ <div id="modes">
100
+ <mwc-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</mwc-icon>
101
+ <mwc-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</mwc-icon>
102
+ <mwc-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>
103
+ </div>
86
104
  </div>
87
105
  </ox-grist>
88
106
  `
@@ -92,30 +110,7 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
92
110
  return this.renderRoot.querySelector('ox-grist')
93
111
  }
94
112
 
95
- // update with url params value
96
- _updateSearchConfig(lifecycle) {
97
- // this.searchConfig = this.searchConfig.map(conf => {
98
- // if (conf.name in lifecycle.params) {
99
- // conf.value = lifecycle.params[conf.name]
100
- // } else {
101
- // delete conf.value
102
- // }
103
- // return conf
104
- // })
105
- }
106
-
107
- // set default field value to record with searchConfig
108
- _setDefaultFieldsValue(fields) {
109
- // this.searchConfig.forEach(conf => {
110
- // if (!fields[conf.name] && conf.value) {
111
- // fields[conf.name] = conf.value
112
- // }
113
- // })
114
- }
115
-
116
113
  async pageInitialized(lifecycle) {
117
- this._updateSearchConfig(lifecycle)
118
-
119
114
  this.gristConfig = {
120
115
  list: { fields: ['name', 'description', 'active'] },
121
116
  columns: [
@@ -153,6 +148,7 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
153
148
  editable: true
154
149
  },
155
150
  sortable: true,
151
+ filter: true,
156
152
  width: 60
157
153
  },
158
154
  {
@@ -176,6 +172,7 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
176
172
  editable: true
177
173
  },
178
174
  sortable: true,
175
+ filter: 'search',
179
176
  width: 150
180
177
  },
181
178
  {
@@ -194,7 +191,7 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
194
191
  {
195
192
  type: 'object',
196
193
  name: 'dataSet',
197
- header: i18next.t('field.dataSet'),
194
+ header: i18next.t('field.data-set'),
198
195
  record: {
199
196
  editable: true,
200
197
  options: {
@@ -271,8 +268,8 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
271
268
  },
272
269
  {
273
270
  type: 'datetime',
274
- name: 'collectedAt',
275
- header: i18next.t('field.collected_at'),
271
+ name: 'updatedAt',
272
+ header: i18next.t('field.updated_at'),
276
273
  record: {
277
274
  editable: false
278
275
  },
@@ -291,20 +288,6 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
291
288
  }
292
289
  ]
293
290
  }
294
-
295
- await this.updateComplete
296
-
297
- this.grist.fetch()
298
- }
299
-
300
- async pageUpdated(changes, lifecycle) {
301
- if (this.active) {
302
- // update with url params value
303
- this._updateSearchConfig(lifecycle)
304
- await this.updateComplete
305
-
306
- this.grist.fetch()
307
- }
308
291
  }
309
292
 
310
293
  async fetchHandler({ page, limit, sortings = [], filters = [] }) {
@@ -382,13 +365,6 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
382
365
  }
383
366
  }
384
367
 
385
- async stateChanged(state) {
386
- if (this.active && this._currentPopupName && !state.layout.viewparts[this._currentPopupName]) {
387
- this.grist.fetch()
388
- this._currentPopupName = null
389
- }
390
- }
391
-
392
368
  async _copyDataSensor() {
393
369
  var selected = this.grist.selected
394
370
  if (selected.length == 0) return
@@ -419,7 +395,6 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
419
395
  for (let key in dirtyFields) {
420
396
  patchField[key] = dirtyFields[key].after
421
397
  }
422
- this._setDefaultFieldsValue(patchField)
423
398
  patchField.cuFlag = patch.__dirty__
424
399
 
425
400
  return patchField
@@ -443,4 +418,4 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
443
418
  }
444
419
  }
445
420
 
446
- window.customElements.define('data-sensor-page', DataSensor)
421
+ window.customElements.define('data-sensor-list-page', DataSensorListPage)
@@ -61,8 +61,6 @@ class DataItemList extends localize(i18next)(LitElement) {
61
61
  `
62
62
  }
63
63
 
64
- async updated(changedProps) {}
65
-
66
64
  async firstUpdated() {
67
65
  this.gristConfig = {
68
66
  list: { fields: ['name', 'description', 'active'] },
@@ -132,6 +130,17 @@ class DataItemList extends localize(i18next)(LitElement) {
132
130
  sortable: true,
133
131
  width: 60
134
132
  },
133
+ {
134
+ type: 'checkbox',
135
+ name: 'hidden',
136
+ label: true,
137
+ header: i18next.t('field.hidden'),
138
+ record: {
139
+ editable: true
140
+ },
141
+ sortable: true,
142
+ width: 60
143
+ },
135
144
  {
136
145
  type: 'string',
137
146
  name: 'tag',
@@ -157,9 +166,7 @@ class DataItemList extends localize(i18next)(LitElement) {
157
166
  header: i18next.t('field.options'),
158
167
  record: {
159
168
  editable: true,
160
- renderer: (value, column, record, rowIndex, field) => {
161
- return typeof value === 'string' ? value : typeof value === 'object' ? JSON.stringify(value) : ''
162
- },
169
+ renderer: 'json5',
163
170
  options: async (value, column, record, row, field) => {
164
171
  return {
165
172
  name: record.type,
@@ -168,7 +175,7 @@ class DataItemList extends localize(i18next)(LitElement) {
168
175
  record.type === 'select'
169
176
  ? [
170
177
  {
171
- type: 'options',
178
+ type: 'options' /* property-editor type */,
172
179
  name: 'options',
173
180
  label: 'options'
174
181
  }
@@ -181,6 +188,15 @@ class DataItemList extends localize(i18next)(LitElement) {
181
188
  },
182
189
  width: 120
183
190
  },
191
+ {
192
+ type: 'string',
193
+ name: 'unit',
194
+ header: i18next.t('field.unit'),
195
+ record: {
196
+ editable: true
197
+ },
198
+ width: 120
199
+ },
184
200
  {
185
201
  type: 'number',
186
202
  name: 'quota',
@@ -191,11 +207,16 @@ class DataItemList extends localize(i18next)(LitElement) {
191
207
  width: 60
192
208
  },
193
209
  {
194
- type: 'json',
210
+ type: 'data-item-spec',
195
211
  name: 'spec',
196
212
  header: i18next.t('field.spec'),
197
213
  record: {
198
- editable: true
214
+ editable: true,
215
+ options: {
216
+ name: '',
217
+ help: '',
218
+ objectified: true /* prevent from stringifying */
219
+ }
199
220
  },
200
221
  width: 200
201
222
  }
@@ -216,13 +237,13 @@ class DataItemList extends localize(i18next)(LitElement) {
216
237
  }
217
238
  }
218
239
 
219
- async fetchHandler({ filters, page, limit, sorters = [] }) {
240
+ async fetchHandler({ filters, page, limit, sortings = [] }) {
220
241
  const response = await client.query({
221
242
  query: gql`
222
243
  query {
223
244
  dataItems (
224
245
  filters: {
225
- name: "dataSet",
246
+ name: "dataSetId",
226
247
  value: "${this.dataSet.id}",
227
248
  operator: "eq"
228
249
  },
@@ -234,9 +255,11 @@ class DataItemList extends localize(i18next)(LitElement) {
234
255
  description
235
256
  sequence
236
257
  active
258
+ hidden
237
259
  tag
238
260
  type
239
261
  options
262
+ unit
240
263
  quota
241
264
  spec
242
265
  }
@@ -279,7 +302,9 @@ class DataItemList extends localize(i18next)(LitElement) {
279
302
  }
280
303
  })
281
304
 
282
- if (!response.errors) this.grist.fetch()
305
+ if (!response.errors) {
306
+ this.grist.fetch()
307
+ }
283
308
  }
284
309
  }
285
310