@things-factory/dataset 5.0.0-alpha.1 → 5.0.0-alpha.4
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.
- package/client/bootstrap.js +0 -2
- package/client/pages/data-entry-form.js +74 -0
- package/client/pages/data-item-list.js +47 -9
- package/client/pages/data-sample.js +52 -8
- package/client/pages/data-sensor.js +446 -0
- package/client/pages/data-set.js +46 -7
- package/client/route.js +4 -0
- package/dist-server/index.js +1 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/routes.js +64 -0
- package/dist-server/routes.js.map +1 -1
- package/dist-server/service/data-item/data-item-type.js +10 -5
- package/dist-server/service/data-item/data-item-type.js.map +1 -1
- package/dist-server/service/data-item/data-item.js +17 -4
- package/dist-server/service/data-item/data-item.js.map +1 -1
- package/dist-server/service/data-sample/data-sample-mutation.js +41 -7
- package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -1
- package/dist-server/service/data-sample/data-sample-type.js +23 -2
- package/dist-server/service/data-sample/data-sample-type.js.map +1 -1
- package/dist-server/service/data-sample/data-sample.js +44 -5
- package/dist-server/service/data-sample/data-sample.js.map +1 -1
- package/dist-server/service/data-sensor/data-sensor-mutation.js +120 -0
- package/dist-server/service/data-sensor/data-sensor-mutation.js.map +1 -0
- package/dist-server/service/data-sensor/data-sensor-query.js +108 -0
- package/dist-server/service/data-sensor/data-sensor-query.js.map +1 -0
- package/dist-server/service/data-sensor/data-sensor-type.js +147 -0
- package/dist-server/service/data-sensor/data-sensor-type.js.map +1 -0
- package/dist-server/service/data-sensor/data-sensor.js +168 -0
- package/dist-server/service/data-sensor/data-sensor.js.map +1 -0
- package/dist-server/service/data-sensor/index.js +9 -0
- package/dist-server/service/data-sensor/index.js.map +1 -0
- package/dist-server/service/data-set/data-set-type.js +18 -0
- package/dist-server/service/data-set/data-set-type.js.map +1 -1
- package/dist-server/service/data-set/data-set.js +22 -3
- package/dist-server/service/data-set/data-set.js.map +1 -1
- package/dist-server/service/data-spec/data-spec-manager.js +20 -0
- package/dist-server/service/data-spec/data-spec-manager.js.map +1 -0
- package/dist-server/service/data-spec/data-spec-query.js +48 -0
- package/dist-server/service/data-spec/data-spec-query.js.map +1 -0
- package/dist-server/service/data-spec/data-spec.js +78 -0
- package/dist-server/service/data-spec/data-spec.js.map +1 -0
- package/dist-server/service/data-spec/index.js +8 -0
- package/dist-server/service/data-spec/index.js.map +1 -0
- package/dist-server/service/index.js +10 -2
- package/dist-server/service/index.js.map +1 -1
- package/package.json +13 -11
- package/server/index.ts +2 -0
- package/server/routes.ts +76 -0
- package/server/service/data-item/data-item-type.ts +7 -4
- package/server/service/data-item/data-item.ts +13 -2
- package/server/service/data-sample/data-sample-mutation.ts +55 -5
- package/server/service/data-sample/data-sample-type.ts +17 -2
- package/server/service/data-sample/data-sample.ts +37 -2
- package/server/service/data-sensor/data-sensor-mutation.ts +110 -0
- package/server/service/data-sensor/data-sensor-query.ts +56 -0
- package/server/service/data-sensor/data-sensor-type.ts +98 -0
- package/server/service/data-sensor/data-sensor.ts +139 -0
- package/server/service/data-sensor/index.ts +6 -0
- package/server/service/data-set/data-set-type.ts +14 -0
- package/server/service/data-set/data-set.ts +17 -1
- package/server/service/data-spec/data-spec-manager.ts +21 -0
- package/server/service/data-spec/data-spec-query.ts +21 -0
- package/server/service/data-spec/data-spec.ts +44 -0
- package/server/service/data-spec/index.ts +5 -0
- package/server/service/index.ts +12 -4
- package/things-factory.config.js +4 -0
- package/translations/en.json +17 -4
- package/translations/ko.json +16 -3
- package/translations/ms.json +17 -4
- package/translations/zh.json +17 -4
package/client/bootstrap.js
CHANGED
@@ -0,0 +1,74 @@
|
|
1
|
+
import gql from 'graphql-tag'
|
2
|
+
import { css, html, LitElement } from 'lit'
|
3
|
+
|
4
|
+
import { client } from '@operato/graphql'
|
5
|
+
import { i18next, localize } from '@operato/i18n'
|
6
|
+
import '@operato/dataset/ox-data-entry-form.js'
|
7
|
+
|
8
|
+
class DataEntryForm extends localize(i18next)(LitElement) {
|
9
|
+
static get properties() {
|
10
|
+
return {
|
11
|
+
dataSet: Object
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
static get styles() {
|
16
|
+
return [
|
17
|
+
css`
|
18
|
+
:host {
|
19
|
+
display: flex;
|
20
|
+
flex-direction: column;
|
21
|
+
|
22
|
+
background-color: #fff;
|
23
|
+
}
|
24
|
+
|
25
|
+
ox-data-entry-form {
|
26
|
+
flex: 1;
|
27
|
+
}
|
28
|
+
|
29
|
+
.button-container {
|
30
|
+
display: flex;
|
31
|
+
margin-left: auto;
|
32
|
+
padding: var(--padding-default);
|
33
|
+
}
|
34
|
+
`
|
35
|
+
]
|
36
|
+
}
|
37
|
+
|
38
|
+
get entryForm() {
|
39
|
+
return this.renderRoot.querySelector('ox-data-entry-form')
|
40
|
+
}
|
41
|
+
|
42
|
+
render() {
|
43
|
+
return html`
|
44
|
+
<ox-data-entry-form .dataSet=${this.dataSet}></ox-data-entry-form>
|
45
|
+
<div class="button-container">
|
46
|
+
<mwc-button raised @click=${this._updateDataItems.bind(this)}>${i18next.t('button.save')}</mwc-button>
|
47
|
+
</div>
|
48
|
+
`
|
49
|
+
}
|
50
|
+
|
51
|
+
async _updateDataItems() {
|
52
|
+
const data = this.entryForm.buildValue()
|
53
|
+
const dataSample = {
|
54
|
+
dataSetId: this.dataSet.id,
|
55
|
+
data
|
56
|
+
}
|
57
|
+
|
58
|
+
const response = await client.mutate({
|
59
|
+
mutation: gql`
|
60
|
+
mutation ($dataSample: NewDataSample!) {
|
61
|
+
createDataSample(dataSample: $dataSample) {
|
62
|
+
id
|
63
|
+
collectedAt
|
64
|
+
}
|
65
|
+
}
|
66
|
+
`,
|
67
|
+
variables: {
|
68
|
+
dataSample
|
69
|
+
}
|
70
|
+
})
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
window.customElements.define('data-entry-form', DataEntryForm)
|
@@ -33,9 +33,6 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
33
33
|
padding: var(--padding-default);
|
34
34
|
}
|
35
35
|
|
36
|
-
form {
|
37
|
-
position: relative;
|
38
|
-
}
|
39
36
|
[danger] {
|
40
37
|
--mdc-theme-primary: var(--mdc-danger-button-primary-color);
|
41
38
|
}
|
@@ -46,7 +43,7 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
46
43
|
]
|
47
44
|
}
|
48
45
|
|
49
|
-
get
|
46
|
+
get grist() {
|
50
47
|
return this.renderRoot.querySelector('ox-grist')
|
51
48
|
}
|
52
49
|
|
@@ -135,16 +132,55 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
135
132
|
sortable: true,
|
136
133
|
width: 60
|
137
134
|
},
|
135
|
+
{
|
136
|
+
type: 'string',
|
137
|
+
name: 'tag',
|
138
|
+
header: i18next.t('field.tag'),
|
139
|
+
record: {
|
140
|
+
editable: true
|
141
|
+
},
|
142
|
+
width: 180
|
143
|
+
},
|
138
144
|
{
|
139
145
|
type: 'select',
|
140
146
|
name: 'type',
|
141
147
|
header: i18next.t('field.type'),
|
142
148
|
record: {
|
143
|
-
options: ['number', 'text', 'select', 'boolean'],
|
149
|
+
options: ['', 'number', 'text', 'select', 'boolean', 'file'],
|
144
150
|
editable: true
|
145
151
|
},
|
146
152
|
width: 120
|
147
153
|
},
|
154
|
+
{
|
155
|
+
type: 'parameters',
|
156
|
+
name: 'options',
|
157
|
+
header: i18next.t('field.options'),
|
158
|
+
record: {
|
159
|
+
editable: true,
|
160
|
+
renderer: (value, column, record, rowIndex, field) => {
|
161
|
+
return typeof value === 'string' ? value : typeof value === 'object' ? JSON.stringify(value) : ''
|
162
|
+
},
|
163
|
+
options: async (value, column, record, row, field) => {
|
164
|
+
return {
|
165
|
+
name: record.type,
|
166
|
+
help: '',
|
167
|
+
spec:
|
168
|
+
record.type === 'select'
|
169
|
+
? [
|
170
|
+
{
|
171
|
+
type: 'options',
|
172
|
+
name: 'options',
|
173
|
+
label: 'options'
|
174
|
+
}
|
175
|
+
]
|
176
|
+
: [],
|
177
|
+
context: this.grist,
|
178
|
+
objectified: true
|
179
|
+
}
|
180
|
+
}
|
181
|
+
},
|
182
|
+
width: 120
|
183
|
+
},
|
148
184
|
{
|
149
185
|
type: 'number',
|
150
186
|
name: 'quota',
|
@@ -198,7 +234,9 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
198
234
|
description
|
199
235
|
sequence
|
200
236
|
active
|
237
|
+
tag
|
201
238
|
type
|
239
|
+
options
|
202
240
|
quota
|
203
241
|
spec
|
204
242
|
}
|
@@ -215,7 +253,7 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
215
253
|
}
|
216
254
|
|
217
255
|
async _updateDataItems() {
|
218
|
-
let patches = this.
|
256
|
+
let patches = this.grist._data.records
|
219
257
|
if (patches && patches.length) {
|
220
258
|
patches = patches.map(patch => {
|
221
259
|
var patchField = {}
|
@@ -241,14 +279,14 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
241
279
|
}
|
242
280
|
})
|
243
281
|
|
244
|
-
if (!response.errors) this.
|
282
|
+
if (!response.errors) this.grist.fetch()
|
245
283
|
}
|
246
284
|
}
|
247
285
|
|
248
286
|
async _deleteDataItems() {
|
249
287
|
if (!confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) return
|
250
288
|
|
251
|
-
const ids = this.
|
289
|
+
const ids = this.grist.selected.map(record => record.id)
|
252
290
|
if (!(ids && ids.length > 0)) return
|
253
291
|
|
254
292
|
const response = await client.mutate({
|
@@ -264,7 +302,7 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
264
302
|
|
265
303
|
if (response.errors) return
|
266
304
|
|
267
|
-
this.
|
305
|
+
this.grist.fetch()
|
268
306
|
await document.dispatchEvent(
|
269
307
|
new CustomEvent('notify', {
|
270
308
|
detail: {
|
@@ -121,7 +121,7 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
|
|
121
121
|
},
|
122
122
|
filter: 'search',
|
123
123
|
sortable: true,
|
124
|
-
width:
|
124
|
+
width: 120
|
125
125
|
},
|
126
126
|
{
|
127
127
|
type: 'string',
|
@@ -132,19 +132,39 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
|
|
132
132
|
editable: true
|
133
133
|
},
|
134
134
|
filter: 'search',
|
135
|
-
width:
|
135
|
+
width: 150
|
136
136
|
},
|
137
137
|
{
|
138
|
-
type: '
|
139
|
-
name: '
|
140
|
-
|
138
|
+
type: 'object',
|
139
|
+
name: 'dataSet',
|
140
|
+
header: i18next.t('field.dataSet'),
|
141
|
+
record: {
|
142
|
+
editable: false
|
143
|
+
},
|
144
|
+
sortable: true,
|
145
|
+
width: 120
|
146
|
+
},
|
147
|
+
{
|
148
|
+
type: 'json',
|
149
|
+
name: 'partitionKeys',
|
150
|
+
header: i18next.t('field.partitionKeys'),
|
151
|
+
record: {
|
152
|
+
editable: false,
|
153
|
+
renderer: (value, column, record, rowIndex, field) => {
|
154
|
+
return typeof value === 'string' ? value : typeof value === 'object' ? JSON.stringify(value) : ''
|
155
|
+
}
|
156
|
+
},
|
157
|
+
width: 200
|
141
158
|
},
|
142
159
|
{
|
143
160
|
type: 'json',
|
144
161
|
name: 'data',
|
145
162
|
header: i18next.t('field.data'),
|
146
163
|
record: {
|
147
|
-
editable: false
|
164
|
+
editable: false,
|
165
|
+
renderer: (value, column, record, rowIndex, field) => {
|
166
|
+
return typeof value === 'string' ? value : typeof value === 'object' ? JSON.stringify(value) : ''
|
167
|
+
}
|
148
168
|
},
|
149
169
|
width: 200
|
150
170
|
},
|
@@ -152,12 +172,23 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
|
|
152
172
|
type: 'json',
|
153
173
|
name: 'spec',
|
154
174
|
header: i18next.t('field.spec'),
|
175
|
+
record: {
|
176
|
+
editable: false,
|
177
|
+
renderer: (value, column, record, rowIndex, field) => {
|
178
|
+
return typeof value === 'string' ? value : typeof value === 'object' ? JSON.stringify(value) : ''
|
179
|
+
}
|
180
|
+
},
|
181
|
+
width: 200
|
182
|
+
},
|
183
|
+
{
|
184
|
+
type: 'code',
|
185
|
+
name: 'rawData',
|
186
|
+
header: i18next.t('field.raw-data'),
|
155
187
|
record: {
|
156
188
|
editable: false
|
157
189
|
},
|
158
190
|
width: 200
|
159
191
|
},
|
160
|
-
|
161
192
|
{
|
162
193
|
type: 'object',
|
163
194
|
name: 'updater',
|
@@ -171,6 +202,13 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
|
|
171
202
|
header: i18next.t('field.updated_at'),
|
172
203
|
sortable: true,
|
173
204
|
width: 180
|
205
|
+
},
|
206
|
+
{
|
207
|
+
type: 'datetime',
|
208
|
+
name: 'collectedAt',
|
209
|
+
header: i18next.t('field.collected_at'),
|
210
|
+
sortable: true,
|
211
|
+
width: 180
|
174
212
|
}
|
175
213
|
],
|
176
214
|
rows: {
|
@@ -210,7 +248,12 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
|
|
210
248
|
id
|
211
249
|
name
|
212
250
|
description
|
213
|
-
|
251
|
+
dataSet {
|
252
|
+
id
|
253
|
+
name
|
254
|
+
description
|
255
|
+
}
|
256
|
+
partitionKeys
|
214
257
|
data
|
215
258
|
spec
|
216
259
|
updater {
|
@@ -218,6 +261,7 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
|
|
218
261
|
name
|
219
262
|
}
|
220
263
|
updatedAt
|
264
|
+
collectedAt
|
221
265
|
}
|
222
266
|
total
|
223
267
|
}
|