@things-factory/dataset 6.0.76 → 6.0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/pages/data-set/data-set-list-page.ts +93 -91
- package/client/pages/data-summary/data-summary-list-page.ts +7 -7
- package/client/pages/data-summary/data-summary-search-page.ts +18 -52
- package/client/pages/data-summary/data-summary-view.ts +4 -4
- package/dist-client/pages/data-set/data-set-list-page.d.ts +1 -0
- package/dist-client/pages/data-set/data-set-list-page.js +88 -92
- package/dist-client/pages/data-set/data-set-list-page.js.map +1 -1
- package/dist-client/pages/data-summary/data-summary-list-page.js +7 -7
- package/dist-client/pages/data-summary/data-summary-list-page.js.map +1 -1
- package/dist-client/pages/data-summary/data-summary-search-page.js +18 -52
- package/dist-client/pages/data-summary/data-summary-search-page.js.map +1 -1
- package/dist-client/pages/data-summary/data-summary-view.js +2 -2
- package/dist-client/pages/data-summary/data-summary-view.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/controllers/generate-data-summary.js +156 -13
- package/dist-server/controllers/generate-data-summary.js.map +1 -1
- package/dist-server/routes.js +20 -0
- package/dist-server/routes.js.map +1 -1
- package/dist-server/service/data-set/data-set-type.js +8 -0
- package/dist-server/service/data-set/data-set-type.js.map +1 -1
- package/dist-server/service/data-set/data-set.js +22 -1
- package/dist-server/service/data-set/data-set.js.map +1 -1
- package/dist-server/service/data-summary/data-summary-mutation.js +16 -4
- package/dist-server/service/data-summary/data-summary-mutation.js.map +1 -1
- package/dist-server/service/data-summary/data-summary-type.js.map +1 -1
- package/dist-server/service/data-summary/data-summary.js +10 -23
- package/dist-server/service/data-summary/data-summary.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/helps/dataset/data-set.md +26 -11
- package/helps/dataset/ui/data-item-list.md +16 -9
- package/package.json +11 -11
- package/server/controllers/generate-data-summary.ts +202 -14
- package/server/routes.ts +29 -0
- package/server/service/data-set/data-set-type.ts +7 -1
- package/server/service/data-set/data-set.ts +20 -0
- package/server/service/data-summary/data-summary-mutation.ts +13 -4
- package/server/service/data-summary/data-summary-type.ts +2 -7
- package/server/service/data-summary/data-summary.ts +9 -24
- package/translations/en.json +4 -0
- package/translations/ko.json +5 -1
- package/translations/ms.json +4 -0
- package/translations/zh.json +4 -0
@@ -7,6 +7,7 @@ import moment from 'moment-timezone'
|
|
7
7
|
import gql from 'graphql-tag'
|
8
8
|
import { css, html } from 'lit'
|
9
9
|
import { customElement, property, query, state } from 'lit/decorators.js'
|
10
|
+
import { asyncReplace } from 'lit/directives/async-replace.js'
|
10
11
|
import { connect } from 'pwa-helpers/connect-mixin'
|
11
12
|
|
12
13
|
import {
|
@@ -24,99 +25,51 @@ import { i18next, localize } from '@operato/i18n'
|
|
24
25
|
import { notify, openPopup } from '@operato/layout'
|
25
26
|
import { PageView, store } from '@operato/shell'
|
26
27
|
import { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'
|
27
|
-
import { isMobileDevice } from '@operato/utils'
|
28
|
+
import { isMobileDevice, sleep } from '@operato/utils'
|
28
29
|
import { OxPopup } from '@operato/popup'
|
29
30
|
|
31
|
+
const MIN = 60
|
32
|
+
const HOUR = 60 * MIN
|
33
|
+
const DAY = 24 * HOUR
|
34
|
+
|
30
35
|
const DEFAULT_TZ = Intl.DateTimeFormat().resolvedOptions().timeZone
|
31
36
|
const TIMEZONE_OPTIONS = ['', DEFAULT_TZ, ...moment.tz.names().filter(tz => tz !== DEFAULT_TZ)]
|
32
37
|
|
33
38
|
const ENTRY_TYPES = [
|
34
|
-
{
|
35
|
-
|
36
|
-
|
37
|
-
},
|
38
|
-
{
|
39
|
-
|
40
|
-
value: 'generated'
|
41
|
-
},
|
42
|
-
{
|
43
|
-
display: 'Board',
|
44
|
-
value: 'board'
|
45
|
-
},
|
46
|
-
{
|
47
|
-
display: 'CustomElement',
|
48
|
-
value: 'custom-element'
|
49
|
-
},
|
50
|
-
{
|
51
|
-
display: 'Page',
|
52
|
-
value: 'page'
|
53
|
-
},
|
54
|
-
{
|
55
|
-
display: 'External URL',
|
56
|
-
value: 'external'
|
57
|
-
}
|
39
|
+
{ display: '', value: '' },
|
40
|
+
{ display: 'Generated', value: 'generated' },
|
41
|
+
{ display: 'Board', value: 'board' },
|
42
|
+
{ display: 'CustomElement', value: 'custom-element' },
|
43
|
+
{ display: 'Page', value: 'page' },
|
44
|
+
{ display: 'External URL', value: 'external' }
|
58
45
|
]
|
59
46
|
|
60
47
|
const MONITOR_TYPES = [
|
61
|
-
{
|
62
|
-
|
63
|
-
|
64
|
-
},
|
65
|
-
{
|
66
|
-
|
67
|
-
value: 'generated'
|
68
|
-
},
|
69
|
-
{
|
70
|
-
display: 'Board',
|
71
|
-
value: 'board'
|
72
|
-
},
|
73
|
-
{
|
74
|
-
display: 'CustomElement',
|
75
|
-
value: 'custom-element'
|
76
|
-
},
|
77
|
-
{
|
78
|
-
display: 'Page',
|
79
|
-
value: 'page'
|
80
|
-
},
|
81
|
-
{
|
82
|
-
display: 'External URL',
|
83
|
-
value: 'external'
|
84
|
-
}
|
48
|
+
{ display: '', value: '' },
|
49
|
+
{ display: 'Generated', value: 'generated' },
|
50
|
+
{ display: 'Board', value: 'board' },
|
51
|
+
{ display: 'CustomElement', value: 'custom-element' },
|
52
|
+
{ display: 'Page', value: 'page' },
|
53
|
+
{ display: 'External URL', value: 'external' }
|
85
54
|
]
|
86
55
|
|
87
56
|
const REPORT_TYPES = [
|
88
|
-
{
|
89
|
-
|
90
|
-
|
91
|
-
},
|
92
|
-
{
|
93
|
-
|
94
|
-
|
95
|
-
}
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
},
|
100
|
-
{
|
101
|
-
|
102
|
-
|
103
|
-
}
|
104
|
-
{
|
105
|
-
display: 'Page',
|
106
|
-
value: 'page'
|
107
|
-
},
|
108
|
-
{
|
109
|
-
display: 'External URL',
|
110
|
-
value: 'external'
|
111
|
-
},
|
112
|
-
{
|
113
|
-
display: 'Jasper',
|
114
|
-
value: 'jasper'
|
115
|
-
},
|
116
|
-
{
|
117
|
-
display: 'Shiny',
|
118
|
-
value: 'shiny'
|
119
|
-
}
|
57
|
+
{ display: '', value: '' },
|
58
|
+
{ display: 'Generated', value: 'generated' },
|
59
|
+
{ display: 'Embed', value: 'embed' },
|
60
|
+
{ display: 'CustomElement', value: 'custom-element' },
|
61
|
+
{ display: 'Page', value: 'page' },
|
62
|
+
{ display: 'External URL', value: 'external' },
|
63
|
+
{ display: 'Jasper', value: 'jasper' },
|
64
|
+
{ display: 'Shiny', value: 'shiny' }
|
65
|
+
]
|
66
|
+
|
67
|
+
const SUMMARY_PERIOD_TYPES = [
|
68
|
+
{ display: '', value: '' },
|
69
|
+
{ display: 'Hour', value: 'hour' },
|
70
|
+
{ display: 'WorkShift', value: 'work-shift' },
|
71
|
+
{ display: 'WorkDate', value: 'work-date' },
|
72
|
+
{ display: 'Day', value: 'day' }
|
120
73
|
]
|
121
74
|
|
122
75
|
const USECASE_OPTIONS = () => {
|
@@ -419,6 +372,22 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
|
|
419
372
|
},
|
420
373
|
width: 50
|
421
374
|
},
|
375
|
+
{
|
376
|
+
type: 'select',
|
377
|
+
name: 'timezone',
|
378
|
+
header: i18next.t('field.timezone'),
|
379
|
+
record: {
|
380
|
+
editable: true,
|
381
|
+
options: TIMEZONE_OPTIONS
|
382
|
+
},
|
383
|
+
width: 120,
|
384
|
+
imex: {
|
385
|
+
width: 13,
|
386
|
+
header: i18next.t('field.timezone'),
|
387
|
+
type: 'select',
|
388
|
+
key: 'timezone'
|
389
|
+
}
|
390
|
+
},
|
422
391
|
{
|
423
392
|
type: 'crontab',
|
424
393
|
name: 'schedule',
|
@@ -440,19 +409,27 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
|
|
440
409
|
},
|
441
410
|
{
|
442
411
|
type: 'select',
|
443
|
-
name: '
|
444
|
-
|
412
|
+
name: 'summaryPeriod',
|
413
|
+
label: true,
|
414
|
+
header: i18next.t('field.summary-period'),
|
445
415
|
record: {
|
446
416
|
editable: true,
|
447
|
-
options:
|
417
|
+
options: SUMMARY_PERIOD_TYPES
|
448
418
|
},
|
449
|
-
width:
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
419
|
+
width: 80
|
420
|
+
},
|
421
|
+
{
|
422
|
+
type: 'string',
|
423
|
+
name: 'nextSummarySchedule',
|
424
|
+
header: i18next.t('field.next-summary-schedule'),
|
425
|
+
record: {
|
426
|
+
editable: false,
|
427
|
+
renderer: (value, column, record, rowIndex, field) => {
|
428
|
+
return html` <span>${asyncReplace(this.summaryScheduleTimer(record.dueAt))}</span>`
|
429
|
+
}
|
430
|
+
},
|
431
|
+
sortable: false,
|
432
|
+
width: 140
|
456
433
|
},
|
457
434
|
{
|
458
435
|
type: 'resource-object',
|
@@ -641,6 +618,8 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
|
|
641
618
|
schedule
|
642
619
|
timezone
|
643
620
|
scheduleId
|
621
|
+
summaryPeriod
|
622
|
+
summaryScheduleId
|
644
623
|
dataKeySet {
|
645
624
|
id
|
646
625
|
name
|
@@ -901,4 +880,27 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
|
|
901
880
|
}
|
902
881
|
)
|
903
882
|
}
|
883
|
+
|
884
|
+
async *summaryScheduleTimer(exp) {
|
885
|
+
while (exp) {
|
886
|
+
var secs = Math.round((Number(exp) - Date.now()) / 1000)
|
887
|
+
var positive = secs >= 0
|
888
|
+
|
889
|
+
secs = Math.abs(secs)
|
890
|
+
const days = Math.floor(secs / DAY)
|
891
|
+
secs -= days * DAY
|
892
|
+
const hours = Math.floor(secs / HOUR)
|
893
|
+
secs -= hours * HOUR
|
894
|
+
const minutes = Math.floor(secs / MIN)
|
895
|
+
const seconds = secs - minutes * MIN
|
896
|
+
|
897
|
+
yield `${positive ? '' : '- '}${days ? `${days}${i18next.t('label.days')} ` : ''}${
|
898
|
+
hours ? `${hours}${i18next.t('label.hours')} ` : ''
|
899
|
+
}${minutes ? `${minutes}${i18next.t('label.minutes')} ` : ''}`
|
900
|
+
|
901
|
+
do {
|
902
|
+
await sleep(60 * 1000)
|
903
|
+
} while (!this.active)
|
904
|
+
}
|
905
|
+
}
|
904
906
|
}
|
@@ -159,8 +159,8 @@ export class DataSummaryListPage extends connect(store)(localize(i18next)(PageVi
|
|
159
159
|
},
|
160
160
|
{
|
161
161
|
type: 'string',
|
162
|
-
name: '
|
163
|
-
header: i18next.t('field.
|
162
|
+
name: 'date',
|
163
|
+
header: i18next.t('field.date'),
|
164
164
|
sortable: true,
|
165
165
|
filter: {
|
166
166
|
type: 'date',
|
@@ -172,8 +172,8 @@ export class DataSummaryListPage extends connect(store)(localize(i18next)(PageVi
|
|
172
172
|
},
|
173
173
|
{
|
174
174
|
type: 'string',
|
175
|
-
name: '
|
176
|
-
header: i18next.t('field.
|
175
|
+
name: 'period',
|
176
|
+
header: i18next.t('field.time-period'),
|
177
177
|
sortable: true,
|
178
178
|
width: 60,
|
179
179
|
imex: true
|
@@ -347,7 +347,7 @@ export class DataSummaryListPage extends connect(store)(localize(i18next)(PageVi
|
|
347
347
|
},
|
348
348
|
sorters: [
|
349
349
|
{
|
350
|
-
name: '
|
350
|
+
name: 'date',
|
351
351
|
desc: true
|
352
352
|
}
|
353
353
|
]
|
@@ -366,8 +366,8 @@ export class DataSummaryListPage extends connect(store)(localize(i18next)(PageVi
|
|
366
366
|
dataSet {
|
367
367
|
id
|
368
368
|
}
|
369
|
-
|
370
|
-
|
369
|
+
date
|
370
|
+
period
|
371
371
|
key01
|
372
372
|
key02
|
373
373
|
key03
|
@@ -25,6 +25,13 @@ import { isMobileDevice } from '@operato/utils'
|
|
25
25
|
import { OxPopup } from '@operato/popup'
|
26
26
|
import { DataItem } from '@operato/dataset'
|
27
27
|
|
28
|
+
enum DataSetSummaryPeriodType {
|
29
|
+
Hour = 'hour',
|
30
|
+
WorkShift = 'work-shift',
|
31
|
+
WorkDate = 'work-date',
|
32
|
+
Day = 'day'
|
33
|
+
}
|
34
|
+
|
28
35
|
@customElement('data-summary-search-page')
|
29
36
|
export class DataSummarySearchPage extends connect(store)(localize(i18next)(PageView)) {
|
30
37
|
static styles = [
|
@@ -131,6 +138,7 @@ export class DataSummarySearchPage extends connect(store)(localize(i18next)(Page
|
|
131
138
|
query ($id: String!) {
|
132
139
|
dataSet(id: $id) {
|
133
140
|
id
|
141
|
+
summaryPeriod
|
134
142
|
dataItems {
|
135
143
|
name
|
136
144
|
description
|
@@ -240,35 +248,10 @@ export class DataSummarySearchPage extends connect(store)(localize(i18next)(Page
|
|
240
248
|
}
|
241
249
|
}
|
242
250
|
},
|
243
|
-
// {
|
244
|
-
// type: 'string',
|
245
|
-
// name: 'name',
|
246
|
-
// label: true,
|
247
|
-
// header: i18next.t('field.name'),
|
248
|
-
// record: {
|
249
|
-
// editable: false
|
250
|
-
// },
|
251
|
-
// filter: 'search',
|
252
|
-
// sortable: true,
|
253
|
-
// width: 120,
|
254
|
-
// imex: true
|
255
|
-
// },
|
256
|
-
// {
|
257
|
-
// type: 'string',
|
258
|
-
// name: 'description',
|
259
|
-
// label: true,
|
260
|
-
// header: i18next.t('field.description'),
|
261
|
-
// record: {
|
262
|
-
// editable: false
|
263
|
-
// },
|
264
|
-
// filter: 'search',
|
265
|
-
// width: 150,
|
266
|
-
// imex: true
|
267
|
-
// },
|
268
251
|
{
|
269
252
|
type: 'string',
|
270
|
-
name: '
|
271
|
-
header: i18next.t('field.
|
253
|
+
name: 'date',
|
254
|
+
header: i18next.t('field.date'),
|
272
255
|
sortable: true,
|
273
256
|
filter: {
|
274
257
|
type: 'date',
|
@@ -278,34 +261,17 @@ export class DataSummarySearchPage extends connect(store)(localize(i18next)(Page
|
|
278
261
|
width: 80,
|
279
262
|
imex: true
|
280
263
|
},
|
281
|
-
|
264
|
+
(this.dataSet.summaryPeriod == DataSetSummaryPeriodType.Hour ||
|
265
|
+
this.dataSet.summaryPeriod == DataSetSummaryPeriodType.WorkShift) && {
|
282
266
|
type: 'string',
|
283
|
-
name: '
|
284
|
-
header: i18next.t('field.
|
267
|
+
name: 'period',
|
268
|
+
header: i18next.t('field.time-period'),
|
285
269
|
sortable: true,
|
286
270
|
width: 60,
|
287
271
|
imex: true
|
288
272
|
},
|
289
273
|
...this.getKeyColumns(),
|
290
274
|
...this.getDataColumns(),
|
291
|
-
{
|
292
|
-
type: 'checkbox',
|
293
|
-
name: 'ooc',
|
294
|
-
header: i18next.t('field.ooc'),
|
295
|
-
record: {
|
296
|
-
editable: false
|
297
|
-
},
|
298
|
-
width: 30
|
299
|
-
},
|
300
|
-
{
|
301
|
-
type: 'checkbox',
|
302
|
-
name: 'oos',
|
303
|
-
header: i18next.t('field.oos'),
|
304
|
-
record: {
|
305
|
-
editable: false
|
306
|
-
},
|
307
|
-
width: 30
|
308
|
-
},
|
309
275
|
{
|
310
276
|
type: 'json5',
|
311
277
|
name: 'data',
|
@@ -359,7 +325,7 @@ export class DataSummarySearchPage extends connect(store)(localize(i18next)(Page
|
|
359
325
|
width: 180,
|
360
326
|
imex: true
|
361
327
|
}
|
362
|
-
],
|
328
|
+
].filter(Boolean),
|
363
329
|
rows: {
|
364
330
|
appendable: false,
|
365
331
|
selectable: {
|
@@ -380,7 +346,7 @@ export class DataSummarySearchPage extends connect(store)(localize(i18next)(Page
|
|
380
346
|
},
|
381
347
|
sorters: [
|
382
348
|
{
|
383
|
-
name: '
|
349
|
+
name: 'date',
|
384
350
|
desc: true
|
385
351
|
}
|
386
352
|
]
|
@@ -405,8 +371,8 @@ export class DataSummarySearchPage extends connect(store)(localize(i18next)(Page
|
|
405
371
|
id
|
406
372
|
name
|
407
373
|
description
|
408
|
-
|
409
|
-
|
374
|
+
date
|
375
|
+
period
|
410
376
|
key01
|
411
377
|
key02
|
412
378
|
key03
|
@@ -13,8 +13,8 @@ type DataSummary = {
|
|
13
13
|
name: string
|
14
14
|
description: string
|
15
15
|
dataItems?: DataItem[]
|
16
|
-
|
17
|
-
|
16
|
+
date?: string
|
17
|
+
period?: string
|
18
18
|
key01?: string
|
19
19
|
key02?: string
|
20
20
|
key03?: string
|
@@ -103,8 +103,8 @@ class DataSummaryView extends localize(i18next)(LitElement) {
|
|
103
103
|
spec
|
104
104
|
stat
|
105
105
|
}
|
106
|
-
|
107
|
-
|
106
|
+
date
|
107
|
+
shift
|
108
108
|
key01
|
109
109
|
key02
|
110
110
|
key03
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
1
|
+
import { __asyncGenerator, __await, __decorate, __metadata } from "tslib";
|
2
2
|
import '@operato/data-grist';
|
3
3
|
import './data-item-list.js';
|
4
4
|
import './data-set-importer.js';
|
@@ -7,6 +7,7 @@ import moment from 'moment-timezone';
|
|
7
7
|
import gql from 'graphql-tag';
|
8
8
|
import { css, html } from 'lit';
|
9
9
|
import { customElement, query, state } from 'lit/decorators.js';
|
10
|
+
import { asyncReplace } from 'lit/directives/async-replace.js';
|
10
11
|
import { connect } from 'pwa-helpers/connect-mixin';
|
11
12
|
import { getEditor, getRenderer, DataGrist } from '@operato/data-grist';
|
12
13
|
import { OxDataUseCase } from '@operato/dataset';
|
@@ -15,95 +16,45 @@ import { i18next, localize } from '@operato/i18n';
|
|
15
16
|
import { notify, openPopup } from '@operato/layout';
|
16
17
|
import { PageView, store } from '@operato/shell';
|
17
18
|
import { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles';
|
18
|
-
import { isMobileDevice } from '@operato/utils';
|
19
|
+
import { isMobileDevice, sleep } from '@operato/utils';
|
19
20
|
import { OxPopup } from '@operato/popup';
|
21
|
+
const MIN = 60;
|
22
|
+
const HOUR = 60 * MIN;
|
23
|
+
const DAY = 24 * HOUR;
|
20
24
|
const DEFAULT_TZ = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
21
25
|
const TIMEZONE_OPTIONS = ['', DEFAULT_TZ, ...moment.tz.names().filter(tz => tz !== DEFAULT_TZ)];
|
22
26
|
const ENTRY_TYPES = [
|
23
|
-
{
|
24
|
-
|
25
|
-
|
26
|
-
},
|
27
|
-
{
|
28
|
-
|
29
|
-
value: 'generated'
|
30
|
-
},
|
31
|
-
{
|
32
|
-
display: 'Board',
|
33
|
-
value: 'board'
|
34
|
-
},
|
35
|
-
{
|
36
|
-
display: 'CustomElement',
|
37
|
-
value: 'custom-element'
|
38
|
-
},
|
39
|
-
{
|
40
|
-
display: 'Page',
|
41
|
-
value: 'page'
|
42
|
-
},
|
43
|
-
{
|
44
|
-
display: 'External URL',
|
45
|
-
value: 'external'
|
46
|
-
}
|
27
|
+
{ display: '', value: '' },
|
28
|
+
{ display: 'Generated', value: 'generated' },
|
29
|
+
{ display: 'Board', value: 'board' },
|
30
|
+
{ display: 'CustomElement', value: 'custom-element' },
|
31
|
+
{ display: 'Page', value: 'page' },
|
32
|
+
{ display: 'External URL', value: 'external' }
|
47
33
|
];
|
48
34
|
const MONITOR_TYPES = [
|
49
|
-
{
|
50
|
-
|
51
|
-
|
52
|
-
},
|
53
|
-
{
|
54
|
-
|
55
|
-
value: 'generated'
|
56
|
-
},
|
57
|
-
{
|
58
|
-
display: 'Board',
|
59
|
-
value: 'board'
|
60
|
-
},
|
61
|
-
{
|
62
|
-
display: 'CustomElement',
|
63
|
-
value: 'custom-element'
|
64
|
-
},
|
65
|
-
{
|
66
|
-
display: 'Page',
|
67
|
-
value: 'page'
|
68
|
-
},
|
69
|
-
{
|
70
|
-
display: 'External URL',
|
71
|
-
value: 'external'
|
72
|
-
}
|
35
|
+
{ display: '', value: '' },
|
36
|
+
{ display: 'Generated', value: 'generated' },
|
37
|
+
{ display: 'Board', value: 'board' },
|
38
|
+
{ display: 'CustomElement', value: 'custom-element' },
|
39
|
+
{ display: 'Page', value: 'page' },
|
40
|
+
{ display: 'External URL', value: 'external' }
|
73
41
|
];
|
74
42
|
const REPORT_TYPES = [
|
75
|
-
{
|
76
|
-
|
77
|
-
|
78
|
-
},
|
79
|
-
{
|
80
|
-
|
81
|
-
|
82
|
-
}
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
},
|
87
|
-
{
|
88
|
-
|
89
|
-
|
90
|
-
},
|
91
|
-
{
|
92
|
-
display: 'Page',
|
93
|
-
value: 'page'
|
94
|
-
},
|
95
|
-
{
|
96
|
-
display: 'External URL',
|
97
|
-
value: 'external'
|
98
|
-
},
|
99
|
-
{
|
100
|
-
display: 'Jasper',
|
101
|
-
value: 'jasper'
|
102
|
-
},
|
103
|
-
{
|
104
|
-
display: 'Shiny',
|
105
|
-
value: 'shiny'
|
106
|
-
}
|
43
|
+
{ display: '', value: '' },
|
44
|
+
{ display: 'Generated', value: 'generated' },
|
45
|
+
{ display: 'Embed', value: 'embed' },
|
46
|
+
{ display: 'CustomElement', value: 'custom-element' },
|
47
|
+
{ display: 'Page', value: 'page' },
|
48
|
+
{ display: 'External URL', value: 'external' },
|
49
|
+
{ display: 'Jasper', value: 'jasper' },
|
50
|
+
{ display: 'Shiny', value: 'shiny' }
|
51
|
+
];
|
52
|
+
const SUMMARY_PERIOD_TYPES = [
|
53
|
+
{ display: '', value: '' },
|
54
|
+
{ display: 'Hour', value: 'hour' },
|
55
|
+
{ display: 'WorkShift', value: 'work-shift' },
|
56
|
+
{ display: 'WorkDate', value: 'work-date' },
|
57
|
+
{ display: 'Day', value: 'day' }
|
107
58
|
];
|
108
59
|
const USECASE_OPTIONS = () => {
|
109
60
|
return ['', ...OxDataUseCase.getUseCaseNames()].map(name => {
|
@@ -370,6 +321,22 @@ let DataSetListPage = class DataSetListPage extends connect(store)(localize(i18n
|
|
370
321
|
},
|
371
322
|
width: 50
|
372
323
|
},
|
324
|
+
{
|
325
|
+
type: 'select',
|
326
|
+
name: 'timezone',
|
327
|
+
header: i18next.t('field.timezone'),
|
328
|
+
record: {
|
329
|
+
editable: true,
|
330
|
+
options: TIMEZONE_OPTIONS
|
331
|
+
},
|
332
|
+
width: 120,
|
333
|
+
imex: {
|
334
|
+
width: 13,
|
335
|
+
header: i18next.t('field.timezone'),
|
336
|
+
type: 'select',
|
337
|
+
key: 'timezone'
|
338
|
+
}
|
339
|
+
},
|
373
340
|
{
|
374
341
|
type: 'crontab',
|
375
342
|
name: 'schedule',
|
@@ -391,19 +358,27 @@ let DataSetListPage = class DataSetListPage extends connect(store)(localize(i18n
|
|
391
358
|
},
|
392
359
|
{
|
393
360
|
type: 'select',
|
394
|
-
name: '
|
395
|
-
|
361
|
+
name: 'summaryPeriod',
|
362
|
+
label: true,
|
363
|
+
header: i18next.t('field.summary-period'),
|
396
364
|
record: {
|
397
365
|
editable: true,
|
398
|
-
options:
|
366
|
+
options: SUMMARY_PERIOD_TYPES
|
399
367
|
},
|
400
|
-
width:
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
368
|
+
width: 80
|
369
|
+
},
|
370
|
+
{
|
371
|
+
type: 'string',
|
372
|
+
name: 'nextSummarySchedule',
|
373
|
+
header: i18next.t('field.next-summary-schedule'),
|
374
|
+
record: {
|
375
|
+
editable: false,
|
376
|
+
renderer: (value, column, record, rowIndex, field) => {
|
377
|
+
return html ` <span>${asyncReplace(this.summaryScheduleTimer(record.dueAt))}</span>`;
|
378
|
+
}
|
379
|
+
},
|
380
|
+
sortable: false,
|
381
|
+
width: 140
|
407
382
|
},
|
408
383
|
{
|
409
384
|
type: 'resource-object',
|
@@ -591,6 +566,8 @@ let DataSetListPage = class DataSetListPage extends connect(store)(localize(i18n
|
|
591
566
|
schedule
|
592
567
|
timezone
|
593
568
|
scheduleId
|
569
|
+
summaryPeriod
|
570
|
+
summaryScheduleId
|
594
571
|
dataKeySet {
|
595
572
|
id
|
596
573
|
name
|
@@ -827,6 +804,25 @@ let DataSetListPage = class DataSetListPage extends connect(store)(localize(i18n
|
|
827
804
|
title: i18next.t('title.import data-set')
|
828
805
|
});
|
829
806
|
}
|
807
|
+
summaryScheduleTimer(exp) {
|
808
|
+
return __asyncGenerator(this, arguments, function* summaryScheduleTimer_1() {
|
809
|
+
while (exp) {
|
810
|
+
var secs = Math.round((Number(exp) - Date.now()) / 1000);
|
811
|
+
var positive = secs >= 0;
|
812
|
+
secs = Math.abs(secs);
|
813
|
+
const days = Math.floor(secs / DAY);
|
814
|
+
secs -= days * DAY;
|
815
|
+
const hours = Math.floor(secs / HOUR);
|
816
|
+
secs -= hours * HOUR;
|
817
|
+
const minutes = Math.floor(secs / MIN);
|
818
|
+
const seconds = secs - minutes * MIN;
|
819
|
+
yield yield __await(`${positive ? '' : '- '}${days ? `${days}${i18next.t('label.days')} ` : ''}${hours ? `${hours}${i18next.t('label.hours')} ` : ''}${minutes ? `${minutes}${i18next.t('label.minutes')} ` : ''}`);
|
820
|
+
do {
|
821
|
+
yield __await(sleep(60 * 1000));
|
822
|
+
} while (!this.active);
|
823
|
+
}
|
824
|
+
});
|
825
|
+
}
|
830
826
|
};
|
831
827
|
DataSetListPage.styles = [
|
832
828
|
ScrollbarStyles,
|