@things-factory/dataset 5.0.1 → 5.0.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.
Files changed (66) hide show
  1. package/client/pages/data-key-set/data-key-item-list.js +196 -0
  2. package/client/pages/data-key-set/data-key-set-importer.js +107 -0
  3. package/client/pages/data-key-set/data-key-set-list-page.js +354 -0
  4. package/client/pages/data-ooc/data-ooc-list-page.js +60 -0
  5. package/client/pages/data-sample/data-sample-list-page.js +60 -0
  6. package/client/pages/data-sample/data-sample-search-page.js +406 -0
  7. package/client/pages/data-sample/data-sample-view.js +1 -49
  8. package/client/pages/data-set/data-set-list-page.js +20 -1
  9. package/client/route.js +9 -1
  10. package/dist-server/controllers/create-data-sample.js +15 -3
  11. package/dist-server/controllers/create-data-sample.js.map +1 -1
  12. package/dist-server/service/data-key-set/data-key-item-type.js +58 -0
  13. package/dist-server/service/data-key-set/data-key-item-type.js.map +1 -0
  14. package/dist-server/service/data-key-set/data-key-set-mutation.js +179 -0
  15. package/dist-server/service/data-key-set/data-key-set-mutation.js.map +1 -0
  16. package/dist-server/service/data-key-set/data-key-set-query.js +110 -0
  17. package/dist-server/service/data-key-set/data-key-set-query.js.map +1 -0
  18. package/dist-server/service/data-key-set/data-key-set-type.js +94 -0
  19. package/dist-server/service/data-key-set/data-key-set-type.js.map +1 -0
  20. package/dist-server/service/data-key-set/data-key-set.js +101 -0
  21. package/dist-server/service/data-key-set/data-key-set.js.map +1 -0
  22. package/dist-server/service/data-key-set/index.js +9 -0
  23. package/dist-server/service/data-key-set/index.js.map +1 -0
  24. package/dist-server/service/data-ooc/data-ooc.js +32 -0
  25. package/dist-server/service/data-ooc/data-ooc.js.map +1 -1
  26. package/dist-server/service/data-sample/data-sample-query.js +29 -1
  27. package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
  28. package/dist-server/service/data-sample/data-sample.js +42 -0
  29. package/dist-server/service/data-sample/data-sample.js.map +1 -1
  30. package/dist-server/service/data-set/data-item-type.js +1 -1
  31. package/dist-server/service/data-set/data-item-type.js.map +1 -1
  32. package/dist-server/service/data-set/data-set-mutation.js +8 -8
  33. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  34. package/dist-server/service/data-set/data-set-query.js +16 -1
  35. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  36. package/dist-server/service/data-set/data-set-type.js +14 -6
  37. package/dist-server/service/data-set/data-set-type.js.map +1 -1
  38. package/dist-server/service/data-set/data-set.js +32 -54
  39. package/dist-server/service/data-set/data-set.js.map +1 -1
  40. package/dist-server/service/data-set-history/data-set-history-query.js +3 -1
  41. package/dist-server/service/data-set-history/data-set-history-query.js.map +1 -1
  42. package/dist-server/service/index.js +4 -1
  43. package/dist-server/service/index.js.map +1 -1
  44. package/package.json +3 -3
  45. package/server/controllers/create-data-sample.ts +19 -12
  46. package/server/service/data-key-set/data-key-item-type.ts +31 -0
  47. package/server/service/data-key-set/data-key-set-mutation.ts +198 -0
  48. package/server/service/data-key-set/data-key-set-query.ts +65 -0
  49. package/server/service/data-key-set/data-key-set-type.ts +57 -0
  50. package/server/service/data-key-set/data-key-set.ts +81 -0
  51. package/server/service/data-key-set/index.ts +6 -0
  52. package/server/service/data-ooc/data-ooc.ts +20 -0
  53. package/server/service/data-sample/data-sample-query.ts +29 -0
  54. package/server/service/data-sample/data-sample.ts +34 -0
  55. package/server/service/data-set/data-item-type.ts +1 -1
  56. package/server/service/data-set/data-set-mutation.ts +8 -8
  57. package/server/service/data-set/data-set-query.ts +13 -1
  58. package/server/service/data-set/data-set-type.ts +6 -0
  59. package/server/service/data-set/data-set.ts +24 -48
  60. package/server/service/data-set-history/data-set-history-query.ts +3 -1
  61. package/server/service/index.ts +4 -1
  62. package/things-factory.config.js +8 -0
  63. package/translations/en.json +11 -0
  64. package/translations/ko.json +11 -0
  65. package/translations/ms.json +12 -1
  66. package/translations/zh.json +11 -0
@@ -217,6 +217,61 @@ export class DataOocListPage extends connect(store)(localize(i18next)(PageView))
217
217
  width: 120,
218
218
  imex: true
219
219
  },
220
+ {
221
+ type: 'string',
222
+ name: 'key01',
223
+ header: i18next.t('field.key-01'),
224
+ record: {
225
+ editable: false
226
+ },
227
+ sortable: true,
228
+ width: 120,
229
+ imex: true
230
+ },
231
+ {
232
+ type: 'string',
233
+ name: 'key02',
234
+ header: i18next.t('field.key-02'),
235
+ record: {
236
+ editable: false
237
+ },
238
+ sortable: true,
239
+ width: 120,
240
+ imex: true
241
+ },
242
+ {
243
+ type: 'string',
244
+ name: 'key03',
245
+ header: i18next.t('field.key-03'),
246
+ record: {
247
+ editable: false
248
+ },
249
+ sortable: true,
250
+ width: 120,
251
+ imex: true
252
+ },
253
+ {
254
+ type: 'string',
255
+ name: 'key04',
256
+ header: i18next.t('field.key-04'),
257
+ record: {
258
+ editable: false
259
+ },
260
+ sortable: true,
261
+ width: 120,
262
+ imex: true
263
+ },
264
+ {
265
+ type: 'string',
266
+ name: 'key05',
267
+ header: i18next.t('field.key-05'),
268
+ record: {
269
+ editable: false
270
+ },
271
+ sortable: true,
272
+ width: 120,
273
+ imex: true
274
+ },
220
275
  {
221
276
  type: 'json5',
222
277
  name: 'partitionKeys',
@@ -321,6 +376,11 @@ export class DataOocListPage extends connect(store)(localize(i18next)(PageView))
321
376
  id
322
377
  name
323
378
  }
379
+ key01
380
+ key02
381
+ key03
382
+ key04
383
+ key05
324
384
  partitionKeys
325
385
  dataItems {
326
386
  name
@@ -158,6 +158,61 @@ export class DataSampleListPage extends connect(store)(localize(i18next)(PageVie
158
158
  width: 120,
159
159
  imex: true
160
160
  },
161
+ {
162
+ type: 'string',
163
+ name: 'key01',
164
+ header: i18next.t('field.key-01'),
165
+ record: {
166
+ editable: false
167
+ },
168
+ sortable: true,
169
+ width: 120,
170
+ imex: true
171
+ },
172
+ {
173
+ type: 'string',
174
+ name: 'key02',
175
+ header: i18next.t('field.key-02'),
176
+ record: {
177
+ editable: false
178
+ },
179
+ sortable: true,
180
+ width: 120,
181
+ imex: true
182
+ },
183
+ {
184
+ type: 'string',
185
+ name: 'key03',
186
+ header: i18next.t('field.key-03'),
187
+ record: {
188
+ editable: false
189
+ },
190
+ sortable: true,
191
+ width: 120,
192
+ imex: true
193
+ },
194
+ {
195
+ type: 'string',
196
+ name: 'key04',
197
+ header: i18next.t('field.key-04'),
198
+ record: {
199
+ editable: false
200
+ },
201
+ sortable: true,
202
+ width: 120,
203
+ imex: true
204
+ },
205
+ {
206
+ type: 'string',
207
+ name: 'key05',
208
+ header: i18next.t('field.key-05'),
209
+ record: {
210
+ editable: false
211
+ },
212
+ sortable: true,
213
+ width: 120,
214
+ imex: true
215
+ },
161
216
  {
162
217
  type: 'json5',
163
218
  name: 'partitionKeys',
@@ -284,6 +339,11 @@ export class DataSampleListPage extends connect(store)(localize(i18next)(PageVie
284
339
  name
285
340
  description
286
341
  useCase
342
+ key01
343
+ key02
344
+ key03
345
+ key04
346
+ key05
287
347
  dataSet {
288
348
  id
289
349
  name
@@ -0,0 +1,406 @@
1
+ import '@operato/data-grist'
2
+ import './data-sample-view.js'
3
+
4
+ import gql from 'graphql-tag'
5
+ import { css, html } from 'lit'
6
+ import { connect } from 'pwa-helpers/connect-mixin'
7
+
8
+ import { client } from '@operato/graphql'
9
+ import { i18next, localize } from '@operato/i18n'
10
+ import { openPopup } from '@operato/layout'
11
+ import { PageView, store } from '@operato/shell'
12
+ import { CommonGristStyles, ScrollbarStyles } from '@operato/styles'
13
+ import { isMobileDevice } from '@operato/utils'
14
+
15
+ export class DataSampleSearchPage extends connect(store)(localize(i18next)(PageView)) {
16
+ static get properties() {
17
+ return {
18
+ dataKeySetId: String,
19
+ dataKeySet: Object,
20
+ active: String,
21
+ gristConfig: Object,
22
+ mode: String
23
+ }
24
+ }
25
+
26
+ static get styles() {
27
+ return [
28
+ ScrollbarStyles,
29
+ CommonGristStyles,
30
+ css`
31
+ :host {
32
+ display: flex;
33
+ flex-direction: column;
34
+
35
+ overflow: hidden;
36
+ }
37
+
38
+ ox-grist {
39
+ overflow-y: auto;
40
+ flex: 1;
41
+ }
42
+ `
43
+ ]
44
+ }
45
+
46
+ get context() {
47
+ return {
48
+ title: i18next.t('title.data-sample search'),
49
+ help: 'dataset/data-sample-search',
50
+ actions: [],
51
+ exportable: {
52
+ name: i18next.t('title.data-sample search'),
53
+ data: this._exportableData.bind(this)
54
+ }
55
+ }
56
+ }
57
+
58
+ render() {
59
+ const mode = this.mode || (isMobileDevice() ? 'LIST' : 'GRID')
60
+
61
+ return html`
62
+ <ox-grist
63
+ .mode=${mode}
64
+ .config=${this.gristConfig}
65
+ .fetchHandler=${this.fetchHandler.bind(this)}
66
+ ?url-params-sensitive=${this.active}
67
+ >
68
+ <div slot="headroom">
69
+ <div id="filters">
70
+ <ox-filters-form autofocus></ox-filters-form>
71
+ </div>
72
+
73
+ <div id="sorters">
74
+ Sort
75
+ <mwc-icon
76
+ @click=${e => {
77
+ const target = e.currentTarget
78
+ this.renderRoot.querySelector('#sorter-control').open({
79
+ right: 0,
80
+ top: target.offsetTop + target.offsetHeight
81
+ })
82
+ }}
83
+ >expand_more</mwc-icon
84
+ >
85
+ <ox-popup id="sorter-control">
86
+ <ox-sorters-control> </ox-sorters-control>
87
+ </ox-popup>
88
+ </div>
89
+
90
+ <div id="modes">
91
+ <mwc-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</mwc-icon>
92
+ <mwc-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</mwc-icon>
93
+ <mwc-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>
94
+ </div>
95
+ </div>
96
+ </ox-grist>
97
+ `
98
+ }
99
+
100
+ get grist() {
101
+ return this.renderRoot.querySelector('ox-grist')
102
+ }
103
+
104
+ pageUpdated(changes, lifecycle) {
105
+ if (this.active) {
106
+ this.dataKeySetId = lifecycle.resourceId
107
+ return
108
+ }
109
+ }
110
+
111
+ async updated(changes) {
112
+ if (changes.has('dataKeySetId')) {
113
+ const response = await client.query({
114
+ query: gql`
115
+ query ($id: String!) {
116
+ dataKeySet(id: $id) {
117
+ id
118
+ name
119
+ description
120
+ dataKeyItems {
121
+ name
122
+ description
123
+ dataKey
124
+ tKey
125
+ }
126
+ }
127
+ }
128
+ `,
129
+ variables: {
130
+ id: this.dataKeySetId
131
+ }
132
+ })
133
+
134
+ this.dataKeySet = response.data.dataKeySet
135
+ this.refreshGristConfig()
136
+ }
137
+ }
138
+
139
+ getDataKeyColumns() {
140
+ return (
141
+ this.dataKeySet?.dataKeyItems.map((item, index) => {
142
+ return {
143
+ type: 'string',
144
+ name: `key0${index + 1}`,
145
+ header: i18next.t(item.tKey),
146
+ record: {
147
+ editable: false
148
+ },
149
+ sortable: true,
150
+ filter: 'i_like',
151
+ width: 120,
152
+ imex: true
153
+ }
154
+ }) || []
155
+ )
156
+ }
157
+
158
+ refreshGristConfig() {
159
+ this.gristConfig = {
160
+ list: { fields: ['dataSet', 'data', 'updater', 'updatedAt'] },
161
+ columns: [
162
+ { type: 'gutter', gutterName: 'sequence' },
163
+ { type: 'gutter', gutterName: 'row-selector', multiple: true },
164
+ {
165
+ type: 'gutter',
166
+ gutterName: 'button',
167
+ icon: 'assignment',
168
+ handlers: {
169
+ click: (columns, data, column, record, rowIndex) => {
170
+ openPopup(
171
+ html` <data-sample-view .dataSample=${record} style="background-color: white;"></data-sample-view> `,
172
+ {
173
+ backdrop: true,
174
+ size: 'large',
175
+ title: i18next.t('title.data-sample view')
176
+ }
177
+ )
178
+ }
179
+ }
180
+ },
181
+ {
182
+ type: 'string',
183
+ name: 'name',
184
+ label: true,
185
+ header: i18next.t('field.name'),
186
+ record: {
187
+ editable: false
188
+ },
189
+ filter: 'search',
190
+ sortable: true,
191
+ width: 120,
192
+ imex: true
193
+ },
194
+ {
195
+ type: 'string',
196
+ name: 'description',
197
+ label: true,
198
+ header: i18next.t('field.description'),
199
+ record: {
200
+ editable: false
201
+ },
202
+ filter: 'search',
203
+ width: 150,
204
+ imex: true
205
+ },
206
+ ...this.getDataKeyColumns(),
207
+ {
208
+ type: 'checkbox',
209
+ name: 'ooc',
210
+ header: i18next.t('field.ooc'),
211
+ record: {
212
+ editable: false
213
+ },
214
+ width: 30
215
+ },
216
+ {
217
+ type: 'checkbox',
218
+ name: 'oos',
219
+ header: i18next.t('field.oos'),
220
+ record: {
221
+ editable: false
222
+ },
223
+ width: 30
224
+ },
225
+ {
226
+ type: 'json5',
227
+ name: 'data',
228
+ header: i18next.t('field.data'),
229
+ record: {
230
+ editable: false
231
+ },
232
+ width: 200,
233
+ imex: true
234
+ },
235
+ {
236
+ type: 'string',
237
+ name: 'workDate',
238
+ header: i18next.t('field.work-date'),
239
+ sortable: true,
240
+ width: 80,
241
+ imex: true
242
+ },
243
+ {
244
+ type: 'string',
245
+ name: 'workShift',
246
+ header: i18next.t('field.work-shift'),
247
+ sortable: true,
248
+ width: 40,
249
+ imex: true
250
+ },
251
+ {
252
+ type: 'datetime',
253
+ name: 'collectedAt',
254
+ header: i18next.t('field.collected-at'),
255
+ sortable: true,
256
+ width: 180,
257
+ imex: true
258
+ },
259
+ {
260
+ type: 'resource-object',
261
+ name: 'updater',
262
+ header: i18next.t('field.updater'),
263
+ sortable: true,
264
+ width: 120,
265
+ imex: true
266
+ },
267
+ {
268
+ type: 'datetime',
269
+ name: 'updatedAt',
270
+ header: i18next.t('field.updated_at'),
271
+ sortable: true,
272
+ width: 180,
273
+ imex: true
274
+ }
275
+ ],
276
+ rows: {
277
+ appendable: false,
278
+ selectable: {
279
+ multiple: true
280
+ },
281
+ classifier: function (record, rowIndex) {
282
+ var emphasized
283
+ if (record['oos']) {
284
+ emphasized = ['red']
285
+ } else if (record['ooc']) {
286
+ emphasized = 'orange'
287
+ }
288
+
289
+ return {
290
+ emphasized
291
+ }
292
+ }
293
+ },
294
+ sorters: [
295
+ {
296
+ name: 'collectedAt',
297
+ desc: true
298
+ }
299
+ ]
300
+ }
301
+ }
302
+
303
+ async fetchHandler({ page, limit, sortings = [], filters = [] }) {
304
+ const response = await client.query({
305
+ query: gql`
306
+ query ($dataKeySetId: String!, $filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
307
+ responses: dataSamplesByDataKeySet(
308
+ dataKeySetId: $dataKeySetId
309
+ filters: $filters
310
+ pagination: $pagination
311
+ sortings: $sortings
312
+ ) {
313
+ items {
314
+ id
315
+ name
316
+ description
317
+ useCase
318
+ key01
319
+ key02
320
+ key03
321
+ key04
322
+ key05
323
+ data
324
+ ooc
325
+ oos
326
+ dataSet {
327
+ id
328
+ name
329
+ description
330
+ }
331
+ dataItems {
332
+ name
333
+ description
334
+ tag
335
+ unit
336
+ spec
337
+ }
338
+ judgment
339
+ workDate
340
+ workShift
341
+ updater {
342
+ id
343
+ name
344
+ }
345
+ updatedAt
346
+ collectedAt
347
+ }
348
+ total
349
+ }
350
+ }
351
+ `,
352
+ variables: {
353
+ dataKeySetId: this.dataKeySetId,
354
+ filters,
355
+ pagination: { page, limit },
356
+ sortings
357
+ }
358
+ })
359
+
360
+ return {
361
+ total: response.data.responses.total || 0,
362
+ records: response.data.responses.items || []
363
+ }
364
+ }
365
+
366
+ _exportableData() {
367
+ let records = []
368
+ if (this.grist.selected && this.grist.selected.length > 0) {
369
+ records = this.grist.selected
370
+ } else {
371
+ records = this.grist.data.records
372
+ }
373
+
374
+ var headerSetting = this.grist.compiledConfig.columns
375
+ .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
376
+ .map(column => {
377
+ return column.imex === true
378
+ ? {
379
+ header: column.header.renderer(),
380
+ key: column.name,
381
+ width: column.width,
382
+ type: column.type
383
+ }
384
+ : column.imex
385
+ })
386
+
387
+ var data = records.map(item => {
388
+ return {
389
+ id: item.id,
390
+ ...this.gristConfig.columns
391
+ .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
392
+ .reduce((record, column) => {
393
+ const key = column.imex === true ? column.name : column.imex.key
394
+ record[key] = key
395
+ .split('.')
396
+ .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
397
+ return record
398
+ }, {})
399
+ }
400
+ })
401
+
402
+ return { header: headerSetting, data: data }
403
+ }
404
+ }
405
+
406
+ window.customElements.define('data-sample-search-page', DataSampleSearchPage)
@@ -1,16 +1,13 @@
1
1
  import '@operato/dataset/ox-data-sample-view.js'
2
2
 
3
- import gql from 'graphql-tag'
4
3
  import { css, html, LitElement } from 'lit'
5
4
 
6
- import { client } from '@operato/graphql'
7
5
  import { i18next, localize } from '@operato/i18n'
8
6
  import { ScrollbarStyles } from '@operato/styles'
9
7
 
10
8
  class DataSampleView extends localize(i18next)(LitElement) {
11
9
  static get properties() {
12
10
  return {
13
- dataSet: Object,
14
11
  dataSample: Object
15
12
  }
16
13
  }
@@ -42,58 +39,13 @@ class DataSampleView extends localize(i18next)(LitElement) {
42
39
  ]
43
40
  }
44
41
 
45
- get sampleView() {
46
- return this.renderRoot.querySelector('ox-data-sample-view')
47
- }
48
-
49
42
  render() {
50
43
  return html`
51
44
  <div content>
52
- <ox-data-sample-view .dataSet=${this.dataSet} .dataSample=${this.dataSample}></ox-data-sample-view>
45
+ <ox-data-sample-view .dataSample=${this.dataSample}></ox-data-sample-view>
53
46
  </div>
54
47
  `
55
48
  }
56
-
57
- updated(changes) {
58
- if (changes.has('dataSample')) {
59
- this.fetchDataSet()
60
- }
61
- }
62
-
63
- async fetchDataSet() {
64
- const id = this.dataSample?.dataSet?.id
65
-
66
- if (id) {
67
- const response = await client.query({
68
- query: gql`
69
- query ($id: String!) {
70
- dataSet(id: $id) {
71
- id
72
- name
73
- description
74
- useCase
75
- dataItems {
76
- name
77
- description
78
- active
79
- tag
80
- type
81
- unit
82
- options
83
- quota
84
- spec
85
- }
86
- }
87
- }
88
- `,
89
- variables: {
90
- id: this.dataSample.dataSet.id
91
- }
92
- })
93
-
94
- this.dataSet = response.data.dataSet
95
- }
96
- }
97
49
  }
98
50
 
99
51
  window.customElements.define('data-sample-view', DataSampleView)
@@ -337,6 +337,20 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
337
337
  filter: true,
338
338
  width: 80
339
339
  },
340
+ {
341
+ type: 'resource-object',
342
+ name: 'dataKeySet',
343
+ header: i18next.t('field.data-key-set'),
344
+ record: {
345
+ editable: true,
346
+ options: {
347
+ queryName: 'dataKeySets'
348
+ }
349
+ },
350
+ sortable: true,
351
+ filter: false,
352
+ width: 120
353
+ },
340
354
  {
341
355
  type: 'partition-keys',
342
356
  name: 'partitionKeys',
@@ -385,6 +399,7 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
385
399
  key: 'timezone'
386
400
  }
387
401
  },
402
+
388
403
  {
389
404
  type: 'resource-object',
390
405
  name: 'supervisoryRole',
@@ -396,7 +411,7 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
396
411
  }
397
412
  },
398
413
  sortable: true,
399
- filter: 'like',
414
+ filter: false,
400
415
  width: 120
401
416
  },
402
417
  {
@@ -554,6 +569,10 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
554
569
  useCase
555
570
  schedule
556
571
  timezone
572
+ dataKeySet {
573
+ id
574
+ name
575
+ }
557
576
  entryRole {
558
577
  id
559
578
  name
package/client/route.js CHANGED
@@ -12,6 +12,10 @@ export default function route(page) {
12
12
  import('./pages/data-sample/data-sample-list-page.js')
13
13
  return page
14
14
 
15
+ case 'data-sample-search':
16
+ import('./pages/data-sample/data-sample-search-page.js')
17
+ return page
18
+
15
19
  case 'data-ooc-list':
16
20
  import('./pages/data-ooc/data-ooc-list-page.js')
17
21
  return page
@@ -31,7 +35,7 @@ export default function route(page) {
31
35
  case 'jasper-report-samples-crosstab':
32
36
  import('./pages/data-report/jasper-report-samples-crosstab-page.js')
33
37
  return page
34
-
38
+
35
39
  case 'jasper-report-oocs':
36
40
  import('./pages/data-report/jasper-report-oocs-page.js')
37
41
  return page
@@ -39,5 +43,9 @@ export default function route(page) {
39
43
  case 'data-report-embed':
40
44
  import('./pages/data-report/data-report-embed-page')
41
45
  return page
46
+
47
+ case 'data-key-set-list':
48
+ import('./pages/data-key-set/data-key-set-list-page.js')
49
+ return page
42
50
  }
43
51
  }