@things-factory/dataset 6.2.27 → 6.2.28
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-summary/data-summary-period-page.ts +37 -54
- package/dist-client/pages/data-summary/data-summary-period-page.d.ts +1 -8
- package/dist-client/pages/data-summary/data-summary-period-page.js +32 -49
- package/dist-client/pages/data-summary/data-summary-period-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/translations/en.json +1 -0
- package/translations/ja.json +1 -0
- package/translations/ko.json +1 -0
- package/translations/ms.json +1 -0
- package/translations/zh.json +1 -0
@@ -6,21 +6,12 @@ import { css, html } from 'lit'
|
|
6
6
|
import { customElement, property, query, state } from 'lit/decorators.js'
|
7
7
|
import { connect } from 'pwa-helpers/connect-mixin'
|
8
8
|
|
9
|
-
import {
|
10
|
-
getEditor,
|
11
|
-
getRenderer,
|
12
|
-
ColumnConfig,
|
13
|
-
DataGrist,
|
14
|
-
FetchOption,
|
15
|
-
SortersControl,
|
16
|
-
GristRecord
|
17
|
-
} from '@operato/data-grist'
|
9
|
+
import { DataGrist, FetchOption, GristRecord } from '@operato/data-grist'
|
18
10
|
import { client } from '@operato/graphql'
|
19
11
|
import { i18next, localize } from '@operato/i18n'
|
20
12
|
import { PageView, store } from '@operato/shell'
|
21
|
-
import {
|
13
|
+
import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
|
22
14
|
import { isMobileDevice } from '@operato/utils'
|
23
|
-
import { OxPopup } from '@operato/popup'
|
24
15
|
import { DataItem } from '@operato/dataset'
|
25
16
|
|
26
17
|
enum DataSetSummaryGroupType {
|
@@ -35,7 +26,7 @@ enum DataSetSummaryGroupType {
|
|
35
26
|
export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageView)) {
|
36
27
|
static styles = [
|
37
28
|
ScrollbarStyles,
|
38
|
-
|
29
|
+
CommonHeaderStyles,
|
39
30
|
css`
|
40
31
|
:host {
|
41
32
|
display: flex;
|
@@ -63,22 +54,10 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
63
54
|
@state() mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'
|
64
55
|
|
65
56
|
@query('ox-grist') private grist!: DataGrist
|
66
|
-
@query('#sorter-control') private sortersControl!: OxPopup
|
67
57
|
|
68
58
|
get context() {
|
69
59
|
return {
|
70
60
|
title: i18next.t('title.data-summary period'),
|
71
|
-
search: {
|
72
|
-
handler: (search: string) => {
|
73
|
-
this.grist.searchText = search
|
74
|
-
},
|
75
|
-
value: this.grist?.searchText || ''
|
76
|
-
},
|
77
|
-
filter: {
|
78
|
-
handler: () => {
|
79
|
-
this.grist.toggleHeadroom()
|
80
|
-
}
|
81
|
-
},
|
82
61
|
help: 'dataset/data-summary-period',
|
83
62
|
actions: [],
|
84
63
|
exportable: {
|
@@ -93,9 +72,9 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
93
72
|
|
94
73
|
return html`
|
95
74
|
<ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
|
96
|
-
<div slot="headroom">
|
75
|
+
<div slot="headroom" class="header">
|
97
76
|
<div
|
98
|
-
|
77
|
+
class="filters"
|
99
78
|
@change=${(e: CustomEvent) => {
|
100
79
|
const element = e.target as Element
|
101
80
|
if (element?.hasAttribute('period')) {
|
@@ -109,6 +88,7 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
109
88
|
}}
|
110
89
|
>
|
111
90
|
<ox-input-select-buttons
|
91
|
+
class="filter"
|
112
92
|
.value=${this.period}
|
113
93
|
.options=${[
|
114
94
|
{
|
@@ -135,30 +115,7 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
135
115
|
period
|
136
116
|
></ox-input-select-buttons>
|
137
117
|
|
138
|
-
<ox-checkbox with-keys
|
139
|
-
</div>
|
140
|
-
|
141
|
-
<div id="sorters">
|
142
|
-
Sort
|
143
|
-
<mwc-icon
|
144
|
-
@click=${e => {
|
145
|
-
const target = e.currentTarget
|
146
|
-
this.sortersControl.open({
|
147
|
-
right: 0,
|
148
|
-
top: target.offsetTop + target.offsetHeight
|
149
|
-
})
|
150
|
-
}}
|
151
|
-
>expand_more</mwc-icon
|
152
|
-
>
|
153
|
-
<ox-popup id="sorter-control">
|
154
|
-
<ox-sorters-control> </ox-sorters-control>
|
155
|
-
</ox-popup>
|
156
|
-
</div>
|
157
|
-
|
158
|
-
<div id="modes">
|
159
|
-
<mwc-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</mwc-icon>
|
160
|
-
<mwc-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</mwc-icon>
|
161
|
-
<mwc-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>
|
118
|
+
<ox-checkbox class="filter" with-keys>${i18next.t('label.group-by data-keys')}</ox-checkbox>
|
162
119
|
</div>
|
163
120
|
</div>
|
164
121
|
</ox-grist>
|
@@ -233,6 +190,7 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
233
190
|
type: 'string',
|
234
191
|
name: `key0${index + 1}`,
|
235
192
|
header: i18next.t(item.tKey),
|
193
|
+
label: true,
|
236
194
|
record: {
|
237
195
|
editable: false
|
238
196
|
},
|
@@ -254,6 +212,7 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
254
212
|
type: 'number',
|
255
213
|
name: `data0${index + 1}`,
|
256
214
|
header: i18next.t(item.name),
|
215
|
+
label: true,
|
257
216
|
record: {
|
258
217
|
editable: false
|
259
218
|
},
|
@@ -265,15 +224,34 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
265
224
|
}
|
266
225
|
|
267
226
|
refreshGristConfig() {
|
227
|
+
const keyColumns = this.getKeyColumns()
|
228
|
+
const dataColumns = this.getDataColumns()
|
229
|
+
|
230
|
+
const listFields = [] as string[]
|
231
|
+
if (this.period == DataSetSummaryGroupType.ThisYear || this.period == DataSetSummaryGroupType.TwelveMonths) {
|
232
|
+
listFields.push('month')
|
233
|
+
}
|
234
|
+
if (this.period != DataSetSummaryGroupType.ThisYear && this.period != DataSetSummaryGroupType.TwelveMonths) {
|
235
|
+
listFields.push('date')
|
236
|
+
}
|
237
|
+
if (this.period == DataSetSummaryGroupType.Today) {
|
238
|
+
listFields.push('period')
|
239
|
+
}
|
240
|
+
|
241
|
+
keyColumns.map(col => listFields.push(col.name))
|
242
|
+
dataColumns.map(col => listFields.push(col.name))
|
243
|
+
|
244
|
+
listFields.push('count', 'countOoc', 'countOos')
|
245
|
+
|
268
246
|
this.gristConfig = {
|
269
|
-
list: { fields:
|
247
|
+
list: { fields: listFields },
|
270
248
|
columns: [
|
271
249
|
{ type: 'gutter', gutterName: 'sequence' },
|
272
|
-
{ type: 'gutter', gutterName: 'row-selector', multiple: true },
|
273
250
|
(this.period == DataSetSummaryGroupType.ThisYear || this.period == DataSetSummaryGroupType.TwelveMonths) && {
|
274
251
|
type: 'string',
|
275
252
|
name: 'month',
|
276
253
|
header: i18next.t('field.month'),
|
254
|
+
label: true,
|
277
255
|
width: 80,
|
278
256
|
sortable: true,
|
279
257
|
imex: true
|
@@ -283,6 +261,7 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
283
261
|
type: 'string',
|
284
262
|
name: 'date',
|
285
263
|
header: i18next.t('field.date'),
|
264
|
+
label: true,
|
286
265
|
sortable: true,
|
287
266
|
width: 80,
|
288
267
|
imex: true
|
@@ -291,16 +270,18 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
291
270
|
type: 'string',
|
292
271
|
name: 'period',
|
293
272
|
header: i18next.t('field.time-period'),
|
273
|
+
label: true,
|
294
274
|
sortable: true,
|
295
275
|
width: 80,
|
296
276
|
imex: true
|
297
277
|
},
|
298
|
-
...
|
299
|
-
...
|
278
|
+
...keyColumns,
|
279
|
+
...dataColumns,
|
300
280
|
{
|
301
281
|
type: 'number',
|
302
282
|
name: 'count',
|
303
283
|
header: i18next.t('field.count'),
|
284
|
+
label: true,
|
304
285
|
record: {
|
305
286
|
editable: false
|
306
287
|
},
|
@@ -309,6 +290,7 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
309
290
|
{
|
310
291
|
type: 'number',
|
311
292
|
name: 'countOoc',
|
293
|
+
label: true,
|
312
294
|
header: i18next.t('field.count-ooc'),
|
313
295
|
record: {
|
314
296
|
editable: false
|
@@ -319,6 +301,7 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
319
301
|
type: 'number',
|
320
302
|
name: 'countOos',
|
321
303
|
header: i18next.t('field.count-oos'),
|
304
|
+
label: true,
|
322
305
|
record: {
|
323
306
|
editable: false
|
324
307
|
},
|
@@ -21,16 +21,8 @@ export declare class DataSummaryGroupPage extends DataSummaryGroupPage_base {
|
|
21
21
|
gristConfig: any;
|
22
22
|
mode: 'CARD' | 'GRID' | 'LIST';
|
23
23
|
private grist;
|
24
|
-
private sortersControl;
|
25
24
|
get context(): {
|
26
25
|
title: string;
|
27
|
-
search: {
|
28
|
-
handler: (search: string) => void;
|
29
|
-
value: string;
|
30
|
-
};
|
31
|
-
filter: {
|
32
|
-
handler: () => void;
|
33
|
-
};
|
34
26
|
help: string;
|
35
27
|
actions: never[];
|
36
28
|
exportable: {
|
@@ -54,6 +46,7 @@ export declare class DataSummaryGroupPage extends DataSummaryGroupPage_base {
|
|
54
46
|
type: string;
|
55
47
|
name: string;
|
56
48
|
header: string;
|
49
|
+
label: boolean;
|
57
50
|
record: {
|
58
51
|
editable: boolean;
|
59
52
|
};
|
@@ -9,9 +9,8 @@ import { DataGrist } from '@operato/data-grist';
|
|
9
9
|
import { client } from '@operato/graphql';
|
10
10
|
import { i18next, localize } from '@operato/i18n';
|
11
11
|
import { PageView, store } from '@operato/shell';
|
12
|
-
import {
|
12
|
+
import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
|
13
13
|
import { isMobileDevice } from '@operato/utils';
|
14
|
-
import { OxPopup } from '@operato/popup';
|
15
14
|
var DataSetSummaryGroupType;
|
16
15
|
(function (DataSetSummaryGroupType) {
|
17
16
|
DataSetSummaryGroupType["Today"] = "today";
|
@@ -28,20 +27,8 @@ let DataSummaryGroupPage = class DataSummaryGroupPage extends connect(store)(loc
|
|
28
27
|
this.mode = isMobileDevice() ? 'CARD' : 'GRID';
|
29
28
|
}
|
30
29
|
get context() {
|
31
|
-
var _a;
|
32
30
|
return {
|
33
31
|
title: i18next.t('title.data-summary period'),
|
34
|
-
search: {
|
35
|
-
handler: (search) => {
|
36
|
-
this.grist.searchText = search;
|
37
|
-
},
|
38
|
-
value: ((_a = this.grist) === null || _a === void 0 ? void 0 : _a.searchText) || ''
|
39
|
-
},
|
40
|
-
filter: {
|
41
|
-
handler: () => {
|
42
|
-
this.grist.toggleHeadroom();
|
43
|
-
}
|
44
|
-
},
|
45
32
|
help: 'dataset/data-summary-period',
|
46
33
|
actions: [],
|
47
34
|
exportable: {
|
@@ -54,9 +41,9 @@ let DataSummaryGroupPage = class DataSummaryGroupPage extends connect(store)(loc
|
|
54
41
|
const mode = this.mode || (isMobileDevice() ? 'LIST' : 'GRID');
|
55
42
|
return html `
|
56
43
|
<ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
|
57
|
-
<div slot="headroom">
|
44
|
+
<div slot="headroom" class="header">
|
58
45
|
<div
|
59
|
-
|
46
|
+
class="filters"
|
60
47
|
@change=${(e) => {
|
61
48
|
const element = e.target;
|
62
49
|
if (element === null || element === void 0 ? void 0 : element.hasAttribute('period')) {
|
@@ -70,6 +57,7 @@ let DataSummaryGroupPage = class DataSummaryGroupPage extends connect(store)(loc
|
|
70
57
|
}}
|
71
58
|
>
|
72
59
|
<ox-input-select-buttons
|
60
|
+
class="filter"
|
73
61
|
.value=${this.period}
|
74
62
|
.options=${[
|
75
63
|
{
|
@@ -96,30 +84,7 @@ let DataSummaryGroupPage = class DataSummaryGroupPage extends connect(store)(loc
|
|
96
84
|
period
|
97
85
|
></ox-input-select-buttons>
|
98
86
|
|
99
|
-
<ox-checkbox with-keys
|
100
|
-
</div>
|
101
|
-
|
102
|
-
<div id="sorters">
|
103
|
-
Sort
|
104
|
-
<mwc-icon
|
105
|
-
@click=${e => {
|
106
|
-
const target = e.currentTarget;
|
107
|
-
this.sortersControl.open({
|
108
|
-
right: 0,
|
109
|
-
top: target.offsetTop + target.offsetHeight
|
110
|
-
});
|
111
|
-
}}
|
112
|
-
>expand_more</mwc-icon
|
113
|
-
>
|
114
|
-
<ox-popup id="sorter-control">
|
115
|
-
<ox-sorters-control> </ox-sorters-control>
|
116
|
-
</ox-popup>
|
117
|
-
</div>
|
118
|
-
|
119
|
-
<div id="modes">
|
120
|
-
<mwc-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</mwc-icon>
|
121
|
-
<mwc-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</mwc-icon>
|
122
|
-
<mwc-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>
|
87
|
+
<ox-checkbox class="filter" with-keys>${i18next.t('label.group-by data-keys')}</ox-checkbox>
|
123
88
|
</div>
|
124
89
|
</div>
|
125
90
|
</ox-grist>
|
@@ -189,6 +154,7 @@ let DataSummaryGroupPage = class DataSummaryGroupPage extends connect(store)(loc
|
|
189
154
|
type: 'string',
|
190
155
|
name: `key0${index + 1}`,
|
191
156
|
header: i18next.t(item.tKey),
|
157
|
+
label: true,
|
192
158
|
record: {
|
193
159
|
editable: false
|
194
160
|
},
|
@@ -206,6 +172,7 @@ let DataSummaryGroupPage = class DataSummaryGroupPage extends connect(store)(loc
|
|
206
172
|
type: 'number',
|
207
173
|
name: `data0${index + 1}`,
|
208
174
|
header: i18next.t(item.name),
|
175
|
+
label: true,
|
209
176
|
record: {
|
210
177
|
editable: false
|
211
178
|
},
|
@@ -215,15 +182,30 @@ let DataSummaryGroupPage = class DataSummaryGroupPage extends connect(store)(loc
|
|
215
182
|
})) || []);
|
216
183
|
}
|
217
184
|
refreshGristConfig() {
|
185
|
+
const keyColumns = this.getKeyColumns();
|
186
|
+
const dataColumns = this.getDataColumns();
|
187
|
+
const listFields = [];
|
188
|
+
if (this.period == DataSetSummaryGroupType.ThisYear || this.period == DataSetSummaryGroupType.TwelveMonths) {
|
189
|
+
listFields.push('month');
|
190
|
+
}
|
191
|
+
if (this.period != DataSetSummaryGroupType.ThisYear && this.period != DataSetSummaryGroupType.TwelveMonths) {
|
192
|
+
listFields.push('date');
|
193
|
+
}
|
194
|
+
if (this.period == DataSetSummaryGroupType.Today) {
|
195
|
+
listFields.push('period');
|
196
|
+
}
|
197
|
+
keyColumns.map(col => listFields.push(col.name));
|
198
|
+
dataColumns.map(col => listFields.push(col.name));
|
199
|
+
listFields.push('count', 'countOoc', 'countOos');
|
218
200
|
this.gristConfig = {
|
219
|
-
list: { fields:
|
201
|
+
list: { fields: listFields },
|
220
202
|
columns: [
|
221
203
|
{ type: 'gutter', gutterName: 'sequence' },
|
222
|
-
{ type: 'gutter', gutterName: 'row-selector', multiple: true },
|
223
204
|
(this.period == DataSetSummaryGroupType.ThisYear || this.period == DataSetSummaryGroupType.TwelveMonths) && {
|
224
205
|
type: 'string',
|
225
206
|
name: 'month',
|
226
207
|
header: i18next.t('field.month'),
|
208
|
+
label: true,
|
227
209
|
width: 80,
|
228
210
|
sortable: true,
|
229
211
|
imex: true
|
@@ -233,6 +215,7 @@ let DataSummaryGroupPage = class DataSummaryGroupPage extends connect(store)(loc
|
|
233
215
|
type: 'string',
|
234
216
|
name: 'date',
|
235
217
|
header: i18next.t('field.date'),
|
218
|
+
label: true,
|
236
219
|
sortable: true,
|
237
220
|
width: 80,
|
238
221
|
imex: true
|
@@ -241,16 +224,18 @@ let DataSummaryGroupPage = class DataSummaryGroupPage extends connect(store)(loc
|
|
241
224
|
type: 'string',
|
242
225
|
name: 'period',
|
243
226
|
header: i18next.t('field.time-period'),
|
227
|
+
label: true,
|
244
228
|
sortable: true,
|
245
229
|
width: 80,
|
246
230
|
imex: true
|
247
231
|
},
|
248
|
-
...
|
249
|
-
...
|
232
|
+
...keyColumns,
|
233
|
+
...dataColumns,
|
250
234
|
{
|
251
235
|
type: 'number',
|
252
236
|
name: 'count',
|
253
237
|
header: i18next.t('field.count'),
|
238
|
+
label: true,
|
254
239
|
record: {
|
255
240
|
editable: false
|
256
241
|
},
|
@@ -259,6 +244,7 @@ let DataSummaryGroupPage = class DataSummaryGroupPage extends connect(store)(loc
|
|
259
244
|
{
|
260
245
|
type: 'number',
|
261
246
|
name: 'countOoc',
|
247
|
+
label: true,
|
262
248
|
header: i18next.t('field.count-ooc'),
|
263
249
|
record: {
|
264
250
|
editable: false
|
@@ -269,6 +255,7 @@ let DataSummaryGroupPage = class DataSummaryGroupPage extends connect(store)(loc
|
|
269
255
|
type: 'number',
|
270
256
|
name: 'countOos',
|
271
257
|
header: i18next.t('field.count-oos'),
|
258
|
+
label: true,
|
272
259
|
record: {
|
273
260
|
editable: false
|
274
261
|
},
|
@@ -377,7 +364,7 @@ let DataSummaryGroupPage = class DataSummaryGroupPage extends connect(store)(loc
|
|
377
364
|
};
|
378
365
|
DataSummaryGroupPage.styles = [
|
379
366
|
ScrollbarStyles,
|
380
|
-
|
367
|
+
CommonHeaderStyles,
|
381
368
|
css `
|
382
369
|
:host {
|
383
370
|
display: flex;
|
@@ -428,10 +415,6 @@ __decorate([
|
|
428
415
|
query('ox-grist'),
|
429
416
|
__metadata("design:type", DataGrist)
|
430
417
|
], DataSummaryGroupPage.prototype, "grist", void 0);
|
431
|
-
__decorate([
|
432
|
-
query('#sorter-control'),
|
433
|
-
__metadata("design:type", OxPopup)
|
434
|
-
], DataSummaryGroupPage.prototype, "sortersControl", void 0);
|
435
418
|
DataSummaryGroupPage = __decorate([
|
436
419
|
customElement('data-summary-period-page')
|
437
420
|
], DataSummaryGroupPage);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"data-summary-period-page.js","sourceRoot":"","sources":["../../../client/pages/data-summary/data-summary-period-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/input/ox-input-select-buttons.js'\nimport '@operato/data-grist'\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 {\n getEditor,\n getRenderer,\n ColumnConfig,\n DataGrist,\n FetchOption,\n SortersControl,\n GristRecord\n} from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { PageView, store } from '@operato/shell'\nimport { CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { isMobileDevice } from '@operato/utils'\nimport { OxPopup } from '@operato/popup'\nimport { DataItem } from '@operato/dataset'\n\nenum DataSetSummaryGroupType {\n Today = 'today',\n ThisMonth = 'this month',\n ThirtyDays = '30 days',\n ThisYear = 'this year',\n TwelveMonths = '12 months'\n}\n\n@customElement('data-summary-period-page')\nexport class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageView)) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n overflow: hidden;\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n `\n ]\n\n @state() dataSetId?: string\n @state() period?: string = DataSetSummaryGroupType.ThisMonth\n @state() withKeys: boolean = false\n\n @state() dataSet: any\n @state() dataKeySet: any\n @state() dataItems?: DataItem[]\n\n @state() gristConfig: any\n @state() mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'\n\n @query('ox-grist') private grist!: DataGrist\n @query('#sorter-control') private sortersControl!: OxPopup\n\n get context() {\n return {\n title: i18next.t('title.data-summary period'),\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-summary-period',\n actions: [],\n exportable: {\n name: i18next.t('title.data-summary period'),\n data: this._exportableData.bind(this)\n }\n }\n }\n\n render() {\n const mode = this.mode || (isMobileDevice() ? 'LIST' : 'GRID')\n\n return html`\n <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\">\n <div\n id=\"filters\"\n @change=${(e: CustomEvent) => {\n const element = e.target as Element\n if (element?.hasAttribute('period')) {\n this.period = (element as any)?.value\n } else if (element?.hasAttribute('with-keys')) {\n this.withKeys = (element as any)?.checked\n }\n\n this.refreshGristConfig()\n this.grist.fetch()\n }}\n >\n <ox-input-select-buttons\n .value=${this.period}\n .options=${[\n {\n display: i18next.t('label.period-this-month'),\n value: 'this month'\n },\n {\n display: i18next.t('label.period-30-days'),\n value: '30 days'\n },\n {\n display: i18next.t('label.period-this-year'),\n value: 'this year'\n },\n {\n display: i18next.t('label.period-12-months'),\n value: '12 months'\n },\n {\n display: i18next.t('label.period-today'),\n value: 'today'\n }\n ]}\n period\n ></ox-input-select-buttons>\n\n <ox-checkbox with-keys>Grouping by data keys</ox-checkbox>\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\n <div id=\"modes\">\n <mwc-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</mwc-icon>\n <mwc-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</mwc-icon>\n <mwc-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>\n </div>\n </div>\n </ox-grist>\n `\n }\n\n pageUpdated(changes, lifecycle) {\n if (this.active) {\n this.dataSetId = lifecycle.resourceId\n return\n }\n }\n\n async updated(changes) {\n if (changes.has('dataSetId')) {\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n dataSet(id: $id) {\n id\n name\n summaryPeriod\n dataItems {\n name\n description\n active\n hidden\n tag\n type\n unit\n options\n quota\n spec\n stat\n }\n dataKeySet {\n id\n name\n description\n dataKeyItems {\n name\n description\n dataKey\n tKey\n }\n }\n }\n }\n `,\n variables: {\n id: this.dataSetId\n }\n })\n\n this.dataSet = response.data?.dataSet\n this.dataKeySet = this.dataSet?.dataKeySet || {}\n this.dataItems = this.dataSet?.dataItems || []\n\n this.refreshGristConfig()\n this.grist.fetch()\n }\n }\n\n getKeyColumns() {\n if (!this.withKeys) {\n return []\n }\n\n return (\n this.dataKeySet?.dataKeyItems.map((item, index) => {\n return {\n type: 'string',\n name: `key0${index + 1}`,\n header: i18next.t(item.tKey),\n record: {\n editable: false\n },\n sortable: true,\n filter: 'i_like',\n width: 120,\n imex: true\n }\n }) || []\n )\n }\n\n getDataColumns() {\n return (\n this.dataItems\n ?.filter(dataItem => dataItem.active && dataItem.stat)\n .map((item, index) => {\n return {\n type: 'number',\n name: `data0${index + 1}`,\n header: i18next.t(item.name),\n record: {\n editable: false\n },\n width: 120,\n imex: true\n }\n }) || []\n )\n }\n\n refreshGristConfig() {\n this.gristConfig = {\n list: { fields: ['dataSet', 'data', 'updater', 'updatedAt'] },\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'gutter', gutterName: 'row-selector', multiple: true },\n (this.period == DataSetSummaryGroupType.ThisYear || this.period == DataSetSummaryGroupType.TwelveMonths) && {\n type: 'string',\n name: 'month',\n header: i18next.t('field.month'),\n width: 80,\n sortable: true,\n imex: true\n },\n this.period != DataSetSummaryGroupType.ThisYear &&\n this.period != DataSetSummaryGroupType.TwelveMonths && {\n type: 'string',\n name: 'date',\n header: i18next.t('field.date'),\n sortable: true,\n width: 80,\n imex: true\n },\n this.period == DataSetSummaryGroupType.Today && {\n type: 'string',\n name: 'period',\n header: i18next.t('field.time-period'),\n sortable: true,\n width: 80,\n imex: true\n },\n ...this.getKeyColumns(),\n ...this.getDataColumns(),\n {\n type: 'number',\n name: 'count',\n header: i18next.t('field.count'),\n record: {\n editable: false\n },\n width: 30\n },\n {\n type: 'number',\n name: 'countOoc',\n header: i18next.t('field.count-ooc'),\n record: {\n editable: false\n },\n width: 30\n },\n {\n type: 'number',\n name: 'countOos',\n header: i18next.t('field.count-oos'),\n record: {\n editable: false\n },\n width: 30\n }\n ].filter(Boolean),\n pagination: {\n infinite: true\n },\n rows: {\n appendable: false,\n selectable: {\n multiple: true\n }\n }\n }\n }\n\n async fetchHandler({ page, limit, sortings = [], filters = [] }: FetchOption) {\n if (!this.dataSetId) {\n return { records: [], total: 0 }\n }\n\n const response = await client.query({\n query: gql`\n query (\n $dataSetName: String!\n $period: String!\n $dataKeys: [String!]\n $filters: [Filter!]\n $pagination: Pagination\n $sortings: [Sorting!]\n ) {\n dataSummaryByPeriod(\n dataSetName: $dataSetName\n period: $period\n dataKeys: $dataKeys\n filters: $filters\n pagination: $pagination\n sortings: $sortings\n ) {\n month\n date\n period\n key01\n key02\n key03\n key04\n key05\n data01\n data02\n data03\n data04\n data05\n count\n countOoc\n countOos\n }\n }\n `,\n variables: {\n dataSetName: this.dataSet.name,\n period: this.period,\n dataKeys: this.withKeys ? null : [],\n filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n return {\n records: response.data?.dataSummaryByPeriod || []\n }\n }\n\n _exportableData() {\n let records = [] as GristRecord[]\n if (this.grist.selected && this.grist.selected.length > 0) {\n records = this.grist.selected\n } else {\n records = this.grist.data.records\n }\n\n var headerSetting = this.grist.compiledConfig.columns\n .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)\n .map(column => {\n return column.imex === true\n ? {\n header: column.header.renderer(column),\n key: column.name,\n width: column.width,\n type: column.type\n }\n : column.imex\n })\n\n var data = records.map(item => {\n return {\n id: item.id,\n ...this.gristConfig.columns\n .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)\n .reduce((record, column) => {\n const key = column.imex === true ? column.name : column.imex.key\n record[key] = key\n .split('.')\n .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)\n return record\n }, {})\n }\n })\n\n return { header: headerSetting, data: data }\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"data-summary-period-page.js","sourceRoot":"","sources":["../../../client/pages/data-summary/data-summary-period-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/input/ox-input-select-buttons.js'\nimport '@operato/data-grist'\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 { DataGrist, FetchOption, GristRecord } from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { PageView, store } from '@operato/shell'\nimport { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { isMobileDevice } from '@operato/utils'\nimport { DataItem } from '@operato/dataset'\n\nenum DataSetSummaryGroupType {\n Today = 'today',\n ThisMonth = 'this month',\n ThirtyDays = '30 days',\n ThisYear = 'this year',\n TwelveMonths = '12 months'\n}\n\n@customElement('data-summary-period-page')\nexport class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageView)) {\n static styles = [\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n overflow: hidden;\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n `\n ]\n\n @state() dataSetId?: string\n @state() period?: string = DataSetSummaryGroupType.ThisMonth\n @state() withKeys: boolean = false\n\n @state() dataSet: any\n @state() dataKeySet: any\n @state() dataItems?: DataItem[]\n\n @state() gristConfig: any\n @state() mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'\n\n @query('ox-grist') private grist!: DataGrist\n\n get context() {\n return {\n title: i18next.t('title.data-summary period'),\n help: 'dataset/data-summary-period',\n actions: [],\n exportable: {\n name: i18next.t('title.data-summary period'),\n data: this._exportableData.bind(this)\n }\n }\n }\n\n render() {\n const mode = this.mode || (isMobileDevice() ? 'LIST' : 'GRID')\n\n return html`\n <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\" class=\"header\">\n <div\n class=\"filters\"\n @change=${(e: CustomEvent) => {\n const element = e.target as Element\n if (element?.hasAttribute('period')) {\n this.period = (element as any)?.value\n } else if (element?.hasAttribute('with-keys')) {\n this.withKeys = (element as any)?.checked\n }\n\n this.refreshGristConfig()\n this.grist.fetch()\n }}\n >\n <ox-input-select-buttons\n class=\"filter\"\n .value=${this.period}\n .options=${[\n {\n display: i18next.t('label.period-this-month'),\n value: 'this month'\n },\n {\n display: i18next.t('label.period-30-days'),\n value: '30 days'\n },\n {\n display: i18next.t('label.period-this-year'),\n value: 'this year'\n },\n {\n display: i18next.t('label.period-12-months'),\n value: '12 months'\n },\n {\n display: i18next.t('label.period-today'),\n value: 'today'\n }\n ]}\n period\n ></ox-input-select-buttons>\n\n <ox-checkbox class=\"filter\" with-keys>${i18next.t('label.group-by data-keys')}</ox-checkbox>\n </div>\n </div>\n </ox-grist>\n `\n }\n\n pageUpdated(changes, lifecycle) {\n if (this.active) {\n this.dataSetId = lifecycle.resourceId\n return\n }\n }\n\n async updated(changes) {\n if (changes.has('dataSetId')) {\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n dataSet(id: $id) {\n id\n name\n summaryPeriod\n dataItems {\n name\n description\n active\n hidden\n tag\n type\n unit\n options\n quota\n spec\n stat\n }\n dataKeySet {\n id\n name\n description\n dataKeyItems {\n name\n description\n dataKey\n tKey\n }\n }\n }\n }\n `,\n variables: {\n id: this.dataSetId\n }\n })\n\n this.dataSet = response.data?.dataSet\n this.dataKeySet = this.dataSet?.dataKeySet || {}\n this.dataItems = this.dataSet?.dataItems || []\n\n this.refreshGristConfig()\n this.grist.fetch()\n }\n }\n\n getKeyColumns() {\n if (!this.withKeys) {\n return []\n }\n\n return (\n this.dataKeySet?.dataKeyItems.map((item, index) => {\n return {\n type: 'string',\n name: `key0${index + 1}`,\n header: i18next.t(item.tKey),\n label: true,\n record: {\n editable: false\n },\n sortable: true,\n filter: 'i_like',\n width: 120,\n imex: true\n }\n }) || []\n )\n }\n\n getDataColumns() {\n return (\n this.dataItems\n ?.filter(dataItem => dataItem.active && dataItem.stat)\n .map((item, index) => {\n return {\n type: 'number',\n name: `data0${index + 1}`,\n header: i18next.t(item.name),\n label: true,\n record: {\n editable: false\n },\n width: 120,\n imex: true\n }\n }) || []\n )\n }\n\n refreshGristConfig() {\n const keyColumns = this.getKeyColumns()\n const dataColumns = this.getDataColumns()\n\n const listFields = [] as string[]\n if (this.period == DataSetSummaryGroupType.ThisYear || this.period == DataSetSummaryGroupType.TwelveMonths) {\n listFields.push('month')\n }\n if (this.period != DataSetSummaryGroupType.ThisYear && this.period != DataSetSummaryGroupType.TwelveMonths) {\n listFields.push('date')\n }\n if (this.period == DataSetSummaryGroupType.Today) {\n listFields.push('period')\n }\n\n keyColumns.map(col => listFields.push(col.name))\n dataColumns.map(col => listFields.push(col.name))\n\n listFields.push('count', 'countOoc', 'countOos')\n\n this.gristConfig = {\n list: { fields: listFields },\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n (this.period == DataSetSummaryGroupType.ThisYear || this.period == DataSetSummaryGroupType.TwelveMonths) && {\n type: 'string',\n name: 'month',\n header: i18next.t('field.month'),\n label: true,\n width: 80,\n sortable: true,\n imex: true\n },\n this.period != DataSetSummaryGroupType.ThisYear &&\n this.period != DataSetSummaryGroupType.TwelveMonths && {\n type: 'string',\n name: 'date',\n header: i18next.t('field.date'),\n label: true,\n sortable: true,\n width: 80,\n imex: true\n },\n this.period == DataSetSummaryGroupType.Today && {\n type: 'string',\n name: 'period',\n header: i18next.t('field.time-period'),\n label: true,\n sortable: true,\n width: 80,\n imex: true\n },\n ...keyColumns,\n ...dataColumns,\n {\n type: 'number',\n name: 'count',\n header: i18next.t('field.count'),\n label: true,\n record: {\n editable: false\n },\n width: 30\n },\n {\n type: 'number',\n name: 'countOoc',\n label: true,\n header: i18next.t('field.count-ooc'),\n record: {\n editable: false\n },\n width: 30\n },\n {\n type: 'number',\n name: 'countOos',\n header: i18next.t('field.count-oos'),\n label: true,\n record: {\n editable: false\n },\n width: 30\n }\n ].filter(Boolean),\n pagination: {\n infinite: true\n },\n rows: {\n appendable: false,\n selectable: {\n multiple: true\n }\n }\n }\n }\n\n async fetchHandler({ page, limit, sortings = [], filters = [] }: FetchOption) {\n if (!this.dataSetId) {\n return { records: [], total: 0 }\n }\n\n const response = await client.query({\n query: gql`\n query (\n $dataSetName: String!\n $period: String!\n $dataKeys: [String!]\n $filters: [Filter!]\n $pagination: Pagination\n $sortings: [Sorting!]\n ) {\n dataSummaryByPeriod(\n dataSetName: $dataSetName\n period: $period\n dataKeys: $dataKeys\n filters: $filters\n pagination: $pagination\n sortings: $sortings\n ) {\n month\n date\n period\n key01\n key02\n key03\n key04\n key05\n data01\n data02\n data03\n data04\n data05\n count\n countOoc\n countOos\n }\n }\n `,\n variables: {\n dataSetName: this.dataSet.name,\n period: this.period,\n dataKeys: this.withKeys ? null : [],\n filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n return {\n records: response.data?.dataSummaryByPeriod || []\n }\n }\n\n _exportableData() {\n let records = [] as GristRecord[]\n if (this.grist.selected && this.grist.selected.length > 0) {\n records = this.grist.selected\n } else {\n records = this.grist.data.records\n }\n\n var headerSetting = this.grist.compiledConfig.columns\n .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)\n .map(column => {\n return column.imex === true\n ? {\n header: column.header.renderer(column),\n key: column.name,\n width: column.width,\n type: column.type\n }\n : column.imex\n })\n\n var data = records.map(item => {\n return {\n id: item.id,\n ...this.gristConfig.columns\n .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)\n .reduce((record, column) => {\n const key = column.imex === true ? column.name : column.imex.key\n record[key] = key\n .split('.')\n .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)\n return record\n }, {})\n }\n })\n\n return { header: headerSetting, data: data }\n }\n}\n"]}
|