@things-factory/dataset 6.0.91 → 6.0.93

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.
@@ -54,6 +54,7 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
54
54
 
55
55
  @state() dataSetId?: string
56
56
  @state() period?: string = DataSetSummaryGroupType.ThisMonth
57
+ @state() withKeys: boolean = false
57
58
 
58
59
  @state() dataSet: any
59
60
  @state() dataKeySet: any
@@ -96,7 +97,20 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
96
97
  return html`
97
98
  <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
98
99
  <div slot="headroom">
99
- <div id="filters">
100
+ <div
101
+ id="filters"
102
+ @change=${(e: CustomEvent) => {
103
+ const element = e.target as Element
104
+ if (element?.hasAttribute('period')) {
105
+ this.period = (element as any)?.value
106
+ } else if (element?.hasAttribute('with-keys')) {
107
+ this.withKeys = (element as any)?.checked
108
+ }
109
+
110
+ this.refreshGristConfig()
111
+ this.grist.fetch()
112
+ }}
113
+ >
100
114
  <ox-input-select-buttons
101
115
  .value=${this.period}
102
116
  .options=${[
@@ -121,13 +135,10 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
121
135
  value: 'today'
122
136
  }
123
137
  ]}
124
- @change=${(e: CustomEvent) => {
125
- this.period = (e.currentTarget as any)?.value
126
-
127
- this.refreshGristConfig()
128
- this.grist.fetch()
129
- }}
138
+ period
130
139
  ></ox-input-select-buttons>
140
+
141
+ <ox-checkbox with-keys>Grouping by data key</ox-checkbox>
131
142
  </div>
132
143
 
133
144
  <div id="sorters">
@@ -216,6 +227,10 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
216
227
  }
217
228
 
218
229
  getKeyColumns() {
230
+ if (!this.withKeys) {
231
+ return []
232
+ }
233
+
219
234
  return (
220
235
  this.dataKeySet?.dataKeyItems.map((item, index) => {
221
236
  return {
@@ -338,6 +353,7 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
338
353
  query (
339
354
  $dataSetName: String!
340
355
  $period: String!
356
+ $dataKeys: [String!]
341
357
  $filters: [Filter!]
342
358
  $pagination: Pagination
343
359
  $sortings: [Sorting!]
@@ -345,6 +361,7 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
345
361
  dataSummaryByPeriod(
346
362
  dataSetName: $dataSetName
347
363
  period: $period
364
+ dataKeys: $dataKeys
348
365
  filters: $filters
349
366
  pagination: $pagination
350
367
  sortings: $sortings
@@ -373,6 +390,7 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
373
390
  variables: {
374
391
  dataSetName: this.dataSet.name,
375
392
  period: this.period,
393
+ dataKeys: this.withKeys ? null : [],
376
394
  filters,
377
395
  pagination: { page, limit },
378
396
  sortings
@@ -0,0 +1,82 @@
1
+ import '@operato/input/ox-input-select-buttons.js';
2
+ import '@operato/data-grist';
3
+ import './data-summary-view.js';
4
+ import { FetchOption } from '@operato/data-grist';
5
+ import { PageView } from '@operato/shell';
6
+ import { DataItem } from '@operato/dataset';
7
+ declare const DataSummaryGroupPage_base: (new (...args: any[]) => {
8
+ _storeUnsubscribe: import("redux").Unsubscribe;
9
+ connectedCallback(): void;
10
+ disconnectedCallback(): void;
11
+ stateChanged(_state: unknown): void;
12
+ readonly isConnected: boolean;
13
+ }) & (new (...args: any[]) => import("lit").LitElement) & typeof PageView;
14
+ export declare class DataSummaryGroupPage extends DataSummaryGroupPage_base {
15
+ static styles: import("lit").CSSResult[];
16
+ dataSetId?: string;
17
+ period?: string;
18
+ dataSet: any;
19
+ dataKeySet: any;
20
+ dataItems?: DataItem[];
21
+ filters: string[];
22
+ gristConfig: any;
23
+ mode: 'CARD' | 'GRID' | 'LIST';
24
+ private grist;
25
+ private sortersControl;
26
+ get context(): {
27
+ search: {
28
+ handler: (search: string) => void;
29
+ placeholder: string;
30
+ value: string;
31
+ };
32
+ filter: {
33
+ handler: () => void;
34
+ };
35
+ help: string;
36
+ actions: never[];
37
+ exportable: {
38
+ name: string;
39
+ data: () => {
40
+ header: (false | {
41
+ header: any;
42
+ key: string;
43
+ width: string | number | import("@operato/data-grist").ColumnWidthCallback | undefined;
44
+ type: string;
45
+ } | undefined)[];
46
+ data: any[];
47
+ };
48
+ };
49
+ };
50
+ render(): import("lit-html").TemplateResult<1>;
51
+ pageUpdated(changes: any, lifecycle: any): void;
52
+ updated(changes: any): Promise<void>;
53
+ getKeyColumns(): any;
54
+ getDataColumns(): {
55
+ type: string;
56
+ name: string;
57
+ header: string;
58
+ record: {
59
+ editable: boolean;
60
+ };
61
+ width: number;
62
+ imex: boolean;
63
+ }[];
64
+ refreshGristConfig(): void;
65
+ fetchHandler({ page, limit, sortings, filters }: FetchOption): Promise<{
66
+ records: never[];
67
+ total: number;
68
+ } | {
69
+ records: any;
70
+ total?: undefined;
71
+ }>;
72
+ _exportableData(): {
73
+ header: (false | {
74
+ header: any;
75
+ key: string;
76
+ width: string | number | import("@operato/data-grist").ColumnWidthCallback | undefined;
77
+ type: string;
78
+ } | undefined)[];
79
+ data: any[];
80
+ };
81
+ }
82
+ export {};
@@ -0,0 +1,435 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@operato/input/ox-input-select-buttons.js';
3
+ import '@operato/data-grist';
4
+ import './data-summary-view.js';
5
+ import gql from 'graphql-tag';
6
+ import { css, html } from 'lit';
7
+ import { customElement, query, state } from 'lit/decorators.js';
8
+ import { connect } from 'pwa-helpers/connect-mixin';
9
+ import { DataGrist } from '@operato/data-grist';
10
+ import { client } from '@operato/graphql';
11
+ import { i18next, localize } from '@operato/i18n';
12
+ import { openPopup } from '@operato/layout';
13
+ import { PageView, store } from '@operato/shell';
14
+ import { CommonGristStyles, ScrollbarStyles } from '@operato/styles';
15
+ import { isMobileDevice } from '@operato/utils';
16
+ import { OxPopup } from '@operato/popup';
17
+ var DataSetSummaryGroupType;
18
+ (function (DataSetSummaryGroupType) {
19
+ DataSetSummaryGroupType["Today"] = "today";
20
+ DataSetSummaryGroupType["ThisMonth"] = "this month";
21
+ DataSetSummaryGroupType["ThirtyDays"] = "30 days";
22
+ DataSetSummaryGroupType["ThisYear"] = "this year";
23
+ DataSetSummaryGroupType["TwelveMonths"] = "12 months";
24
+ })(DataSetSummaryGroupType || (DataSetSummaryGroupType = {}));
25
+ let DataSummaryGroupPage = class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageView)) {
26
+ constructor() {
27
+ super(...arguments);
28
+ this.period = DataSetSummaryGroupType.ThisMonth;
29
+ this.filters = ['this month'];
30
+ this.mode = isMobileDevice() ? 'CARD' : 'GRID';
31
+ }
32
+ get context() {
33
+ return {
34
+ search: {
35
+ handler: (search) => {
36
+ this.grist.searchText = search;
37
+ },
38
+ placeholder: i18next.t('title.data-summary group'),
39
+ value: this.grist.searchText
40
+ },
41
+ filter: {
42
+ handler: () => {
43
+ this.grist.toggleHeadroom();
44
+ }
45
+ },
46
+ help: 'dataset/data-summary-group',
47
+ actions: [],
48
+ exportable: {
49
+ name: i18next.t('title.data-summary group'),
50
+ data: this._exportableData.bind(this)
51
+ }
52
+ };
53
+ }
54
+ render() {
55
+ const mode = this.mode || (isMobileDevice() ? 'LIST' : 'GRID');
56
+ return html `
57
+ <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
58
+ <div slot="headroom">
59
+ <div id="filters">
60
+ <ox-input-select-buttons
61
+ .value=${this.period}
62
+ .options=${[
63
+ {
64
+ display: '이번달',
65
+ value: 'this month'
66
+ },
67
+ {
68
+ display: '최근 30일',
69
+ value: '30 days'
70
+ },
71
+ {
72
+ display: '올해',
73
+ value: 'this year'
74
+ },
75
+ {
76
+ display: '최근 12개월',
77
+ value: '12 months'
78
+ },
79
+ {
80
+ display: '오늘',
81
+ value: 'toay'
82
+ }
83
+ ]}
84
+ @change=${(e) => {
85
+ var _a;
86
+ this.period = (_a = e.currentTarget) === null || _a === void 0 ? void 0 : _a.value;
87
+ this.grist.fetch();
88
+ }}
89
+ ></ox-input-select-buttons>
90
+ </div>
91
+
92
+ <div id="sorters">
93
+ Sort
94
+ <mwc-icon
95
+ @click=${e => {
96
+ const target = e.currentTarget;
97
+ this.sortersControl.open({
98
+ right: 0,
99
+ top: target.offsetTop + target.offsetHeight
100
+ });
101
+ }}
102
+ >expand_more</mwc-icon
103
+ >
104
+ <ox-popup id="sorter-control">
105
+ <ox-sorters-control> </ox-sorters-control>
106
+ </ox-popup>
107
+ </div>
108
+
109
+ <div id="modes">
110
+ <mwc-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</mwc-icon>
111
+ <mwc-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</mwc-icon>
112
+ <mwc-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>
113
+ </div>
114
+ </div>
115
+ </ox-grist>
116
+ `;
117
+ }
118
+ pageUpdated(changes, lifecycle) {
119
+ if (this.active) {
120
+ this.dataSetId = lifecycle.resourceId;
121
+ return;
122
+ }
123
+ }
124
+ async updated(changes) {
125
+ var _a, _b, _c;
126
+ if (changes.has('dataSetId')) {
127
+ const response = await client.query({
128
+ query: gql `
129
+ query ($id: String!) {
130
+ dataSet(id: $id) {
131
+ id
132
+ name
133
+ summaryPeriod
134
+ dataItems {
135
+ name
136
+ description
137
+ active
138
+ hidden
139
+ tag
140
+ type
141
+ unit
142
+ options
143
+ quota
144
+ spec
145
+ stat
146
+ }
147
+ dataKeySet {
148
+ id
149
+ name
150
+ description
151
+ dataKeyItems {
152
+ name
153
+ description
154
+ dataKey
155
+ tKey
156
+ }
157
+ }
158
+ }
159
+ }
160
+ `,
161
+ variables: {
162
+ id: this.dataSetId
163
+ }
164
+ });
165
+ this.dataSet = (_a = response.data) === null || _a === void 0 ? void 0 : _a.dataSet;
166
+ this.dataKeySet = ((_b = this.dataSet) === null || _b === void 0 ? void 0 : _b.dataKeySet) || {};
167
+ this.dataItems = ((_c = this.dataSet) === null || _c === void 0 ? void 0 : _c.dataItems) || [];
168
+ this.refreshGristConfig();
169
+ this.grist.fetch();
170
+ }
171
+ }
172
+ getKeyColumns() {
173
+ var _a;
174
+ return (((_a = this.dataKeySet) === null || _a === void 0 ? void 0 : _a.dataKeyItems.map((item, index) => {
175
+ return {
176
+ type: 'string',
177
+ name: `key0${index + 1}`,
178
+ header: i18next.t(item.tKey),
179
+ record: {
180
+ editable: false
181
+ },
182
+ sortable: true,
183
+ filter: 'i_like',
184
+ width: 120,
185
+ imex: true
186
+ };
187
+ })) || []);
188
+ }
189
+ getDataColumns() {
190
+ var _a;
191
+ return (((_a = this.dataItems) === null || _a === void 0 ? void 0 : _a.filter(dataItem => dataItem.active && dataItem.stat).map((item, index) => {
192
+ return {
193
+ type: 'number',
194
+ name: `data0${index + 1}`,
195
+ header: i18next.t(item.name),
196
+ record: {
197
+ editable: false
198
+ },
199
+ width: 120,
200
+ imex: true
201
+ };
202
+ })) || []);
203
+ }
204
+ refreshGristConfig() {
205
+ this.gristConfig = {
206
+ list: { fields: ['dataSet', 'data', 'updater', 'updatedAt'] },
207
+ columns: [
208
+ { type: 'gutter', gutterName: 'sequence' },
209
+ { type: 'gutter', gutterName: 'row-selector', multiple: true },
210
+ {
211
+ type: 'gutter',
212
+ gutterName: 'button',
213
+ icon: 'assignment',
214
+ title: i18next.t('title.open data summary view'),
215
+ handlers: {
216
+ click: (columns, data, column, record, rowIndex) => {
217
+ openPopup(html `
218
+ <data-summary-view data-summary-id=${record.id} style="background-color: white;"></data-summary-view>
219
+ `, {
220
+ backdrop: true,
221
+ size: 'large',
222
+ title: i18next.t('title.data-summary view')
223
+ });
224
+ }
225
+ }
226
+ },
227
+ {
228
+ type: 'string',
229
+ name: 'month',
230
+ header: i18next.t('field.month'),
231
+ sortable: true,
232
+ width: 80,
233
+ imex: true
234
+ },
235
+ {
236
+ type: 'string',
237
+ name: 'date',
238
+ header: i18next.t('field.date'),
239
+ sortable: true,
240
+ width: 80,
241
+ imex: true
242
+ },
243
+ ...this.getKeyColumns(),
244
+ ...this.getDataColumns(),
245
+ {
246
+ type: 'number',
247
+ name: 'count',
248
+ header: i18next.t('field.count'),
249
+ record: {
250
+ editable: false
251
+ },
252
+ width: 30
253
+ },
254
+ {
255
+ type: 'number',
256
+ name: 'countOoc',
257
+ header: i18next.t('field.count-ooc'),
258
+ record: {
259
+ editable: false
260
+ },
261
+ width: 30
262
+ },
263
+ {
264
+ type: 'number',
265
+ name: 'countOos',
266
+ header: i18next.t('field.count-oos'),
267
+ record: {
268
+ editable: false
269
+ },
270
+ width: 30
271
+ }
272
+ ].filter(Boolean),
273
+ rows: {
274
+ appendable: false,
275
+ selectable: {
276
+ multiple: true
277
+ }
278
+ },
279
+ sorters: [
280
+ {
281
+ name: 'date',
282
+ desc: true
283
+ }
284
+ ]
285
+ };
286
+ }
287
+ async fetchHandler({ page, limit, sortings = [], filters = [] }) {
288
+ if (!this.dataSetId) {
289
+ return { records: [], total: 0 };
290
+ }
291
+ const response = await client.query({
292
+ query: gql `
293
+ query (
294
+ $dataSetName: String!
295
+ $period: String!
296
+ $filters: [Filter!]
297
+ $pagination: Pagination
298
+ $sortings: [Sorting!]
299
+ ) {
300
+ dataSummaryByPeriod(
301
+ dataSetName: $dataSetName
302
+ period: $period
303
+ filters: $filters
304
+ pagination: $pagination
305
+ sortings: $sortings
306
+ ) {
307
+ name
308
+ description
309
+ month
310
+ date
311
+ period
312
+ key01
313
+ key02
314
+ key03
315
+ key04
316
+ key05
317
+ data01
318
+ data02
319
+ data03
320
+ data04
321
+ data05
322
+ count
323
+ countOoc
324
+ countOos
325
+ }
326
+ }
327
+ `,
328
+ variables: {
329
+ dataSetName: this.dataSet.name,
330
+ period: this.period,
331
+ filters,
332
+ pagination: { page, limit },
333
+ sortings
334
+ }
335
+ });
336
+ return {
337
+ records: response.data.dataSummaryByPeriod || []
338
+ };
339
+ }
340
+ _exportableData() {
341
+ let records = [];
342
+ if (this.grist.selected && this.grist.selected.length > 0) {
343
+ records = this.grist.selected;
344
+ }
345
+ else {
346
+ records = this.grist.data.records;
347
+ }
348
+ var headerSetting = this.grist.compiledConfig.columns
349
+ .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
350
+ .map(column => {
351
+ return column.imex === true
352
+ ? {
353
+ header: column.header.renderer(column),
354
+ key: column.name,
355
+ width: column.width,
356
+ type: column.type
357
+ }
358
+ : column.imex;
359
+ });
360
+ var data = records.map(item => {
361
+ return Object.assign({ id: item.id }, this.gristConfig.columns
362
+ .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
363
+ .reduce((record, column) => {
364
+ const key = column.imex === true ? column.name : column.imex.key;
365
+ record[key] = key
366
+ .split('.')
367
+ .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item);
368
+ return record;
369
+ }, {}));
370
+ });
371
+ return { header: headerSetting, data: data };
372
+ }
373
+ };
374
+ DataSummaryGroupPage.styles = [
375
+ ScrollbarStyles,
376
+ CommonGristStyles,
377
+ css `
378
+ :host {
379
+ display: flex;
380
+ flex-direction: column;
381
+
382
+ overflow: hidden;
383
+ }
384
+
385
+ ox-grist {
386
+ overflow-y: auto;
387
+ flex: 1;
388
+ }
389
+ `
390
+ ];
391
+ __decorate([
392
+ state(),
393
+ __metadata("design:type", String)
394
+ ], DataSummaryGroupPage.prototype, "dataSetId", void 0);
395
+ __decorate([
396
+ state(),
397
+ __metadata("design:type", String)
398
+ ], DataSummaryGroupPage.prototype, "period", void 0);
399
+ __decorate([
400
+ state(),
401
+ __metadata("design:type", Object)
402
+ ], DataSummaryGroupPage.prototype, "dataSet", void 0);
403
+ __decorate([
404
+ state(),
405
+ __metadata("design:type", Object)
406
+ ], DataSummaryGroupPage.prototype, "dataKeySet", void 0);
407
+ __decorate([
408
+ state(),
409
+ __metadata("design:type", Array)
410
+ ], DataSummaryGroupPage.prototype, "dataItems", void 0);
411
+ __decorate([
412
+ state(),
413
+ __metadata("design:type", Array)
414
+ ], DataSummaryGroupPage.prototype, "filters", void 0);
415
+ __decorate([
416
+ state(),
417
+ __metadata("design:type", Object)
418
+ ], DataSummaryGroupPage.prototype, "gristConfig", void 0);
419
+ __decorate([
420
+ state(),
421
+ __metadata("design:type", String)
422
+ ], DataSummaryGroupPage.prototype, "mode", void 0);
423
+ __decorate([
424
+ query('ox-grist'),
425
+ __metadata("design:type", DataGrist)
426
+ ], DataSummaryGroupPage.prototype, "grist", void 0);
427
+ __decorate([
428
+ query('#sorter-control'),
429
+ __metadata("design:type", OxPopup)
430
+ ], DataSummaryGroupPage.prototype, "sortersControl", void 0);
431
+ DataSummaryGroupPage = __decorate([
432
+ customElement('data-summary-group-page')
433
+ ], DataSummaryGroupPage);
434
+ export { DataSummaryGroupPage };
435
+ //# sourceMappingURL=data-summary-group-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-summary-group-page.js","sourceRoot":"","sources":["../../../client/pages/data-summary/data-summary-group-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/input/ox-input-select-buttons.js'\nimport '@operato/data-grist'\nimport './data-summary-view.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 {\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 { openPopup } from '@operato/layout'\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-group-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\n @state() dataSet: any\n @state() dataKeySet: any\n @state() dataItems?: DataItem[]\n\n @state() filters: string[] = ['this month']\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 search: {\n handler: (search: string) => {\n this.grist.searchText = search\n },\n placeholder: i18next.t('title.data-summary group'),\n value: this.grist.searchText\n },\n filter: {\n handler: () => {\n this.grist.toggleHeadroom()\n }\n },\n help: 'dataset/data-summary-group',\n actions: [],\n exportable: {\n name: i18next.t('title.data-summary group'),\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 id=\"filters\">\n <ox-input-select-buttons\n .value=${this.period}\n .options=${[\n {\n display: '이번달',\n value: 'this month'\n },\n {\n display: '최근 30일',\n value: '30 days'\n },\n {\n display: '올해',\n value: 'this year'\n },\n {\n display: '최근 12개월',\n value: '12 months'\n },\n {\n display: '오늘',\n value: 'toay'\n }\n ]}\n @change=${(e: CustomEvent) => {\n this.period = (e.currentTarget as any)?.value\n this.grist.fetch()\n }}\n ></ox-input-select-buttons>\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\n this.grist.fetch()\n }\n }\n\n getKeyColumns() {\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 {\n type: 'gutter',\n gutterName: 'button',\n icon: 'assignment',\n title: i18next.t('title.open data summary view'),\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n openPopup(\n html`\n <data-summary-view data-summary-id=${record.id} style=\"background-color: white;\"></data-summary-view>\n `,\n {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.data-summary view')\n }\n )\n }\n }\n },\n {\n type: 'string',\n name: 'month',\n header: i18next.t('field.month'),\n sortable: true,\n width: 80,\n imex: true\n },\n {\n type: 'string',\n name: 'date',\n header: i18next.t('field.date'),\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 rows: {\n appendable: false,\n selectable: {\n multiple: true\n }\n },\n sorters: [\n {\n name: 'date',\n desc: 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 $filters: [Filter!]\n $pagination: Pagination\n $sortings: [Sorting!]\n ) {\n dataSummaryByPeriod(\n dataSetName: $dataSetName\n period: $period\n filters: $filters\n pagination: $pagination\n sortings: $sortings\n ) {\n name\n description\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 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"]}
@@ -0,0 +1,22 @@
1
+ import '@operato/data-grist';
2
+ import { LitElement } from 'lit';
3
+ export declare class DataSummaryImporter extends LitElement {
4
+ static styles: import("lit").CSSResult[];
5
+ dataSummaries: any[];
6
+ columns: {
7
+ list: {
8
+ fields: string[];
9
+ };
10
+ pagination: {
11
+ infinite: boolean;
12
+ };
13
+ columns: {
14
+ type: string;
15
+ name: string;
16
+ header: string;
17
+ width: number;
18
+ }[];
19
+ };
20
+ render(): import("lit-html").TemplateResult<1>;
21
+ save(): Promise<void>;
22
+ }