@things-factory/dataset 9.1.19 → 10.0.0-beta.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 (67) hide show
  1. package/dist-client/pages/data-archive/data-archive-list-page.d.ts +1 -7
  2. package/dist-client/pages/data-archive/data-archive-list-page.js +42 -77
  3. package/dist-client/pages/data-archive/data-archive-list-page.js.map +1 -1
  4. package/dist-client/pages/data-entry/data-entry-list-page.d.ts +1 -7
  5. package/dist-client/pages/data-entry/data-entry-list-page.js +77 -143
  6. package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -1
  7. package/dist-client/pages/data-key-set/data-key-set-list-page.d.ts +1 -7
  8. package/dist-client/pages/data-key-set/data-key-set-list-page.js +69 -131
  9. package/dist-client/pages/data-key-set/data-key-set-list-page.js.map +1 -1
  10. package/dist-client/pages/data-ooc/data-ooc-list-page.d.ts +0 -6
  11. package/dist-client/pages/data-ooc/data-ooc-list-page.js +87 -166
  12. package/dist-client/pages/data-ooc/data-ooc-list-page.js.map +1 -1
  13. package/dist-client/pages/data-report/data-report-list-page.d.ts +1 -7
  14. package/dist-client/pages/data-report/data-report-list-page.js +71 -132
  15. package/dist-client/pages/data-report/data-report-list-page.js.map +1 -1
  16. package/dist-client/pages/data-report/data-report-samples-page.d.ts +1 -7
  17. package/dist-client/pages/data-report/data-report-samples-page.js +17 -30
  18. package/dist-client/pages/data-report/data-report-samples-page.js.map +1 -1
  19. package/dist-client/pages/data-sample/data-sample-list-page.d.ts +0 -6
  20. package/dist-client/pages/data-sample/data-sample-list-page.js +68 -130
  21. package/dist-client/pages/data-sample/data-sample-list-page.js.map +1 -1
  22. package/dist-client/pages/data-sample/data-sample-search-page.d.ts +1 -7
  23. package/dist-client/pages/data-sample/data-sample-search-page.js +63 -116
  24. package/dist-client/pages/data-sample/data-sample-search-page.js.map +1 -1
  25. package/dist-client/pages/data-sensor/data-sensor-list-page.d.ts +0 -6
  26. package/dist-client/pages/data-sensor/data-sensor-list-page.js +89 -167
  27. package/dist-client/pages/data-sensor/data-sensor-list-page.js.map +1 -1
  28. package/dist-client/pages/data-set/data-set-list-page.d.ts +0 -6
  29. package/dist-client/pages/data-set/data-set-list-page.js +2 -3
  30. package/dist-client/pages/data-set/data-set-list-page.js.map +1 -1
  31. package/dist-client/pages/data-summary/data-summary-list-page.d.ts +1 -7
  32. package/dist-client/pages/data-summary/data-summary-list-page.js +56 -105
  33. package/dist-client/pages/data-summary/data-summary-list-page.js.map +1 -1
  34. package/dist-client/pages/data-summary/data-summary-period-page.d.ts +1 -7
  35. package/dist-client/pages/data-summary/data-summary-period-page.js +50 -90
  36. package/dist-client/pages/data-summary/data-summary-period-page.js.map +1 -1
  37. package/dist-client/pages/data-summary/data-summary-search-page.d.ts +1 -7
  38. package/dist-client/pages/data-summary/data-summary-search-page.js +61 -111
  39. package/dist-client/pages/data-summary/data-summary-search-page.js.map +1 -1
  40. package/dist-client/tsconfig.tsbuildinfo +1 -1
  41. package/dist-server/activities/activity-data-review.js +5 -2
  42. package/dist-server/activities/activity-data-review.js.map +1 -1
  43. package/dist-server/activities/activity-ooc-review.js +4 -1
  44. package/dist-server/activities/activity-ooc-review.js.map +1 -1
  45. package/dist-server/controllers/create-data-ooc.js +2 -1
  46. package/dist-server/controllers/create-data-ooc.js.map +1 -1
  47. package/dist-server/controllers/create-data-sample.js +2 -2
  48. package/dist-server/controllers/create-data-sample.js.map +1 -1
  49. package/dist-server/controllers/issue-data-collection-task.js +9 -5
  50. package/dist-server/controllers/issue-data-collection-task.js.map +1 -1
  51. package/dist-server/controllers/issue-ooc-resolve.js +11 -6
  52. package/dist-server/controllers/issue-ooc-resolve.js.map +1 -1
  53. package/dist-server/controllers/issue-ooc-review.js +9 -6
  54. package/dist-server/controllers/issue-ooc-review.js.map +1 -1
  55. package/dist-server/service/index.d.ts +1 -1
  56. package/dist-server/tsconfig.tsbuildinfo +1 -1
  57. package/package.json +26 -26
  58. package/spec/integration/debug.spec.ts +42 -0
  59. package/spec/integration/ooc-lifecycle.spec.ts +484 -0
  60. package/spec/integration/ooc-workflow.spec.ts +276 -0
  61. package/spec/integration/simple.spec.ts +62 -0
  62. package/spec/unit/controllers/activity-callbacks.spec.ts +609 -0
  63. package/spec/unit/controllers/create-data-ooc.spec.ts +310 -0
  64. package/spec/unit/controllers/issue-ooc-resolve.spec.ts +431 -0
  65. package/spec/unit/controllers/issue-ooc-review.spec.ts +288 -0
  66. package/spec/unit/data-use-case.spec.ts +150 -0
  67. package/spec/unit/ooc-state-transition.spec.ts +233 -0
@@ -8,27 +8,24 @@ import '../../components/checklist-entry-form.js';
8
8
  import gql from 'graphql-tag';
9
9
  import { css, html } from 'lit';
10
10
  import { customElement, query, state } from 'lit/decorators.js';
11
- import { connect } from 'pwa-helpers/connect-mixin';
12
11
  import { DataGrist, getRenderer } from '@operato/data-grist';
13
12
  import { OxDataUseCase } from '@operato/dataset';
14
13
  import { client } from '@operato/graphql';
15
14
  import { i18next, localize } from '@operato/i18n';
16
15
  import { openPopup, notify } from '@operato/layout';
17
- import { InheritedValueType, navigate, PageView, store } from '@operato/shell';
16
+ import { InheritedValueType, navigate, PageView } from '@operato/shell';
18
17
  import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
19
18
  import { provider } from '@things-factory/board-ui/dist-client/board-provider.js';
20
19
  const USECASE_OPTIONS = () => {
21
20
  return ['', ...OxDataUseCase.getUseCaseNames()].map(name => {
22
- return {
23
- display: name,
21
+ return { display: name,
24
22
  value: name
25
23
  };
26
24
  });
27
25
  };
28
26
  const showEntryView = async (columns, data, column, record, rowIndex) => {
29
27
  if (!record.isEntryAllowed) {
30
- notify({
31
- message: 'You are not allowed to enter data for this dataset',
28
+ notify({ message: 'You are not allowed to enter data for this dataset',
32
29
  level: 'error'
33
30
  });
34
31
  return;
@@ -37,24 +34,21 @@ const showEntryView = async (columns, data, column, record, rowIndex) => {
37
34
  const title = `${name} - ${i18next.t('title.data-entry-form')}`;
38
35
  switch (entryType) {
39
36
  case 'generated':
40
- openPopup(html ` <data-entry-form .dataSet=${record} style="background-color: white;"></data-entry-form> `, {
41
- closable: true,
37
+ openPopup(html ` <data-entry-form .dataSet=${record} style="background-color: white;"></data-entry-form> `, { closable: true,
42
38
  backdrop: true,
43
39
  size: 'large',
44
40
  title
45
41
  });
46
42
  break;
47
43
  case 'checklist':
48
- openPopup(html ` <checklist-entry-form .dataSet=${record} style="background-color: white;"></checklist-entry-form> `, {
49
- closable: true,
44
+ openPopup(html ` <checklist-entry-form .dataSet=${record} style="background-color: white;"></checklist-entry-form> `, { closable: true,
50
45
  backdrop: true,
51
46
  size: 'large',
52
47
  title
53
48
  });
54
49
  break;
55
50
  case 'board':
56
- const board = {
57
- id: entryView
51
+ const board = { id: entryView
58
52
  };
59
53
  openPopup(html `
60
54
  <ox-board-viewer
@@ -64,8 +58,7 @@ const showEntryView = async (columns, data, column, record, rowIndex) => {
64
58
  hide-fullscreen
65
59
  hide-navigation
66
60
  ></ox-board-viewer>
67
- `, {
68
- closable: true,
61
+ `, { closable: true,
69
62
  backdrop: true,
70
63
  size: 'large',
71
64
  title
@@ -84,73 +77,60 @@ const showEntryView = async (columns, data, column, record, rowIndex) => {
84
77
  };
85
78
  const issueDataEntry = async (columns, data, column, record, rowIndex) => {
86
79
  if (!record.isSupervisor) {
87
- notify({
88
- message: 'You are not allowed to issue data collection for this dataset',
80
+ notify({ message: 'You are not allowed to issue data collection for this dataset',
89
81
  level: 'error'
90
82
  });
91
83
  return;
92
84
  }
93
- const response = await client.mutate({
94
- mutation: gql `
95
- mutation ($dataSetId: String!) {
96
- issueDataCollection(dataSetId: $dataSetId)
97
- }
85
+ const response = await client.mutate({ mutation: gql `
86
+ mutation ($dataSetId: String!) { issueDataCollection(dataSetId: $dataSetId)
87
+ }
98
88
  `,
99
89
  variables: { dataSetId: record.id }
100
90
  });
101
91
  if (response.errors) {
102
- notify({
103
- message: response.errors[0].message,
92
+ notify({ message: response.errors[0].message,
104
93
  level: 'error'
105
94
  });
106
95
  }
107
96
  else {
108
- notify({
109
- message: 'Data entry task issued successfully'
97
+ notify({ message: 'Data entry task issued successfully'
110
98
  });
111
99
  }
112
100
  };
113
- let DataEntryListPage = class DataEntryListPage extends connect(store)(localize(i18next)(PageView)) {
101
+ let DataEntryListPage = class DataEntryListPage extends localize(i18next)(PageView) {
114
102
  static { this.styles = [
115
103
  ScrollbarStyles,
116
104
  CommonHeaderStyles,
117
105
  css `
118
- :host {
119
- display: flex;
106
+ :host { display: flex;
120
107
 
121
108
  width: 100%;
122
109
 
123
110
  --grid-record-emphasized-background-color: #8b0000;
124
111
  --grid-record-emphasized-color: #ff6b6b;
125
- }
112
+ }
126
113
 
127
- ox-grist {
128
- overflow-y: auto;
114
+ ox-grist { overflow-y: auto;
129
115
  flex: 1;
130
- }
116
+ }
131
117
 
132
- .header {
133
- grid-template-areas: 'filters actions';
134
- }
118
+ .header { grid-template-areas: 'filters actions';
119
+ }
135
120
  `
136
121
  ]; }
137
122
  get context() {
138
- return {
139
- title: i18next.t('title.data-entry list'),
140
- search: {
141
- handler: (search) => {
123
+ return { title: i18next.t('title.data-entry list'),
124
+ search: { handler: (search) => {
142
125
  this.grist.searchText = search;
143
126
  },
144
- value: this.grist?.searchText || ''
145
- },
146
- filter: {
147
- handler: () => {
127
+ value: this.grist?.searchText || '' },
128
+ filter: { handler: () => {
148
129
  this.grist.toggleHeadroom();
149
130
  }
150
131
  },
151
132
  help: 'dataset/data-entry-list',
152
- toolbar: false
153
- };
133
+ toolbar: false };
154
134
  }
155
135
  render() {
156
136
  return html `
@@ -169,73 +149,59 @@ let DataEntryListPage = class DataEntryListPage extends connect(store)(localize(
169
149
  `;
170
150
  }
171
151
  async pageInitialized(lifecycle) {
172
- this.gristConfig = {
173
- list: {
174
- thumbnail: 'entryView',
152
+ this.gristConfig = { list: { thumbnail: 'entryView',
175
153
  fields: ['name', 'description'],
176
154
  details: ['schedule', 'type', 'useCase', 'latestCollectedAt', 'prevSchedule', 'nextSchedule']
177
155
  },
178
156
  columns: [
179
- {
180
- type: 'gutter',
157
+ { type: 'gutter',
181
158
  gutterName: 'button',
182
159
  icon: record => (record?.isSupervisor || record?.isEntryAllowed ? 'assignment_add' : ''),
183
160
  iconOnly: false,
184
161
  width: 96,
185
162
  fixed: true,
186
163
  title: record => record?.isSupervisor || record?.isEntryAllowed ? i18next.t('button.assign-data-collection') : '',
187
- handlers: {
188
- click: issueDataEntry
164
+ handlers: { click: issueDataEntry
189
165
  }
190
166
  },
191
- {
192
- type: 'gutter',
167
+ { type: 'gutter',
193
168
  gutterName: 'button',
194
169
  icon: record => (record?.isEntryAllowed ? 'note_alt' : ''),
195
170
  iconOnly: false,
196
171
  width: 96,
197
172
  fixed: true,
198
173
  title: record => (record?.isEntryAllowed ? i18next.t('button.enter-data') : ''),
199
- handlers: {
200
- click: showEntryView
174
+ handlers: { click: showEntryView
201
175
  }
202
176
  },
203
- {
204
- type: 'string',
177
+ { type: 'string',
205
178
  name: 'name',
206
179
  header: i18next.t('field.name'),
207
- record: {
208
- editable: false
180
+ record: { editable: false
209
181
  },
210
182
  filter: 'search',
211
183
  sortable: true,
212
184
  width: 150
213
185
  },
214
- {
215
- type: 'string',
186
+ { type: 'string',
216
187
  name: 'description',
217
188
  header: i18next.t('field.description'),
218
- record: {
219
- editable: false
189
+ record: { editable: false
220
190
  },
221
191
  filter: 'search',
222
192
  width: 200
223
193
  },
224
- {
225
- type: 'select',
194
+ { type: 'select',
226
195
  name: 'type',
227
196
  label: true,
228
197
  header: i18next.t('field.type'),
229
- record: {
230
- editable: false,
198
+ record: { editable: false,
231
199
  options: [
232
200
  {},
233
- {
234
- display: i18next.t('text.manually collected'),
201
+ { display: i18next.t('text.manually collected'),
235
202
  value: 'manual'
236
203
  },
237
- {
238
- display: i18next.t('text.automatically collected'),
204
+ { display: i18next.t('text.automatically collected'),
239
205
  value: 'automatic'
240
206
  }
241
207
  ]
@@ -244,86 +210,69 @@ let DataEntryListPage = class DataEntryListPage extends connect(store)(localize(
244
210
  filter: true,
245
211
  width: 60
246
212
  },
247
- {
248
- type: 'select',
213
+ { type: 'select',
249
214
  name: 'useCase',
250
215
  label: true,
251
216
  header: i18next.t('field.use-case'),
252
- record: {
253
- editable: false,
217
+ record: { editable: false,
254
218
  options: USECASE_OPTIONS
255
219
  },
256
220
  sortable: true,
257
- filter: {
258
- operator: 'eq',
221
+ filter: { operator: 'eq',
259
222
  options: USECASE_OPTIONS /* in case select options type is a function, filter should have its own options */
260
223
  },
261
224
  width: 80
262
225
  },
263
- {
264
- type: 'crontab',
226
+ { type: 'crontab',
265
227
  name: 'schedule',
266
228
  label: true,
267
229
  header: i18next.t('field.schedule'),
268
- record: {
269
- editable: false
230
+ record: { editable: false
270
231
  },
271
232
  width: 80
272
233
  },
273
- {
274
- type: 'resource-object',
234
+ { type: 'resource-object',
275
235
  name: 'entryRole',
276
236
  header: i18next.t('field.entry-role'),
277
- record: {
278
- editable: false
237
+ record: { editable: false
279
238
  },
280
239
  width: 120
281
240
  },
282
- {
283
- type: 'resource-object',
241
+ { type: 'resource-object',
284
242
  name: 'supervisoryRole',
285
243
  header: i18next.t('field.supervisory-role'),
286
- record: {
287
- editable: false
244
+ record: { editable: false
288
245
  },
289
246
  width: 120
290
247
  },
291
- {
292
- type: 'datetime',
248
+ { type: 'datetime',
293
249
  name: 'latestCollectedAt',
294
250
  label: true,
295
251
  header: i18next.t('field.latest-collected-at'),
296
- record: {
297
- editable: false
252
+ record: { editable: false
298
253
  },
299
254
  width: 180
300
255
  },
301
- {
302
- type: 'datetime',
256
+ { type: 'datetime',
303
257
  name: 'prevSchedule',
304
258
  label: true,
305
259
  header: i18next.t('field.prev-schedule'),
306
- record: {
307
- editable: false
260
+ record: { editable: false
308
261
  },
309
262
  width: 180
310
263
  },
311
- {
312
- type: 'datetime',
264
+ { type: 'datetime',
313
265
  name: 'nextSchedule',
314
266
  label: true,
315
267
  header: i18next.t('field.next-schedule'),
316
- record: {
317
- editable: false
268
+ record: { editable: false
318
269
  },
319
270
  width: 180
320
271
  },
321
- {
322
- type: 'string',
272
+ { type: 'string',
323
273
  name: 'entryView',
324
274
  hidden: true,
325
- record: {
326
- editable: false,
275
+ record: { editable: false,
327
276
  renderer: function (value, column, record, rowIndex, field) {
328
277
  const type = record.entryType !== 'board' ? 'string' : 'image';
329
278
  let renderedValue;
@@ -336,8 +285,7 @@ let DataEntryListPage = class DataEntryListPage extends connect(store)(localize(
336
285
  return getRenderer(type)(renderedValue, column, record, rowIndex, field);
337
286
  }
338
287
  },
339
- handlers: {
340
- click: (columns, data, column, record, rowIndex) => {
288
+ handlers: { click: (columns, data, column, record, rowIndex) => {
341
289
  if (record?.isEntryAllowed) {
342
290
  showEntryView(columns, data, column, record, rowIndex);
343
291
  }
@@ -345,33 +293,26 @@ let DataEntryListPage = class DataEntryListPage extends connect(store)(localize(
345
293
  }
346
294
  }
347
295
  ],
348
- rows: {
349
- appendable: false,
296
+ rows: { appendable: false,
350
297
  editable: false,
351
- selectable: {
352
- multiple: false
298
+ selectable: { multiple: false
353
299
  },
354
300
  classifier: function (record, rowIndex) { }
355
301
  },
356
302
  sorters: [
357
- {
358
- name: 'name'
303
+ { name: 'name'
359
304
  }
360
305
  ]
361
306
  };
362
307
  }
363
308
  async fetchHandler({ page, limit, sortings = [], filters = [] }) {
364
- const response = await client.query({
365
- query: gql `
366
- query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!], $inherited: InheritedValueType) {
367
- responses: dataSetsForEntry(
309
+ const response = await client.query({ query: gql `
310
+ query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!], $inherited: InheritedValueType) { responses: dataSetsForEntry(
368
311
  filters: $filters
369
312
  pagination: $pagination
370
313
  sortings: $sortings
371
314
  inherited: $inherited
372
- ) {
373
- items {
374
- id
315
+ ) { items { id
375
316
  name
376
317
  description
377
318
  partitionKeys
@@ -382,30 +323,25 @@ let DataEntryListPage = class DataEntryListPage extends connect(store)(localize(
382
323
  timezone
383
324
  isSupervisor
384
325
  isEntryAllowed
385
- entryRole {
386
- id
326
+ entryRole { id
387
327
  name
388
- }
389
- supervisoryRole {
390
- id
328
+ }
329
+ supervisoryRole { id
391
330
  name
392
- }
331
+ }
393
332
  entryType
394
333
  entryView
395
- entryBoard {
396
- thumbnail
397
- }
334
+ entryBoard { thumbnail
335
+ }
398
336
  monitorType
399
337
  monitorView
400
- updater {
401
- id
338
+ updater { id
402
339
  name
403
- }
340
+ }
404
341
  reportType
405
342
  reportView
406
343
  updatedAt
407
- dataItems {
408
- name
344
+ dataItems { name
409
345
  description
410
346
  active
411
347
  hidden
@@ -418,25 +354,23 @@ let DataEntryListPage = class DataEntryListPage extends connect(store)(localize(
418
354
  quota
419
355
  spec
420
356
  stat
421
- }
357
+ }
422
358
  latestCollectedAt
423
359
  nextSchedule
424
360
  prevSchedule
425
361
  nextSummarySchedule
426
- }
362
+ }
427
363
  total
428
- }
429
- }
364
+ }
365
+ }
430
366
  `,
431
- variables: {
432
- filters,
367
+ variables: { filters,
433
368
  pagination: { page, limit },
434
369
  sortings,
435
370
  inherited: InheritedValueType.Include
436
371
  }
437
372
  });
438
- return {
439
- total: response.data.responses.total || 0,
373
+ return { total: response.data.responses.total || 0,
440
374
  records: response.data.responses.items || []
441
375
  };
442
376
  }
@@ -1 +1 @@
1
- {"version":3,"file":"data-entry-list-page.js","sourceRoot":"","sources":["../../../client/pages/data-entry/data-entry-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/data-grist'\nimport '@operato/context/ox-context-page-toolbar.js'\nimport '@operato/board/ox-board-viewer.js'\nimport '../../components/data-entry-form.js'\nimport '../../components/checklist-entry-form.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { connect } from 'pwa-helpers/connect-mixin'\n\nimport { ColumnConfig, DataGrist, FetchOption, SortersControl, getRenderer } from '@operato/data-grist'\nimport { OxDataUseCase } from '@operato/dataset'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { openPopup, notify } from '@operato/layout'\nimport { InheritedValueType, navigate, PageView, store } from '@operato/shell'\nimport { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { provider } from '@things-factory/board-ui/dist-client/board-provider.js'\n\nconst USECASE_OPTIONS = () => {\n return ['', ...OxDataUseCase.getUseCaseNames()].map(name => {\n return {\n display: name,\n value: name\n }\n })\n}\n\nconst showEntryView = async (columns, data, column, record, rowIndex) => {\n if (!record.isEntryAllowed) {\n notify({\n message: 'You are not allowed to enter data for this dataset',\n level: 'error'\n })\n return\n }\n\n const { name, entryType, entryView } = record\n const title = `${name} - ${i18next.t('title.data-entry-form')}`\n\n switch (entryType) {\n case 'generated':\n openPopup(html` <data-entry-form .dataSet=${record} style=\"background-color: white;\"></data-entry-form> `, {\n closable: true,\n backdrop: true,\n size: 'large',\n title\n })\n break\n\n case 'checklist':\n openPopup(\n html` <checklist-entry-form .dataSet=${record} style=\"background-color: white;\"></checklist-entry-form> `,\n {\n closable: true,\n backdrop: true,\n size: 'large',\n title\n }\n )\n break\n\n case 'board':\n const board = {\n id: entryView\n }\n openPopup(\n html`\n <ox-board-viewer\n style=\"background-color: white;\"\n .board=${board}\n .provider=${provider}\n hide-fullscreen\n hide-navigation\n ></ox-board-viewer>\n `,\n {\n closable: true,\n backdrop: true,\n size: 'large',\n title\n }\n )\n\n // navigate(`board-viewer/${entryView}?interactive=true&title=${title}`)\n break\n\n case 'custom-element':\n break\n\n case 'page':\n navigate(`${entryView}/${record.id}`)\n break\n\n case 'external':\n window.open(entryView, '_blank')\n break\n }\n}\n\nconst issueDataEntry = async (columns, data, column, record, rowIndex) => {\n if (!record.isSupervisor) {\n notify({\n message: 'You are not allowed to issue data collection for this dataset',\n level: 'error'\n })\n return\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($dataSetId: String!) {\n issueDataCollection(dataSetId: $dataSetId)\n }\n `,\n variables: { dataSetId: record.id }\n })\n\n if (response.errors) {\n notify({\n message: response.errors[0].message,\n level: 'error'\n })\n } else {\n notify({\n message: 'Data entry task issued successfully'\n })\n }\n}\n\n@customElement('data-entry-list-page')\nexport class DataEntryListPage extends connect(store)(localize(i18next)(PageView)) {\n static styles = [\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n\n width: 100%;\n\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n .header {\n grid-template-areas: 'filters actions';\n }\n `\n ]\n\n @state() private gristConfig: any\n\n @query('ox-grist') private grist!: DataGrist\n\n get context() {\n return {\n title: i18next.t('title.data-entry list'),\n search: {\n handler: (search: string) => {\n this.grist.searchText = search\n },\n value: this.grist?.searchText || ''\n },\n filter: {\n handler: () => {\n this.grist.toggleHeadroom()\n }\n },\n help: 'dataset/data-entry-list',\n toolbar: false\n }\n }\n\n render() {\n return html`\n <ox-grist\n mode=\"CARD\"\n .config=${this.gristConfig}\n .fetchHandler=${this.fetchHandler.bind(this)}\n ?url-params-sensitive=${this.active}\n >\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form autofocus without-search></ox-filters-form>\n </div>\n </div>\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle) {\n this.gristConfig = {\n list: {\n thumbnail: 'entryView',\n fields: ['name', 'description'],\n details: ['schedule', 'type', 'useCase', 'latestCollectedAt', 'prevSchedule', 'nextSchedule']\n },\n columns: [\n {\n type: 'gutter',\n gutterName: 'button',\n icon: record => (record?.isSupervisor || record?.isEntryAllowed ? 'assignment_add' : ''),\n iconOnly: false,\n width: 96,\n fixed: true,\n title: record =>\n record?.isSupervisor || record?.isEntryAllowed ? i18next.t('button.assign-data-collection') : '',\n handlers: {\n click: issueDataEntry\n }\n },\n {\n type: 'gutter',\n gutterName: 'button',\n icon: record => (record?.isEntryAllowed ? 'note_alt' : ''),\n iconOnly: false,\n width: 96,\n fixed: true,\n title: record => (record?.isEntryAllowed ? i18next.t('button.enter-data') : ''),\n handlers: {\n click: showEntryView\n }\n },\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n record: {\n editable: false\n },\n filter: 'search',\n sortable: true,\n width: 150\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n record: {\n editable: false\n },\n filter: 'search',\n width: 200\n },\n {\n type: 'select',\n name: 'type',\n label: true,\n header: i18next.t('field.type'),\n record: {\n editable: false,\n options: [\n {},\n {\n display: i18next.t('text.manually collected'),\n value: 'manual'\n },\n {\n display: i18next.t('text.automatically collected'),\n value: 'automatic'\n }\n ]\n },\n sortable: true,\n filter: true,\n width: 60\n },\n {\n type: 'select',\n name: 'useCase',\n label: true,\n header: i18next.t('field.use-case'),\n record: {\n editable: false,\n options: USECASE_OPTIONS\n },\n sortable: true,\n filter: {\n operator: 'eq',\n options: USECASE_OPTIONS /* in case select options type is a function, filter should have its own options */\n },\n width: 80\n },\n {\n type: 'crontab',\n name: 'schedule',\n label: true,\n header: i18next.t('field.schedule'),\n record: {\n editable: false\n },\n width: 80\n },\n {\n type: 'resource-object',\n name: 'entryRole',\n header: i18next.t('field.entry-role'),\n record: {\n editable: false\n },\n width: 120\n },\n {\n type: 'resource-object',\n name: 'supervisoryRole',\n header: i18next.t('field.supervisory-role'),\n record: {\n editable: false\n },\n width: 120\n },\n {\n type: 'datetime',\n name: 'latestCollectedAt',\n label: true,\n header: i18next.t('field.latest-collected-at'),\n record: {\n editable: false\n },\n width: 180\n },\n {\n type: 'datetime',\n name: 'prevSchedule',\n label: true,\n header: i18next.t('field.prev-schedule'),\n record: {\n editable: false\n },\n width: 180\n },\n {\n type: 'datetime',\n name: 'nextSchedule',\n label: true,\n header: i18next.t('field.next-schedule'),\n record: {\n editable: false\n },\n width: 180\n },\n {\n type: 'string',\n name: 'entryView',\n hidden: true,\n record: {\n editable: false,\n renderer: function (value, column, record, rowIndex, field) {\n const type = record.entryType !== 'board' ? 'string' : 'image'\n\n let renderedValue\n\n if (record.entryType === 'board' && record.entryBoard?.thumbnail) {\n renderedValue = record.entryBoard.thumbnail\n } else {\n renderedValue = html`<md-icon style=\"--md-icon-size: 64px;\">assignment_add</md-icon>`\n }\n\n return getRenderer(type)(renderedValue, column, record, rowIndex, field)\n }\n },\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n if (record?.isEntryAllowed) {\n showEntryView(columns, data, column, record, rowIndex)\n }\n }\n }\n }\n ],\n rows: {\n appendable: false,\n editable: false,\n selectable: {\n multiple: false\n },\n classifier: function (record, rowIndex) {}\n },\n sorters: [\n {\n name: 'name'\n }\n ]\n }\n }\n\n async fetchHandler({ page, limit, sortings = [], filters = [] }: FetchOption) {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!], $inherited: InheritedValueType) {\n responses: dataSetsForEntry(\n filters: $filters\n pagination: $pagination\n sortings: $sortings\n inherited: $inherited\n ) {\n items {\n id\n name\n description\n partitionKeys\n active\n type\n useCase\n schedule\n timezone\n isSupervisor\n isEntryAllowed\n entryRole {\n id\n name\n }\n supervisoryRole {\n id\n name\n }\n entryType\n entryView\n entryBoard {\n thumbnail\n }\n monitorType\n monitorView\n updater {\n id\n name\n }\n reportType\n reportView\n updatedAt\n dataItems {\n name\n description\n active\n hidden\n tag\n group\n subgroup\n type\n unit\n options\n quota\n spec\n stat\n }\n latestCollectedAt\n nextSchedule\n prevSchedule\n nextSummarySchedule\n }\n total\n }\n }\n `,\n variables: {\n filters,\n pagination: { page, limit },\n sortings,\n inherited: InheritedValueType.Include\n }\n })\n\n return {\n total: response.data.responses.total || 0,\n records: response.data.responses.items || []\n }\n }\n}\n"]}
1
+ {"version":3,"file":"data-entry-list-page.js","sourceRoot":"","sources":["../../../client/pages/data-entry/data-entry-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/data-grist'\nimport '@operato/context/ox-context-page-toolbar.js'\nimport '@operato/board/ox-board-viewer.js'\nimport '../../components/data-entry-form.js'\nimport '../../components/checklist-entry-form.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { ColumnConfig, DataGrist, FetchOption, SortersControl, getRenderer } from '@operato/data-grist'\nimport { OxDataUseCase } from '@operato/dataset'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { openPopup, notify } from '@operato/layout'\nimport { InheritedValueType, navigate, PageView } from '@operato/shell'\nimport { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { provider } from '@things-factory/board-ui/dist-client/board-provider.js'\n\nconst USECASE_OPTIONS = () => { return ['', ...OxDataUseCase.getUseCaseNames()].map(name => { return { display: name,\n value: name\n }\n })\n}\n\nconst showEntryView = async (columns, data, column, record, rowIndex) => { if (!record.isEntryAllowed) { notify({ message: 'You are not allowed to enter data for this dataset',\n level: 'error'\n })\n return\n }\n\n const { name, entryType, entryView } = record\n const title = `${name} - ${i18next.t('title.data-entry-form')}`\n\n switch (entryType) { case 'generated':\n openPopup(html` <data-entry-form .dataSet=${record} style=\"background-color: white;\"></data-entry-form> `, { closable: true,\n backdrop: true,\n size: 'large',\n title\n })\n break\n\n case 'checklist':\n openPopup(\n html` <checklist-entry-form .dataSet=${record} style=\"background-color: white;\"></checklist-entry-form> `,\n { closable: true,\n backdrop: true,\n size: 'large',\n title\n }\n )\n break\n\n case 'board':\n const board = { id: entryView\n }\n openPopup(\n html`\n <ox-board-viewer\n style=\"background-color: white;\"\n .board=${board}\n .provider=${provider}\n hide-fullscreen\n hide-navigation\n ></ox-board-viewer>\n `,\n { closable: true,\n backdrop: true,\n size: 'large',\n title\n }\n )\n\n // navigate(`board-viewer/${entryView}?interactive=true&title=${title}`)\n break\n\n case 'custom-element':\n break\n\n case 'page':\n navigate(`${entryView}/${record.id}`)\n break\n\n case 'external':\n window.open(entryView, '_blank')\n break\n }\n}\n\nconst issueDataEntry = async (columns, data, column, record, rowIndex) => { if (!record.isSupervisor) { notify({ message: 'You are not allowed to issue data collection for this dataset',\n level: 'error'\n })\n return\n }\n\n const response = await client.mutate({ mutation: gql`\n mutation ($dataSetId: String!) { issueDataCollection(dataSetId: $dataSetId)\n }\n `,\n variables: { dataSetId: record.id }\n })\n\n if (response.errors) { notify({ message: response.errors[0].message,\n level: 'error'\n })\n } else { notify({ message: 'Data entry task issued successfully'\n })\n }\n}\n\n@customElement('data-entry-list-page')\nexport class DataEntryListPage extends localize(i18next)(PageView) { static styles = [\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host { display: flex;\n\n width: 100%;\n\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n ox-grist { overflow-y: auto;\n flex: 1;\n }\n\n .header { grid-template-areas: 'filters actions';\n }\n `\n ]\n\n @state() private gristConfig: any\n\n @query('ox-grist') private grist!: DataGrist\n\n get context() { return { title: i18next.t('title.data-entry list'),\n search: { handler: (search: string) => { this.grist.searchText = search\n },\n value: this.grist?.searchText || ''\n },\n filter: { handler: () => { this.grist.toggleHeadroom()\n }\n },\n help: 'dataset/data-entry-list',\n toolbar: false\n }\n }\n\n render() { return html`\n <ox-grist\n mode=\"CARD\"\n .config=${this.gristConfig}\n .fetchHandler=${this.fetchHandler.bind(this)}\n ?url-params-sensitive=${this.active}\n >\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form autofocus without-search></ox-filters-form>\n </div>\n </div>\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle) { this.gristConfig = { list: { thumbnail: 'entryView',\n fields: ['name', 'description'],\n details: ['schedule', 'type', 'useCase', 'latestCollectedAt', 'prevSchedule', 'nextSchedule']\n },\n columns: [\n { type: 'gutter',\n gutterName: 'button',\n icon: record => (record?.isSupervisor || record?.isEntryAllowed ? 'assignment_add' : ''),\n iconOnly: false,\n width: 96,\n fixed: true,\n title: record =>\n record?.isSupervisor || record?.isEntryAllowed ? i18next.t('button.assign-data-collection') : '',\n handlers: { click: issueDataEntry\n }\n },\n { type: 'gutter',\n gutterName: 'button',\n icon: record => (record?.isEntryAllowed ? 'note_alt' : ''),\n iconOnly: false,\n width: 96,\n fixed: true,\n title: record => (record?.isEntryAllowed ? i18next.t('button.enter-data') : ''),\n handlers: { click: showEntryView\n }\n },\n { type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n record: { editable: false\n },\n filter: 'search',\n sortable: true,\n width: 150\n },\n { type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n record: { editable: false\n },\n filter: 'search',\n width: 200\n },\n { type: 'select',\n name: 'type',\n label: true,\n header: i18next.t('field.type'),\n record: { editable: false,\n options: [\n {},\n { display: i18next.t('text.manually collected'),\n value: 'manual'\n },\n { display: i18next.t('text.automatically collected'),\n value: 'automatic'\n }\n ]\n },\n sortable: true,\n filter: true,\n width: 60\n },\n { type: 'select',\n name: 'useCase',\n label: true,\n header: i18next.t('field.use-case'),\n record: { editable: false,\n options: USECASE_OPTIONS\n },\n sortable: true,\n filter: { operator: 'eq',\n options: USECASE_OPTIONS /* in case select options type is a function, filter should have its own options */\n },\n width: 80\n },\n { type: 'crontab',\n name: 'schedule',\n label: true,\n header: i18next.t('field.schedule'),\n record: { editable: false\n },\n width: 80\n },\n { type: 'resource-object',\n name: 'entryRole',\n header: i18next.t('field.entry-role'),\n record: { editable: false\n },\n width: 120\n },\n { type: 'resource-object',\n name: 'supervisoryRole',\n header: i18next.t('field.supervisory-role'),\n record: { editable: false\n },\n width: 120\n },\n { type: 'datetime',\n name: 'latestCollectedAt',\n label: true,\n header: i18next.t('field.latest-collected-at'),\n record: { editable: false\n },\n width: 180\n },\n { type: 'datetime',\n name: 'prevSchedule',\n label: true,\n header: i18next.t('field.prev-schedule'),\n record: { editable: false\n },\n width: 180\n },\n { type: 'datetime',\n name: 'nextSchedule',\n label: true,\n header: i18next.t('field.next-schedule'),\n record: { editable: false\n },\n width: 180\n },\n { type: 'string',\n name: 'entryView',\n hidden: true,\n record: { editable: false,\n renderer: function (value, column, record, rowIndex, field) { const type = record.entryType !== 'board' ? 'string' : 'image'\n\n let renderedValue\n\n if (record.entryType === 'board' && record.entryBoard?.thumbnail) { renderedValue = record.entryBoard.thumbnail\n } else { renderedValue = html`<md-icon style=\"--md-icon-size: 64px;\">assignment_add</md-icon>`\n }\n\n return getRenderer(type)(renderedValue, column, record, rowIndex, field)\n }\n },\n handlers: { click: (columns, data, column, record, rowIndex) => { if (record?.isEntryAllowed) { showEntryView(columns, data, column, record, rowIndex)\n }\n }\n }\n }\n ],\n rows: { appendable: false,\n editable: false,\n selectable: { multiple: false\n },\n classifier: function (record, rowIndex) {}\n },\n sorters: [\n { name: 'name'\n }\n ]\n }\n }\n\n async fetchHandler({ page, limit, sortings = [], filters = [] }: FetchOption) { const response = await client.query({ query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!], $inherited: InheritedValueType) { responses: dataSetsForEntry(\n filters: $filters\n pagination: $pagination\n sortings: $sortings\n inherited: $inherited\n ) { items { id\n name\n description\n partitionKeys\n active\n type\n useCase\n schedule\n timezone\n isSupervisor\n isEntryAllowed\n entryRole { id\n name\n }\n supervisoryRole { id\n name\n }\n entryType\n entryView\n entryBoard { thumbnail\n }\n monitorType\n monitorView\n updater { id\n name\n }\n reportType\n reportView\n updatedAt\n dataItems { name\n description\n active\n hidden\n tag\n group\n subgroup\n type\n unit\n options\n quota\n spec\n stat\n }\n latestCollectedAt\n nextSchedule\n prevSchedule\n nextSummarySchedule\n }\n total\n }\n }\n `,\n variables: { filters,\n pagination: { page, limit },\n sortings,\n inherited: InheritedValueType.Include\n }\n })\n\n return { total: response.data.responses.total || 0,\n records: response.data.responses.items || []\n }\n }\n}\n"]}
@@ -5,13 +5,7 @@ import './data-key-set-importer.js';
5
5
  import './data-key-item-list.js';
6
6
  import { FetchOption } from '@operato/data-grist';
7
7
  import { PageView } from '@operato/shell';
8
- declare const DataKeySetListPage_base: (new (...args: any[]) => {
9
- _storeUnsubscribe: import("redux").Unsubscribe;
10
- connectedCallback(): void;
11
- disconnectedCallback(): void;
12
- stateChanged(_state: unknown): void;
13
- readonly isConnected: boolean;
14
- }) & (new (...args: any[]) => import("lit").LitElement) & typeof PageView;
8
+ declare const DataKeySetListPage_base: (new (...args: any[]) => import("lit").LitElement) & typeof PageView;
15
9
  export declare class DataKeySetListPage extends DataKeySetListPage_base {
16
10
  static styles: import("lit").CSSResult[];
17
11
  gristConfig: any;