@things-factory/dataset 5.0.0-alpha.4 → 5.0.0-alpha.42

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 (107) hide show
  1. package/README.md +13 -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 -2
  5. package/client/pages/data-entry/data-entry-list-page.js +423 -0
  6. package/client/pages/data-ooc/data-ooc-list-page.js +483 -0
  7. package/client/pages/data-ooc/data-ooc-view.js +182 -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 +465 -0
  10. package/client/pages/data-report/jasper-report-oocs-page.js +120 -0
  11. package/client/pages/data-report/jasper-report-samples-crosstab-page.js +120 -0
  12. package/client/pages/data-report/jasper-report-samples-page.js +120 -0
  13. package/client/pages/data-sample/data-sample-list-page.js +386 -0
  14. package/client/pages/data-sample/data-sample-view.js +97 -0
  15. package/client/pages/{data-sensor.js → data-sensor/data-sensor-list-page.js} +43 -64
  16. package/client/pages/{data-item-list.js → data-set/data-item-list.js} +37 -12
  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 +712 -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 +17 -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-mutation.js +5 -1
  35. package/dist-server/service/data-item/data-item-mutation.js.map +1 -1
  36. package/dist-server/service/data-item/data-item-query.js +7 -2
  37. package/dist-server/service/data-item/data-item-query.js.map +1 -1
  38. package/dist-server/service/data-item/data-item-type.js +15 -7
  39. package/dist-server/service/data-item/data-item-type.js.map +1 -1
  40. package/dist-server/service/data-item/data-item.js +17 -3
  41. package/dist-server/service/data-item/data-item.js.map +1 -1
  42. package/dist-server/service/data-ooc/data-ooc-mutation.js +92 -0
  43. package/dist-server/service/data-ooc/data-ooc-mutation.js.map +1 -0
  44. package/dist-server/service/data-ooc/data-ooc-query.js +120 -0
  45. package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -0
  46. package/dist-server/service/data-ooc/data-ooc-subscription.js +65 -0
  47. package/dist-server/service/data-ooc/data-ooc-subscription.js.map +1 -0
  48. package/dist-server/service/data-ooc/data-ooc-type.js +107 -0
  49. package/dist-server/service/data-ooc/data-ooc-type.js.map +1 -0
  50. package/dist-server/service/data-ooc/data-ooc.js +237 -0
  51. package/dist-server/service/data-ooc/data-ooc.js.map +1 -0
  52. package/dist-server/service/data-ooc/index.js +10 -0
  53. package/dist-server/service/data-ooc/index.js.map +1 -0
  54. package/dist-server/service/data-sample/data-sample-mutation.js +2 -138
  55. package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -1
  56. package/dist-server/service/data-sample/data-sample-query.js +7 -2
  57. package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
  58. package/dist-server/service/data-sample/data-sample-type.js +12 -42
  59. package/dist-server/service/data-sample/data-sample-type.js.map +1 -1
  60. package/dist-server/service/data-sample/data-sample.js +34 -3
  61. package/dist-server/service/data-sample/data-sample.js.map +1 -1
  62. package/dist-server/service/data-sensor/data-sensor-query.js +7 -2
  63. package/dist-server/service/data-sensor/data-sensor-query.js.map +1 -1
  64. package/dist-server/service/data-set/data-set-mutation.js +38 -9
  65. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  66. package/dist-server/service/data-set/data-set-query.js +185 -3
  67. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  68. package/dist-server/service/data-set/data-set-type.js +84 -3
  69. package/dist-server/service/data-set/data-set-type.js.map +1 -1
  70. package/dist-server/service/data-set/data-set.js +110 -15
  71. package/dist-server/service/data-set/data-set.js.map +1 -1
  72. package/dist-server/service/index.js +6 -2
  73. package/dist-server/service/index.js.map +1 -1
  74. package/package.json +19 -13
  75. package/server/controllers/create-data-sample.ts +177 -0
  76. package/server/controllers/data-use-case.ts +85 -0
  77. package/server/controllers/index.ts +1 -0
  78. package/server/controllers/jasper-report.ts +170 -0
  79. package/server/index.ts +1 -0
  80. package/server/routes.ts +21 -31
  81. package/server/service/data-item/data-item-mutation.ts +6 -1
  82. package/server/service/data-item/data-item-query.ts +9 -3
  83. package/server/service/data-item/data-item-type.ts +10 -6
  84. package/server/service/data-item/data-item.ts +15 -4
  85. package/server/service/data-ooc/data-ooc-mutation.ts +150 -0
  86. package/server/service/data-ooc/data-ooc-query.ts +69 -0
  87. package/server/service/data-ooc/data-ooc-subscription.ts +51 -0
  88. package/server/service/data-ooc/data-ooc-type.ts +68 -0
  89. package/server/service/data-ooc/data-ooc.ts +204 -0
  90. package/server/service/data-ooc/index.ts +7 -0
  91. package/server/service/data-sample/data-sample-mutation.ts +3 -172
  92. package/server/service/data-sample/data-sample-query.ts +9 -3
  93. package/server/service/data-sample/data-sample-type.ts +7 -28
  94. package/server/service/data-sample/data-sample.ts +33 -3
  95. package/server/service/data-sensor/data-sensor-query.ts +9 -3
  96. package/server/service/data-set/data-set-mutation.ts +52 -12
  97. package/server/service/data-set/data-set-query.ts +156 -4
  98. package/server/service/data-set/data-set-type.ts +65 -4
  99. package/server/service/data-set/data-set.ts +100 -12
  100. package/server/service/index.ts +6 -2
  101. package/things-factory.config.js +35 -7
  102. package/translations/en.json +46 -3
  103. package/translations/ko.json +45 -3
  104. package/translations/ms.json +44 -3
  105. package/translations/zh.json +44 -3
  106. package/client/pages/data-sample.js +0 -316
  107. package/client/pages/data-set.js +0 -457
@@ -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
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
  },
@@ -297,16 +294,6 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
297
294
  this.grist.fetch()
298
295
  }
299
296
 
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
- }
309
-
310
297
  async fetchHandler({ page, limit, sortings = [], filters = [] }) {
311
298
  const response = await client.query({
312
299
  query: gql`
@@ -382,13 +369,6 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
382
369
  }
383
370
  }
384
371
 
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
372
  async _copyDataSensor() {
393
373
  var selected = this.grist.selected
394
374
  if (selected.length == 0) return
@@ -419,7 +399,6 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
419
399
  for (let key in dirtyFields) {
420
400
  patchField[key] = dirtyFields[key].after
421
401
  }
422
- this._setDefaultFieldsValue(patchField)
423
402
  patchField.cuFlag = patch.__dirty__
424
403
 
425
404
  return patchField
@@ -443,4 +422,4 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
443
422
  }
444
423
  }
445
424
 
446
- window.customElements.define('data-sensor-page', DataSensor)
425
+ window.customElements.define('data-sensor-list-page', DataSensorListPage)
@@ -1,8 +1,8 @@
1
- import gql from 'graphql-tag'
2
- import { css, html, LitElement } from 'lit'
1
+ import { LitElement, css, html } from 'lit'
2
+ import { i18next, localize } from '@operato/i18n'
3
3
 
4
4
  import { client } from '@operato/graphql'
5
- import { i18next, localize } from '@operato/i18n'
5
+ import gql from 'graphql-tag'
6
6
  import { isMobileDevice } from '@operato/utils'
7
7
 
8
8
  class DataItemList extends localize(i18next)(LitElement) {
@@ -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
  }
@@ -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