@things-factory/dataset 6.0.25 → 6.0.27

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 (154) hide show
  1. package/README.md +26 -11
  2. package/assets/images/ooc.png +0 -0
  3. package/assets/images/oos.png +0 -0
  4. package/client/{bootstrap.js → bootstrap.ts} +2 -0
  5. package/client/components/{data-entry-form.js → data-entry-form.ts} +30 -33
  6. package/client/components/data-ooc-activity-view.ts +153 -0
  7. package/client/pages/data-archive/{data-archive-list-page.js → data-archive-list-page.ts} +67 -53
  8. package/client/pages/data-archive/{data-archive-request-popup.js → data-archive-request-popup.ts} +41 -39
  9. package/client/pages/data-entry/{data-entry-list-page.js → data-entry-list-page.ts} +41 -38
  10. package/client/pages/data-key-set/{data-key-item-list.js → data-key-item-list.ts} +31 -39
  11. package/client/pages/data-key-set/data-key-set-importer.ts +95 -0
  12. package/client/pages/data-key-set/{data-key-set-list-page.js → data-key-set-list-page.ts} +54 -35
  13. package/client/pages/data-ooc/{data-ooc-list-page.js → data-ooc-list-page.ts} +50 -36
  14. package/client/pages/data-ooc/{data-ooc-view.js → data-ooc-view.ts} +66 -76
  15. package/client/pages/data-report/{data-report-embed-page.js → data-report-embed-page.ts} +25 -34
  16. package/client/pages/data-report/{data-report-list-page.js → data-report-list-page.ts} +49 -43
  17. package/client/pages/data-report/{data-report-samples-page.js → data-report-samples-page.ts} +29 -43
  18. package/client/pages/data-report/{jasper-report-oocs-page.js → jasper-report-oocs-page.ts} +22 -34
  19. package/client/pages/data-report/{jasper-report-samples-crosstab-page.js → jasper-report-samples-crosstab-page.ts} +22 -34
  20. package/client/pages/data-report/{jasper-report-samples-page.js → jasper-report-samples-page.ts} +22 -34
  21. package/client/pages/data-sample/{data-sample-list-page.js → data-sample-list-page.ts} +49 -36
  22. package/client/pages/data-sample/{data-sample-search-page.js → data-sample-search-page.ts} +53 -39
  23. package/client/pages/data-sample/{data-sample-view.js → data-sample-view.ts} +29 -33
  24. package/client/pages/data-sensor/{data-sensor-list-page.js → data-sensor-list-page.ts} +41 -35
  25. package/client/pages/data-set/{data-item-list.js → data-item-list.ts} +31 -37
  26. package/client/pages/data-set/data-set-importer.ts +96 -0
  27. package/client/pages/data-set/{data-set-list-page.js → data-set-list-page.ts} +62 -36
  28. package/client/{route.js → route.ts} +1 -1
  29. package/client/tsconfig.json +11 -0
  30. package/dist-client/bootstrap.d.ts +3 -0
  31. package/dist-client/bootstrap.js +14 -0
  32. package/dist-client/bootstrap.js.map +1 -0
  33. package/dist-client/components/data-entry-form.d.ts +15 -0
  34. package/dist-client/components/data-entry-form.js +83 -0
  35. package/dist-client/components/data-entry-form.js.map +1 -0
  36. package/dist-client/components/data-ooc-activity-view.d.ts +1 -0
  37. package/dist-client/components/data-ooc-activity-view.js +154 -0
  38. package/dist-client/components/data-ooc-activity-view.js.map +1 -0
  39. package/dist-client/index.d.ts +1 -0
  40. package/dist-client/index.js +2 -0
  41. package/dist-client/index.js.map +1 -0
  42. package/dist-client/pages/data-archive/data-archive-list-page.d.ts +71 -0
  43. package/dist-client/pages/data-archive/data-archive-list-page.js +287 -0
  44. package/dist-client/pages/data-archive/data-archive-list-page.js.map +1 -0
  45. package/dist-client/pages/data-archive/data-archive-request-popup.d.ts +1 -0
  46. package/dist-client/pages/data-archive/data-archive-request-popup.js +161 -0
  47. package/dist-client/pages/data-archive/data-archive-request-popup.js.map +1 -0
  48. package/dist-client/pages/data-entry/data-entry-list-page.d.ts +36 -0
  49. package/dist-client/pages/data-entry/data-entry-list-page.js +383 -0
  50. package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -0
  51. package/dist-client/pages/data-key-set/data-key-item-list.d.ts +18 -0
  52. package/dist-client/pages/data-key-set/data-key-item-list.js +188 -0
  53. package/dist-client/pages/data-key-set/data-key-item-list.js.map +1 -0
  54. package/dist-client/pages/data-key-set/data-key-set-importer.d.ts +9 -0
  55. package/dist-client/pages/data-key-set/data-key-set-importer.js +100 -0
  56. package/dist-client/pages/data-key-set/data-key-set-importer.js.map +1 -0
  57. package/dist-client/pages/data-key-set/data-key-set-list-page.d.ts +60 -0
  58. package/dist-client/pages/data-key-set/data-key-set-list-page.js +450 -0
  59. package/dist-client/pages/data-key-set/data-key-set-list-page.js.map +1 -0
  60. package/dist-client/pages/data-ooc/data-ooc-list-page.d.ts +58 -0
  61. package/dist-client/pages/data-ooc/data-ooc-list-page.js +473 -0
  62. package/dist-client/pages/data-ooc/data-ooc-list-page.js.map +1 -0
  63. package/dist-client/pages/data-ooc/data-ooc-view.d.ts +1 -0
  64. package/dist-client/pages/data-ooc/data-ooc-view.js +179 -0
  65. package/dist-client/pages/data-ooc/data-ooc-view.js.map +1 -0
  66. package/dist-client/pages/data-report/data-report-embed-page.d.ts +36 -0
  67. package/dist-client/pages/data-report/data-report-embed-page.js +101 -0
  68. package/dist-client/pages/data-report/data-report-embed-page.js.map +1 -0
  69. package/dist-client/pages/data-report/data-report-list-page.d.ts +36 -0
  70. package/dist-client/pages/data-report/data-report-list-page.js +431 -0
  71. package/dist-client/pages/data-report/data-report-list-page.js.map +1 -0
  72. package/dist-client/pages/data-report/data-report-samples-page.d.ts +32 -0
  73. package/dist-client/pages/data-report/data-report-samples-page.js +164 -0
  74. package/dist-client/pages/data-report/data-report-samples-page.js.map +1 -0
  75. package/dist-client/pages/data-report/jasper-report-oocs-page.d.ts +2 -0
  76. package/dist-client/pages/data-report/jasper-report-oocs-page.js +101 -0
  77. package/dist-client/pages/data-report/jasper-report-oocs-page.js.map +1 -0
  78. package/dist-client/pages/data-report/jasper-report-samples-crosstab-page.d.ts +2 -0
  79. package/dist-client/pages/data-report/jasper-report-samples-crosstab-page.js +101 -0
  80. package/dist-client/pages/data-report/jasper-report-samples-crosstab-page.js.map +1 -0
  81. package/dist-client/pages/data-report/jasper-report-samples-page.d.ts +2 -0
  82. package/dist-client/pages/data-report/jasper-report-samples-page.js +101 -0
  83. package/dist-client/pages/data-report/jasper-report-samples-page.js.map +1 -0
  84. package/dist-client/pages/data-sample/data-sample-list-page.d.ts +58 -0
  85. package/dist-client/pages/data-sample/data-sample-list-page.js +412 -0
  86. package/dist-client/pages/data-sample/data-sample-list-page.js.map +1 -0
  87. package/dist-client/pages/data-sample/data-sample-search-page.d.ts +63 -0
  88. package/dist-client/pages/data-sample/data-sample-search-page.js +413 -0
  89. package/dist-client/pages/data-sample/data-sample-search-page.js.map +1 -0
  90. package/dist-client/pages/data-sample/data-sample-view.d.ts +1 -0
  91. package/dist-client/pages/data-sample/data-sample-view.js +109 -0
  92. package/dist-client/pages/data-sample/data-sample-view.js.map +1 -0
  93. package/dist-client/pages/data-sensor/data-sensor-list-page.d.ts +49 -0
  94. package/dist-client/pages/data-sensor/data-sensor-list-page.js +419 -0
  95. package/dist-client/pages/data-sensor/data-sensor-list-page.js.map +1 -0
  96. package/dist-client/pages/data-set/data-item-list.d.ts +1 -0
  97. package/dist-client/pages/data-set/data-item-list.js +267 -0
  98. package/dist-client/pages/data-set/data-item-list.js.map +1 -0
  99. package/dist-client/pages/data-set/data-set-importer.d.ts +10 -0
  100. package/dist-client/pages/data-set/data-set-importer.js +103 -0
  101. package/dist-client/pages/data-set/data-set-importer.js.map +1 -0
  102. package/dist-client/pages/data-set/data-set-list-page.d.ts +71 -0
  103. package/dist-client/pages/data-set/data-set-list-page.js +759 -0
  104. package/dist-client/pages/data-set/data-set-list-page.js.map +1 -0
  105. package/dist-client/route.d.ts +1 -0
  106. package/dist-client/route.js +47 -0
  107. package/dist-client/route.js.map +1 -0
  108. package/dist-client/tsconfig.tsbuildinfo +1 -0
  109. package/dist-server/controllers/activity-template/activity-ooc.js +59 -0
  110. package/dist-server/controllers/activity-template/activity-ooc.js.map +1 -0
  111. package/dist-server/controllers/create-data-sample.js +38 -1
  112. package/dist-server/controllers/create-data-sample.js.map +1 -1
  113. package/dist-server/controllers/index.js +5 -0
  114. package/dist-server/controllers/index.js.map +1 -1
  115. package/dist-server/index.js +1 -2
  116. package/dist-server/index.js.map +1 -1
  117. package/dist-server/routes.js +2 -2
  118. package/dist-server/routes.js.map +1 -1
  119. package/dist-server/service/data-set/data-set-query.js +5 -4
  120. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  121. package/dist-server/service/data-set/data-set.js +3 -0
  122. package/dist-server/service/data-set/data-set.js.map +1 -1
  123. package/dist-server/service/data-set-history/data-set-history-query.js +4 -3
  124. package/dist-server/service/data-set-history/data-set-history-query.js.map +1 -1
  125. package/dist-server/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +15 -12
  127. package/server/controllers/activity-template/activity-ooc.ts +55 -0
  128. package/server/controllers/create-data-sample.ts +48 -3
  129. package/server/controllers/index.ts +9 -0
  130. package/server/index.ts +1 -2
  131. package/server/routes.ts +2 -4
  132. package/server/service/data-set/data-set-query.ts +5 -4
  133. package/server/service/data-set/data-set.ts +3 -0
  134. package/server/service/data-set-history/data-set-history-query.ts +4 -3
  135. package/server/tsconfig.json +10 -0
  136. package/things-factory.config.js +2 -2
  137. package/translations/en.json +1 -1
  138. package/translations/ko.json +1 -1
  139. package/translations/ms.json +1 -0
  140. package/translations/zh.json +1 -0
  141. package/client/pages/data-key-set/data-key-set-importer.js +0 -105
  142. package/client/pages/data-set/data-set-importer.js +0 -103
  143. package/dist-server/middlewares/index.js +0 -8
  144. package/dist-server/middlewares/index.js.map +0 -1
  145. package/dist-server/migrations/index.js +0 -12
  146. package/dist-server/migrations/index.js.map +0 -1
  147. package/server/middlewares/index.ts +0 -3
  148. package/server/migrations/index.ts +0 -9
  149. package/tsconfig.json +0 -9
  150. /package/assets/{data-report.jpg → images/data-report.jpg} +0 -0
  151. /package/assets/{data-samples.jpg → images/data-samples.jpg} +0 -0
  152. /package/assets/{diagram.jpg → images/dataset-diagram.jpg} +0 -0
  153. /package/assets/{glue-table-indices.png → images/glue-table-indices-for-dataset.png} +0 -0
  154. /package/client/{index.js → index.ts} +0 -0
@@ -0,0 +1,431 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@operato/data-grist';
3
+ import '@operato/board/ox-board-viewer.js';
4
+ import gql from 'graphql-tag';
5
+ import { css, html } from 'lit';
6
+ import { customElement, query, state } from 'lit/decorators.js';
7
+ import { connect } from 'pwa-helpers/connect-mixin';
8
+ import { getRenderer, DataGrist } from '@operato/data-grist';
9
+ import { OxDataUseCase } from '@operato/dataset';
10
+ import { client } from '@operato/graphql';
11
+ import { i18next, localize } from '@operato/i18n';
12
+ import { openPopup } from '@operato/layout';
13
+ import { navigate, PageView, store } from '@operato/shell';
14
+ import { CommonGristStyles, ScrollbarStyles } from '@operato/styles';
15
+ import { OxPopup } from '@operato/popup';
16
+ import { encodeUrlParams } from '@operato/utils';
17
+ import { provider } from '@things-factory/board-ui';
18
+ const USECASE_OPTIONS = () => {
19
+ return ['', ...OxDataUseCase.getUseCaseNames()].map(name => {
20
+ return {
21
+ display: name,
22
+ value: name
23
+ };
24
+ });
25
+ };
26
+ const showMonitorView = (columns, data, column, record, rowIndex) => {
27
+ const { id, name, monitorType, monitorView } = record;
28
+ const title = `${name} - ${i18next.t('title.data-monitor-view')}`;
29
+ switch (monitorType) {
30
+ case 'generated':
31
+ openPopup(html ` <div style="background-color: white;">Under construction</div> `, {
32
+ backdrop: true,
33
+ size: 'large',
34
+ title
35
+ });
36
+ break;
37
+ case 'board':
38
+ const board = {
39
+ id: monitorView
40
+ };
41
+ openPopup(html `
42
+ <ox-board-viewer
43
+ style="background-color: white;"
44
+ .board=${board}
45
+ .provider=${provider}
46
+ hide-fullscreen
47
+ hide-navigation
48
+ ></ox-board-viewer>
49
+ `, {
50
+ closable: true,
51
+ backdrop: true,
52
+ size: 'large',
53
+ title
54
+ });
55
+ // navigate(`board-viewer/${monitorView}?interactive=true&title=${title}`)
56
+ break;
57
+ case 'custom-element':
58
+ break;
59
+ case 'page':
60
+ navigate(monitorView);
61
+ break;
62
+ case 'external':
63
+ window.open(monitorView, '_blank');
64
+ break;
65
+ }
66
+ };
67
+ const showReportView = (columns, data, column, record, rowIndex) => {
68
+ const { id: datasetId, dataKeySet, name, reportType, reportView, reportTemplate } = record;
69
+ const { id: dataKeySetId } = dataKeySet || { id: '' };
70
+ const title = `${name} - ${i18next.t('title.data-report-view')}`;
71
+ switch (reportType) {
72
+ case 'generated':
73
+ openPopup(html ` <div style="background-color: white;">Under construction</div> `, {
74
+ backdrop: true,
75
+ size: 'large',
76
+ title
77
+ });
78
+ break;
79
+ case 'embed':
80
+ break;
81
+ case 'custom-element':
82
+ break;
83
+ case 'page':
84
+ break;
85
+ case 'external':
86
+ window.open(reportView, '_blank');
87
+ break;
88
+ case 'jasper':
89
+ case 'shiny':
90
+ const encodedUrlParams = encodeUrlParams({ datasetId, dataKeySetId, reportType, reportView, reportTemplate });
91
+ navigate(`/data-report-samples/?${encodedUrlParams}`);
92
+ break;
93
+ default:
94
+ break;
95
+ }
96
+ };
97
+ let DataReportListPage = class DataReportListPage extends connect(store)(localize(i18next)(PageView)) {
98
+ constructor() {
99
+ super(...arguments);
100
+ this.mode = 'CARD';
101
+ }
102
+ get context() {
103
+ return {
104
+ search: {
105
+ handler: (search) => {
106
+ this.grist.searchText = search;
107
+ },
108
+ placeholder: i18next.t('title.data-report list'),
109
+ value: this.grist.searchText
110
+ },
111
+ filter: {
112
+ handler: () => {
113
+ this.grist.toggleHeadroom();
114
+ }
115
+ },
116
+ help: 'dataset/data-report-list'
117
+ };
118
+ }
119
+ render() {
120
+ const mode = 'CARD';
121
+ return html `
122
+ <ox-grist
123
+ .mode=${mode}
124
+ .config=${this.gristConfig}
125
+ .fetchHandler=${this.fetchHandler.bind(this)}
126
+ ?url-params-sensitive=${this.active}
127
+ >
128
+ <div slot="headroom">
129
+ <div id="filters">
130
+ <ox-filters-form autofocus without-search></ox-filters-form>
131
+ </div>
132
+
133
+ <div id="sorters">
134
+ Sort
135
+ <mwc-icon
136
+ @click=${e => {
137
+ const target = e.currentTarget;
138
+ this.sortersControl.open({
139
+ right: 0,
140
+ top: target.offsetTop + target.offsetHeight
141
+ });
142
+ }}
143
+ >expand_more</mwc-icon
144
+ >
145
+ <ox-popup id="sorter-control">
146
+ <ox-sorters-control> </ox-sorters-control>
147
+ </ox-popup>
148
+ </div>
149
+ </div>
150
+ </ox-grist>
151
+ `;
152
+ }
153
+ async pageInitialized(lifecycle) {
154
+ this.gristConfig = {
155
+ list: {
156
+ thumbnail: 'monitorView',
157
+ fields: ['name', 'description'],
158
+ details: ['schedule', 'type', 'useCase', 'latestCollectedAt', 'prevSchedule', 'nextSchedule']
159
+ },
160
+ columns: [
161
+ {
162
+ type: 'gutter',
163
+ gutterName: 'button',
164
+ icon: 'newspaper',
165
+ handlers: {
166
+ click: showReportView
167
+ }
168
+ },
169
+ {
170
+ type: 'gutter',
171
+ gutterName: 'button',
172
+ icon: 'analytics',
173
+ handlers: {
174
+ click: showMonitorView
175
+ }
176
+ },
177
+ {
178
+ type: 'string',
179
+ name: 'name',
180
+ header: i18next.t('field.name'),
181
+ record: {
182
+ editable: false
183
+ },
184
+ filter: 'search',
185
+ sortable: true,
186
+ width: 150
187
+ },
188
+ {
189
+ type: 'string',
190
+ name: 'description',
191
+ header: i18next.t('field.description'),
192
+ record: {
193
+ editable: false
194
+ },
195
+ filter: 'search',
196
+ width: 200
197
+ },
198
+ {
199
+ type: 'select',
200
+ name: 'type',
201
+ label: true,
202
+ header: i18next.t('field.type'),
203
+ record: {
204
+ editable: false,
205
+ options: [
206
+ {},
207
+ {
208
+ display: i18next.t('text.manually collected'),
209
+ value: 'manual'
210
+ },
211
+ {
212
+ display: i18next.t('text.automatically collected'),
213
+ value: 'automatic'
214
+ }
215
+ ]
216
+ },
217
+ sortable: true,
218
+ filter: true,
219
+ width: 60
220
+ },
221
+ {
222
+ type: 'select',
223
+ name: 'useCase',
224
+ label: true,
225
+ header: i18next.t('field.use-case'),
226
+ record: {
227
+ editable: false,
228
+ options: USECASE_OPTIONS
229
+ },
230
+ sortable: true,
231
+ filter: {
232
+ operator: 'eq',
233
+ options: USECASE_OPTIONS /* in case select options type is a function, filter should have its own options */
234
+ },
235
+ width: 80
236
+ },
237
+ {
238
+ type: 'crontab',
239
+ name: 'schedule',
240
+ label: true,
241
+ header: i18next.t('field.schedule'),
242
+ record: {
243
+ editable: false
244
+ },
245
+ width: 80
246
+ },
247
+ {
248
+ type: 'resource-object',
249
+ name: 'entryRole',
250
+ header: i18next.t('field.entry-role'),
251
+ record: {
252
+ editable: false
253
+ },
254
+ width: 120
255
+ },
256
+ {
257
+ type: 'resource-object',
258
+ name: 'supervisoryRole',
259
+ header: i18next.t('field.supervisory-role'),
260
+ record: {
261
+ editable: false
262
+ },
263
+ width: 120
264
+ },
265
+ {
266
+ type: 'datetime',
267
+ name: 'latestCollectedAt',
268
+ label: true,
269
+ header: i18next.t('field.latest-collected-at'),
270
+ record: {
271
+ editable: false
272
+ },
273
+ width: 180
274
+ },
275
+ {
276
+ type: 'datetime',
277
+ name: 'prevSchedule',
278
+ label: true,
279
+ header: i18next.t('field.prev-schedule'),
280
+ record: {
281
+ editable: false
282
+ },
283
+ width: 180
284
+ },
285
+ {
286
+ type: 'datetime',
287
+ name: 'nextSchedule',
288
+ label: true,
289
+ header: i18next.t('field.next-schedule'),
290
+ record: {
291
+ editable: false
292
+ },
293
+ width: 180
294
+ },
295
+ {
296
+ type: 'string',
297
+ name: 'monitorView',
298
+ hidden: true,
299
+ record: {
300
+ editable: false,
301
+ renderer: function (value, column, record, rowIndex, field) {
302
+ var _a;
303
+ const type = record.monitorType !== 'board' ? 'string' : 'image';
304
+ value = record.monitorType !== 'board' ? value : (_a = record.monitorBoard) === null || _a === void 0 ? void 0 : _a.thumbnail;
305
+ return getRenderer(type)(value, column, record, rowIndex, field);
306
+ }
307
+ }
308
+ }
309
+ ],
310
+ rows: {
311
+ selectable: {
312
+ multiple: false
313
+ },
314
+ handlers: {
315
+ click: showReportView
316
+ },
317
+ classifier: function (record, rowIndex) { }
318
+ },
319
+ sorters: [
320
+ {
321
+ name: 'name'
322
+ }
323
+ ]
324
+ };
325
+ }
326
+ async fetchHandler({ page, limit, sortings = [], filters = [] }) {
327
+ const response = await client.query({
328
+ query: gql `
329
+ query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
330
+ responses: dataSetsForReport(filters: $filters, pagination: $pagination, sortings: $sortings) {
331
+ items {
332
+ id
333
+ dataKeySet {
334
+ id
335
+ name
336
+ }
337
+ name
338
+ description
339
+ partitionKeys
340
+ active
341
+ type
342
+ useCase
343
+ schedule
344
+ timezone
345
+ entryRole {
346
+ id
347
+ name
348
+ }
349
+ supervisoryRole {
350
+ id
351
+ name
352
+ }
353
+ monitorType
354
+ monitorView
355
+ monitorBoard {
356
+ thumbnail
357
+ }
358
+ reportType
359
+ reportView
360
+ reportTemplate
361
+ updater {
362
+ id
363
+ name
364
+ }
365
+ updatedAt
366
+ dataItems {
367
+ name
368
+ description
369
+ active
370
+ tag
371
+ type
372
+ unit
373
+ options
374
+ quota
375
+ spec
376
+ }
377
+ latestCollectedAt
378
+ nextSchedule
379
+ prevSchedule
380
+ }
381
+ total
382
+ }
383
+ }
384
+ `,
385
+ variables: {
386
+ filters,
387
+ pagination: { page, limit },
388
+ sortings
389
+ }
390
+ });
391
+ return {
392
+ total: response.data.responses.total || 0,
393
+ records: response.data.responses.items || []
394
+ };
395
+ }
396
+ };
397
+ DataReportListPage.styles = [
398
+ ScrollbarStyles,
399
+ CommonGristStyles,
400
+ css `
401
+ :host {
402
+ display: flex;
403
+
404
+ width: 100%;
405
+
406
+ --grid-record-emphasized-background-color: red;
407
+ --grid-record-emphasized-color: yellow;
408
+ }
409
+ `
410
+ ];
411
+ __decorate([
412
+ state(),
413
+ __metadata("design:type", Object)
414
+ ], DataReportListPage.prototype, "gristConfig", void 0);
415
+ __decorate([
416
+ state(),
417
+ __metadata("design:type", String)
418
+ ], DataReportListPage.prototype, "mode", void 0);
419
+ __decorate([
420
+ query('ox-grist'),
421
+ __metadata("design:type", DataGrist)
422
+ ], DataReportListPage.prototype, "grist", void 0);
423
+ __decorate([
424
+ query('#sorter-control'),
425
+ __metadata("design:type", OxPopup)
426
+ ], DataReportListPage.prototype, "sortersControl", void 0);
427
+ DataReportListPage = __decorate([
428
+ customElement('data-report-list-page')
429
+ ], DataReportListPage);
430
+ export { DataReportListPage };
431
+ //# sourceMappingURL=data-report-list-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-report-list-page.js","sourceRoot":"","sources":["../../../client/pages/data-report/data-report-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\nimport '@operato/board/ox-board-viewer.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin'\n\nimport { getEditor, getRenderer, ColumnConfig, DataGrist, FetchOption, SortersControl } from '@operato/data-grist'\nimport { OxDataUseCase } from '@operato/dataset'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { openPopup } from '@operato/layout'\nimport { navigate, PageView, store } from '@operato/shell'\nimport { CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { OxPopup } from '@operato/popup'\nimport { encodeUrlParams } from '@operato/utils'\n\nimport { provider } from '@things-factory/board-ui'\n\nconst USECASE_OPTIONS = () => {\n return ['', ...OxDataUseCase.getUseCaseNames()].map(name => {\n return {\n display: name,\n value: name\n }\n })\n}\n\nconst showMonitorView = (columns, data, column, record, rowIndex) => {\n const { id, name, monitorType, monitorView } = record\n const title = `${name} - ${i18next.t('title.data-monitor-view')}`\n\n switch (monitorType) {\n case 'generated':\n openPopup(html` <div style=\"background-color: white;\">Under construction</div> `, {\n backdrop: true,\n size: 'large',\n title\n })\n break\n\n case 'board':\n const board = {\n id: monitorView\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/${monitorView}?interactive=true&title=${title}`)\n break\n\n case 'custom-element':\n break\n\n case 'page':\n navigate(monitorView)\n break\n\n case 'external':\n window.open(monitorView, '_blank')\n break\n }\n}\n\nconst showReportView = (columns, data, column, record, rowIndex) => {\n const { id: datasetId, dataKeySet, name, reportType, reportView, reportTemplate } = record\n const { id: dataKeySetId } = dataKeySet || { id: '' }\n const title = `${name} - ${i18next.t('title.data-report-view')}`\n\n switch (reportType) {\n case 'generated':\n openPopup(html` <div style=\"background-color: white;\">Under construction</div> `, {\n backdrop: true,\n size: 'large',\n title\n })\n break\n\n case 'embed':\n break\n\n case 'custom-element':\n break\n\n case 'page':\n break\n\n case 'external':\n window.open(reportView, '_blank')\n break\n\n case 'jasper':\n case 'shiny':\n const encodedUrlParams = encodeUrlParams({ datasetId, dataKeySetId, reportType, reportView, reportTemplate })\n navigate(`/data-report-samples/?${encodedUrlParams}`)\n break\n\n default:\n break\n }\n}\n\n@customElement('data-report-list-page')\nexport class DataReportListPage extends connect(store)(localize(i18next)(PageView)) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: flex;\n\n width: 100%;\n\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n `\n ]\n\n @state() gristConfig: any\n @state() mode: 'CARD' | 'GRID' | 'LIST' = 'CARD'\n @query('ox-grist') private grist!: DataGrist\n @query('#sorter-control') private sortersControl!: OxPopup\n\n get context() {\n return {\n search: {\n handler: (search: string) => {\n this.grist.searchText = search\n },\n placeholder: i18next.t('title.data-report list'),\n value: this.grist.searchText\n },\n filter: {\n handler: () => {\n this.grist.toggleHeadroom()\n }\n },\n help: 'dataset/data-report-list'\n }\n }\n\n render() {\n const mode = 'CARD'\n\n return html`\n <ox-grist\n .mode=${mode}\n .config=${this.gristConfig}\n .fetchHandler=${this.fetchHandler.bind(this)}\n ?url-params-sensitive=${this.active}\n >\n <div slot=\"headroom\">\n <div id=\"filters\">\n <ox-filters-form autofocus without-search></ox-filters-form>\n </div>\n\n <div id=\"sorters\">\n Sort\n <mwc-icon\n @click=${e => {\n const target = e.currentTarget\n this.sortersControl.open({\n right: 0,\n top: target.offsetTop + target.offsetHeight\n })\n }}\n >expand_more</mwc-icon\n >\n <ox-popup id=\"sorter-control\">\n <ox-sorters-control> </ox-sorters-control>\n </ox-popup>\n </div>\n </div>\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle) {\n this.gristConfig = {\n list: {\n thumbnail: 'monitorView',\n fields: ['name', 'description'],\n details: ['schedule', 'type', 'useCase', 'latestCollectedAt', 'prevSchedule', 'nextSchedule']\n },\n columns: [\n {\n type: 'gutter',\n gutterName: 'button',\n icon: 'newspaper',\n handlers: {\n click: showReportView\n }\n },\n {\n type: 'gutter',\n gutterName: 'button',\n icon: 'analytics',\n handlers: {\n click: showMonitorView\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: 'monitorView',\n hidden: true,\n record: {\n editable: false,\n renderer: function (value, column, record, rowIndex, field) {\n const type = record.monitorType !== 'board' ? 'string' : 'image'\n value = record.monitorType !== 'board' ? value : record.monitorBoard?.thumbnail\n\n return getRenderer(type)(value, column, record, rowIndex, field)\n }\n }\n }\n ],\n rows: {\n selectable: {\n multiple: false\n },\n handlers: {\n click: showReportView\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!]) {\n responses: dataSetsForReport(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n dataKeySet {\n id\n name\n }\n name\n description\n partitionKeys\n active\n type\n useCase\n schedule\n timezone\n entryRole {\n id\n name\n }\n supervisoryRole {\n id\n name\n }\n monitorType\n monitorView\n monitorBoard {\n thumbnail\n }\n reportType\n reportView\n reportTemplate\n updater {\n id\n name\n }\n updatedAt\n dataItems {\n name\n description\n active\n tag\n type\n unit\n options\n quota\n spec\n }\n latestCollectedAt\n nextSchedule\n prevSchedule\n }\n total\n }\n }\n `,\n variables: {\n filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n return {\n total: response.data.responses.total || 0,\n records: response.data.responses.items || []\n }\n }\n}\n"]}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * data sample report page from 'data-key-set-list-page'
3
+ * dateKeySetId is required
4
+ */
5
+ import '@operato/data-grist';
6
+ import { PageView } from '@operato/shell';
7
+ import { FetchOption } from '@operato/data-grist';
8
+ declare const DataReportSamplesPage_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;
15
+ export declare class DataReportSamplesPage extends DataReportSamplesPage_base {
16
+ static styles: import("lit").CSSResult[];
17
+ dataKeySetId?: string;
18
+ dataKeySet: any;
19
+ container: HTMLIFrameElement;
20
+ get context(): {
21
+ title: string;
22
+ help: string;
23
+ filters: any[];
24
+ };
25
+ getDataKeyFilters(): any;
26
+ render(): import("lit-html").TemplateResult<1>;
27
+ renderTemplate(filters: any): void;
28
+ pageUpdated(changes: any, lifecycle: any): void;
29
+ fetchHandler({ page, limit, sortings, filters }: FetchOption): Promise<void>;
30
+ updated(changes: any): Promise<void>;
31
+ }
32
+ export {};
@@ -0,0 +1,164 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ /**
3
+ * data sample report page from 'data-key-set-list-page'
4
+ * dateKeySetId is required
5
+ */
6
+ import '@operato/data-grist';
7
+ import gql from 'graphql-tag';
8
+ import { css, html } from 'lit';
9
+ import { customElement, query, state } from 'lit/decorators.js';
10
+ import { connect } from 'pwa-helpers/connect-mixin';
11
+ import { client } from '@operato/graphql';
12
+ import { i18next, localize } from '@operato/i18n';
13
+ import { PageView, store } from '@operato/shell';
14
+ import { ScrollbarStyles } from '@operato/styles';
15
+ import { encodeUrlParams } from '@operato/utils';
16
+ let DataReportSamplesPage = class DataReportSamplesPage extends connect(store)(localize(i18next)(PageView)) {
17
+ get context() {
18
+ const today = new Date().toISOString().split('T')[0];
19
+ const filters = [
20
+ {
21
+ name: 'workDateRange',
22
+ type: 'date',
23
+ label: i18next.t('field.work-date'),
24
+ operator: 'between',
25
+ value: [today, today] // not working...
26
+ },
27
+ ...this.getDataKeyFilters()
28
+ ];
29
+ return {
30
+ title: i18next.t('title.data-report samples'),
31
+ help: 'dataset/data-report-samples',
32
+ filters
33
+ };
34
+ }
35
+ getDataKeyFilters() {
36
+ var _a;
37
+ return (((_a = this.dataKeySet) === null || _a === void 0 ? void 0 : _a.dataKeyItems.map((item, index) => {
38
+ return {
39
+ type: 'string',
40
+ name: `key_0${index + 1}`,
41
+ label: i18next.t(item.tKey),
42
+ operator: 'i_like',
43
+ width: 120
44
+ };
45
+ })) || []);
46
+ }
47
+ render() {
48
+ // clear if pre-loaded
49
+ this.container.src = '';
50
+ return html `
51
+ <ox-filters-form-base
52
+ .filters=${this.context.filters}
53
+ @filters-change=${e => {
54
+ console.log('filters changed', e.detail);
55
+ this.renderTemplate(e.detail.filters);
56
+ }}
57
+ ?url-params-sensitive=${this.active}
58
+ ></ox-filters-form-base>
59
+
60
+ <iframe></iframe>
61
+ `;
62
+ }
63
+ renderTemplate(filters) {
64
+ var _a;
65
+ const params = filters.reduce((acc, curr) => ((acc[curr.name] = curr.value), acc), {});
66
+ Object.assign(params, this.lifecycle.params);
67
+ const filterNames = this.getDataKeyFilters().map(x => x.name);
68
+ const dataKeyFilters = filters.filter(x => filterNames.includes(x.name));
69
+ const { workDateRange } = params;
70
+ /** ignoring date conditions */
71
+ if (!workDateRange[0] || !workDateRange[1] || workDateRange[0] > workDateRange[1]) {
72
+ return;
73
+ }
74
+ /** urlencoded params including test values */
75
+ const urlParams = {
76
+ reportType: params.reportType,
77
+ reportView: params.reportView,
78
+ reportTemplate: params.reportTemplate,
79
+ table: 'samples',
80
+ datasetId: params.datasetId,
81
+ dataKeySetId: params.dataKeySetId,
82
+ startDate: workDateRange[0],
83
+ endDate: workDateRange[1],
84
+ dataKeySetItems: JSON.stringify(((_a = this.dataKeySet) === null || _a === void 0 ? void 0 : _a.dataKeyItems) || []),
85
+ dataKeyFilters: JSON.stringify(dataKeyFilters)
86
+ };
87
+ const encodedUrlParams = encodeUrlParams(urlParams);
88
+ const reportUrl = `/data-report/${urlParams.reportType}/`;
89
+ this.container.src = `${reportUrl}?${encodedUrlParams}`;
90
+ }
91
+ pageUpdated(changes, lifecycle) {
92
+ if (this.active) {
93
+ const { dataKeySetId } = lifecycle.params;
94
+ this.dataKeySetId = dataKeySetId;
95
+ return;
96
+ }
97
+ }
98
+ async fetchHandler({ page, limit, sortings = [], filters = [] }) { }
99
+ async updated(changes) {
100
+ if (changes.has('dataKeySetId')) {
101
+ if (!this.dataKeySetId) {
102
+ this.dataKeySet = null;
103
+ return;
104
+ }
105
+ const response = await client.query({
106
+ query: gql `
107
+ query ($id: String!) {
108
+ dataKeySet(id: $id) {
109
+ id
110
+ name
111
+ description
112
+ reportType
113
+ reportView
114
+ dataKeyItems {
115
+ name
116
+ description
117
+ dataKey
118
+ tKey
119
+ }
120
+ }
121
+ }
122
+ `,
123
+ variables: {
124
+ id: this.dataKeySetId
125
+ }
126
+ });
127
+ this.dataKeySet = response.data.dataKeySet;
128
+ }
129
+ }
130
+ };
131
+ DataReportSamplesPage.styles = [
132
+ ScrollbarStyles,
133
+ css `
134
+ :host {
135
+ display: flex;
136
+ flex-direction: column;
137
+ padding: 0;
138
+ }
139
+
140
+ #container {
141
+ flex: 1;
142
+ padding: 0;
143
+ margin: 0;
144
+ border: 0;
145
+ }
146
+ `
147
+ ];
148
+ __decorate([
149
+ state(),
150
+ __metadata("design:type", String)
151
+ ], DataReportSamplesPage.prototype, "dataKeySetId", void 0);
152
+ __decorate([
153
+ state(),
154
+ __metadata("design:type", Object)
155
+ ], DataReportSamplesPage.prototype, "dataKeySet", void 0);
156
+ __decorate([
157
+ query('iframe'),
158
+ __metadata("design:type", HTMLIFrameElement)
159
+ ], DataReportSamplesPage.prototype, "container", void 0);
160
+ DataReportSamplesPage = __decorate([
161
+ customElement('data-report-samples-page')
162
+ ], DataReportSamplesPage);
163
+ export { DataReportSamplesPage };
164
+ //# sourceMappingURL=data-report-samples-page.js.map