@things-factory/dataset 7.0.1-alpha.1 → 7.0.1-alpha.100
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/activities/activity-ooc-resolve-edit.ts +3 -3
- package/client/activities/activity-ooc-review-edit.ts +3 -2
- package/client/components/data-entry-form.ts +6 -13
- package/client/pages/data-archive/data-archive-list-page.ts +5 -17
- package/client/pages/data-archive/data-archive-request-popup.ts +11 -14
- package/client/pages/data-entry/data-entry-list-page.ts +2 -4
- package/client/pages/data-key-set/data-key-item-list.ts +8 -22
- package/client/pages/data-key-set/data-key-set-importer.ts +4 -11
- package/client/pages/data-key-set/data-key-set-list-page.ts +6 -5
- package/client/pages/data-ooc/data-ooc-list-page.ts +26 -17
- package/client/pages/data-ooc/data-ooc-view.ts +7 -6
- package/client/pages/data-report/data-report-list-page.ts +9 -27
- package/client/pages/data-report/data-report-samples-page.ts +1 -1
- package/client/pages/data-sample/data-sample-list-page.ts +30 -14
- package/client/pages/data-sample/data-sample-search-page.ts +22 -14
- package/client/pages/data-sample/data-sample-view.ts +7 -5
- package/client/pages/data-sensor/data-sensor-list-page.ts +20 -17
- package/client/pages/data-set/data-item-list.ts +7 -15
- package/client/pages/data-set/data-set-importer.ts +5 -17
- package/client/pages/data-set/data-set-list-page.ts +33 -15
- package/client/pages/data-summary/data-summary-list-page.ts +9 -10
- package/client/pages/data-summary/data-summary-period-page.ts +5 -23
- package/client/pages/data-summary/data-summary-search-page.ts +12 -35
- package/dist-client/activities/activity-data-collect-edit.d.ts +1 -1
- package/dist-client/activities/activity-data-collect-view.d.ts +1 -1
- package/dist-client/activities/activity-data-review-edit.d.ts +1 -1
- package/dist-client/activities/activity-data-review-view.d.ts +1 -1
- package/dist-client/activities/activity-ooc-resolve-edit.d.ts +1 -0
- package/dist-client/activities/activity-ooc-resolve-edit.js +3 -3
- package/dist-client/activities/activity-ooc-resolve-edit.js.map +1 -1
- package/dist-client/activities/activity-ooc-resolve-view.d.ts +1 -1
- package/dist-client/activities/activity-ooc-review-edit.d.ts +1 -0
- package/dist-client/activities/activity-ooc-review-edit.js +3 -2
- package/dist-client/activities/activity-ooc-review-edit.js.map +1 -1
- package/dist-client/components/data-entry-form.d.ts +2 -1
- package/dist-client/components/data-entry-form.js +5 -10
- package/dist-client/components/data-entry-form.js.map +1 -1
- package/dist-client/pages/data-archive/data-archive-list-page.d.ts +2 -1
- package/dist-client/pages/data-archive/data-archive-list-page.js +5 -17
- package/dist-client/pages/data-archive/data-archive-list-page.js.map +1 -1
- package/dist-client/pages/data-archive/data-archive-request-popup.d.ts +1 -1
- package/dist-client/pages/data-archive/data-archive-request-popup.js +9 -13
- package/dist-client/pages/data-archive/data-archive-request-popup.js.map +1 -1
- package/dist-client/pages/data-entry/data-entry-list-page.d.ts +2 -1
- package/dist-client/pages/data-entry/data-entry-list-page.js +2 -4
- package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -1
- package/dist-client/pages/data-key-set/data-key-item-list.d.ts +2 -1
- package/dist-client/pages/data-key-set/data-key-item-list.js +7 -22
- package/dist-client/pages/data-key-set/data-key-item-list.js.map +1 -1
- package/dist-client/pages/data-key-set/data-key-set-importer.d.ts +2 -1
- package/dist-client/pages/data-key-set/data-key-set-importer.js +4 -11
- package/dist-client/pages/data-key-set/data-key-set-importer.js.map +1 -1
- package/dist-client/pages/data-key-set/data-key-set-list-page.d.ts +12 -3
- package/dist-client/pages/data-key-set/data-key-set-list-page.js +6 -5
- package/dist-client/pages/data-key-set/data-key-set-list-page.js.map +1 -1
- package/dist-client/pages/data-ooc/data-ooc-list-page.d.ts +7 -1
- package/dist-client/pages/data-ooc/data-ooc-list-page.js +17 -10
- package/dist-client/pages/data-ooc/data-ooc-list-page.js.map +1 -1
- package/dist-client/pages/data-ooc/data-ooc-page.d.ts +1 -1
- package/dist-client/pages/data-ooc/data-ooc-view.d.ts +3 -2
- package/dist-client/pages/data-ooc/data-ooc-view.js +7 -6
- package/dist-client/pages/data-ooc/data-ooc-view.js.map +1 -1
- package/dist-client/pages/data-ooc/data-oocs-page.d.ts +1 -1
- package/dist-client/pages/data-report/data-report-embed-page.d.ts +1 -1
- package/dist-client/pages/data-report/data-report-list-page.d.ts +2 -1
- package/dist-client/pages/data-report/data-report-list-page.js +4 -19
- package/dist-client/pages/data-report/data-report-list-page.js.map +1 -1
- package/dist-client/pages/data-report/data-report-samples-page.d.ts +1 -1
- package/dist-client/pages/data-report/data-report-samples-page.js +1 -1
- package/dist-client/pages/data-report/data-report-samples-page.js.map +1 -1
- package/dist-client/pages/data-sample/data-sample-list-page.d.ts +7 -1
- package/dist-client/pages/data-sample/data-sample-list-page.js +22 -10
- package/dist-client/pages/data-sample/data-sample-list-page.js.map +1 -1
- package/dist-client/pages/data-sample/data-sample-page.d.ts +1 -1
- package/dist-client/pages/data-sample/data-sample-search-page.d.ts +2 -1
- package/dist-client/pages/data-sample/data-sample-search-page.js +15 -9
- package/dist-client/pages/data-sample/data-sample-search-page.js.map +1 -1
- package/dist-client/pages/data-sample/data-sample-view.d.ts +3 -1
- package/dist-client/pages/data-sample/data-sample-view.js +7 -5
- package/dist-client/pages/data-sample/data-sample-view.js.map +1 -1
- package/dist-client/pages/data-sample/data-samples-page.d.ts +1 -1
- package/dist-client/pages/data-sensor/data-sensor-list-page.d.ts +17 -3
- package/dist-client/pages/data-sensor/data-sensor-list-page.js +19 -17
- package/dist-client/pages/data-sensor/data-sensor-list-page.js.map +1 -1
- package/dist-client/pages/data-set/data-item-list.d.ts +1 -1
- package/dist-client/pages/data-set/data-item-list.js +6 -15
- package/dist-client/pages/data-set/data-item-list.js.map +1 -1
- package/dist-client/pages/data-set/data-set-importer.d.ts +2 -1
- package/dist-client/pages/data-set/data-set-importer.js +5 -16
- package/dist-client/pages/data-set/data-set-importer.js.map +1 -1
- package/dist-client/pages/data-set/data-set-list-page.d.ts +17 -3
- package/dist-client/pages/data-set/data-set-list-page.js +23 -10
- package/dist-client/pages/data-set/data-set-list-page.js.map +1 -1
- package/dist-client/pages/data-summary/data-summary-list-page.d.ts +2 -1
- package/dist-client/pages/data-summary/data-summary-list-page.js +9 -10
- package/dist-client/pages/data-summary/data-summary-list-page.js.map +1 -1
- package/dist-client/pages/data-summary/data-summary-period-page.d.ts +2 -1
- package/dist-client/pages/data-summary/data-summary-period-page.js +5 -23
- package/dist-client/pages/data-summary/data-summary-period-page.js.map +1 -1
- package/dist-client/pages/data-summary/data-summary-search-page.d.ts +2 -1
- package/dist-client/pages/data-summary/data-summary-search-page.js +7 -19
- package/dist-client/pages/data-summary/data-summary-search-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/controllers/create-data-sample.js +1 -1
- package/dist-server/controllers/create-data-sample.js.map +1 -1
- package/dist-server/service/data-archive/data-archive.js +1 -1
- package/dist-server/service/data-archive/data-archive.js.map +1 -1
- package/dist-server/service/data-key-set/data-key-set.js +1 -1
- package/dist-server/service/data-key-set/data-key-set.js.map +1 -1
- package/dist-server/service/data-ooc/data-ooc.js +16 -4
- package/dist-server/service/data-ooc/data-ooc.js.map +1 -1
- package/dist-server/service/data-sample/data-sample.js +13 -3
- package/dist-server/service/data-sample/data-sample.js.map +1 -1
- package/dist-server/service/data-sensor/data-sensor.js +1 -1
- package/dist-server/service/data-sensor/data-sensor.js.map +1 -1
- package/dist-server/service/data-set-history/data-set-history.js +1 -1
- package/dist-server/service/data-set-history/data-set-history.js.map +1 -1
- package/dist-server/service/data-summary/data-summary.js +1 -1
- package/dist-server/service/data-summary/data-summary.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/helps/dataset/data-sensor.md +3 -0
- package/package.json +16 -15
- package/server/controllers/create-data-sample.ts +1 -1
- package/server/service/data-archive/data-archive.ts +1 -1
- package/server/service/data-key-set/data-key-set.ts +1 -1
- package/server/service/data-ooc/data-ooc.ts +31 -5
- package/server/service/data-sample/data-sample.ts +37 -7
- package/server/service/data-sensor/data-sensor.ts +11 -2
- package/server/service/data-set-history/data-set-history.ts +3 -3
- package/server/service/data-summary/data-summary.ts +16 -3
@@ -1,3 +1,4 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
1
2
|
import '@operato/data-grist'
|
2
3
|
import '@operato/context/ox-context-page-toolbar.js'
|
3
4
|
import './data-sample-view.js'
|
@@ -6,21 +7,24 @@ import gql from 'graphql-tag'
|
|
6
7
|
import { css, html } from 'lit'
|
7
8
|
import { customElement, property, query, state } from 'lit/decorators.js'
|
8
9
|
import { connect } from 'pwa-helpers/connect-mixin'
|
9
|
-
import moment from 'moment-timezone'
|
10
|
+
import moment from '@operato/moment-timezone-es'
|
10
11
|
|
11
12
|
import { DataGrist, FetchOption, GristRecord } from '@operato/data-grist'
|
12
13
|
import { client } from '@operato/graphql'
|
13
14
|
import { i18next, localize } from '@operato/i18n'
|
14
15
|
import { openPopup } from '@operato/layout'
|
15
16
|
import { PageView, store } from '@operato/shell'
|
16
|
-
import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
|
17
|
+
import { CommonGristStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
|
17
18
|
import { isMobileDevice } from '@operato/utils'
|
18
19
|
import { GhostPrint } from '@operato/ghost-print'
|
19
20
|
|
21
|
+
import { p13n } from '@operato/p13n'
|
22
|
+
|
20
23
|
@customElement('data-sample-list-page')
|
21
|
-
export class DataSampleListPage extends connect(store)(localize(i18next)(PageView)) {
|
24
|
+
export class DataSampleListPage extends connect(store)(p13n(localize(i18next)(PageView))) {
|
22
25
|
static styles = [
|
23
26
|
ScrollbarStyles,
|
27
|
+
CommonGristStyles,
|
24
28
|
CommonHeaderStyles,
|
25
29
|
css`
|
26
30
|
:host {
|
@@ -78,12 +82,15 @@ export class DataSampleListPage extends connect(store)(localize(i18next)(PageVie
|
|
78
82
|
const mode = this.mode || (isMobileDevice() ? 'LIST' : 'GRID')
|
79
83
|
|
80
84
|
return html`
|
81
|
-
<ox-grist
|
85
|
+
<ox-grist
|
86
|
+
.mode=${mode}
|
87
|
+
.config=${this.gristConfig}
|
88
|
+
.fetchHandler=${this.fetchHandler.bind(this)}
|
89
|
+
.personalConfigProvider=${this.getPagePreferenceProvider('ox-grist')}
|
90
|
+
?url-params-sensitive=${false /* this.active */}
|
91
|
+
>
|
82
92
|
<div slot="headroom" class="header">
|
83
|
-
<div class="title">
|
84
|
-
<mwc-icon>summarize</mwc-icon>
|
85
|
-
${i18next.t('title.data-sample list')}
|
86
|
-
</div>
|
93
|
+
<div class="title">${i18next.t('title.data-sample list')}</div>
|
87
94
|
|
88
95
|
<div class="filters">
|
89
96
|
<ox-filters-form class="filter" autofocus without-search></ox-filters-form>
|
@@ -91,6 +98,8 @@ export class DataSampleListPage extends connect(store)(localize(i18next)(PageVie
|
|
91
98
|
|
92
99
|
<ox-context-page-toolbar class="actions" .context=${this.context}></ox-context-page-toolbar>
|
93
100
|
</div>
|
101
|
+
|
102
|
+
<ox-grist-personalizer slot="setting"></ox-grist-personalizer>
|
94
103
|
</ox-grist>
|
95
104
|
`
|
96
105
|
}
|
@@ -310,11 +319,16 @@ export class DataSampleListPage extends connect(store)(localize(i18next)(PageVie
|
|
310
319
|
},
|
311
320
|
handlers: {
|
312
321
|
click: (columns, data, column, record, rowIndex) => {
|
313
|
-
openPopup(
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
322
|
+
openPopup(
|
323
|
+
html`
|
324
|
+
<data-sample-view data-sample-id=${record.id} style="background-color: white;"></data-sample-view>
|
325
|
+
`,
|
326
|
+
{
|
327
|
+
backdrop: true,
|
328
|
+
size: 'large',
|
329
|
+
title: i18next.t('title.data-sample view')
|
330
|
+
}
|
331
|
+
)
|
318
332
|
}
|
319
333
|
}
|
320
334
|
},
|
@@ -401,7 +415,9 @@ export class DataSampleListPage extends connect(store)(localize(i18next)(PageVie
|
|
401
415
|
.filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
|
402
416
|
.reduce((record, column) => {
|
403
417
|
const key = column.imex === true ? column.name : column.imex.key
|
404
|
-
record[key] = key
|
418
|
+
record[key] = key
|
419
|
+
.split('.')
|
420
|
+
.reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
|
405
421
|
return record
|
406
422
|
}, {})
|
407
423
|
}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
1
2
|
import '@operato/data-grist'
|
2
3
|
import '@operato/context/ox-context-page-toolbar.js'
|
3
4
|
import './data-sample-view.js'
|
@@ -6,7 +7,7 @@ import gql from 'graphql-tag'
|
|
6
7
|
import { css, html } from 'lit'
|
7
8
|
import { customElement, property, query, state } from 'lit/decorators.js'
|
8
9
|
import { connect } from 'pwa-helpers/connect-mixin'
|
9
|
-
import moment from 'moment-timezone'
|
10
|
+
import moment from '@operato/moment-timezone-es'
|
10
11
|
|
11
12
|
import { DataGrist, FetchOption, GristRecord } from '@operato/data-grist'
|
12
13
|
import { client } from '@operato/graphql'
|
@@ -82,10 +83,7 @@ export class DataSampleSearchPage extends connect(store)(localize(i18next)(PageV
|
|
82
83
|
return html`
|
83
84
|
<ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
|
84
85
|
<div slot="headroom" class="header">
|
85
|
-
<div class="title">
|
86
|
-
<mwc-icon>summarize</mwc-icon>
|
87
|
-
${i18next.t('title.data-sample search')}
|
88
|
-
</div>
|
86
|
+
<div class="title">${i18next.t('title.data-sample search')}</div>
|
89
87
|
|
90
88
|
<div class="filters">
|
91
89
|
<ox-filters-form class="filter" autofocus without-search></ox-filters-form>
|
@@ -136,8 +134,6 @@ export class DataSampleSearchPage extends connect(store)(localize(i18next)(PageV
|
|
136
134
|
this.dataKeySet = this.dataSet.dataKeySet
|
137
135
|
|
138
136
|
this.refreshGristConfig()
|
139
|
-
|
140
|
-
this.grist.fetch()
|
141
137
|
}
|
142
138
|
}
|
143
139
|
|
@@ -296,11 +292,16 @@ export class DataSampleSearchPage extends connect(store)(localize(i18next)(PageV
|
|
296
292
|
},
|
297
293
|
handlers: {
|
298
294
|
click: (columns, data, column, record, rowIndex) => {
|
299
|
-
openPopup(
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
295
|
+
openPopup(
|
296
|
+
html`
|
297
|
+
<data-sample-view data-sample-id=${record.id} style="background-color: white;"></data-sample-view>
|
298
|
+
`,
|
299
|
+
{
|
300
|
+
backdrop: true,
|
301
|
+
size: 'large',
|
302
|
+
title: i18next.t('title.data-sample view')
|
303
|
+
}
|
304
|
+
)
|
304
305
|
}
|
305
306
|
}
|
306
307
|
},
|
@@ -321,7 +322,12 @@ export class DataSampleSearchPage extends connect(store)(localize(i18next)(PageV
|
|
321
322
|
const response = await client.query({
|
322
323
|
query: gql`
|
323
324
|
query ($dataSetId: String!, $filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
|
324
|
-
responses: dataSamplesByDataSet(
|
325
|
+
responses: dataSamplesByDataSet(
|
326
|
+
dataSetId: $dataSetId
|
327
|
+
filters: $filters
|
328
|
+
pagination: $pagination
|
329
|
+
sortings: $sortings
|
330
|
+
) {
|
325
331
|
items {
|
326
332
|
id
|
327
333
|
name
|
@@ -391,7 +397,9 @@ export class DataSampleSearchPage extends connect(store)(localize(i18next)(PageV
|
|
391
397
|
.filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
|
392
398
|
.reduce((record, column) => {
|
393
399
|
const key = column.imex === true ? column.name : column.imex.key
|
394
|
-
record[key] = key
|
400
|
+
record[key] = key
|
401
|
+
.split('.')
|
402
|
+
.reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
|
395
403
|
return record
|
396
404
|
}, {})
|
397
405
|
}
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
2
|
+
import '@material/web/fab/fab.js'
|
1
3
|
import '@operato/dataset/ox-data-sample-view.js'
|
2
4
|
import '@operato/dataset/ox-data-ooc-brief-view.js'
|
3
5
|
import '@things-factory/worklist/dist-client/components/activity-thread-timeline.js'
|
@@ -33,7 +35,7 @@ export class DataSampleView extends localize(i18next)(LitElement) {
|
|
33
35
|
margin: var(--margin-default);
|
34
36
|
}
|
35
37
|
|
36
|
-
|
38
|
+
md-fab {
|
37
39
|
position: fixed;
|
38
40
|
bottom: 15px;
|
39
41
|
right: 16px;
|
@@ -42,7 +44,7 @@ export class DataSampleView extends localize(i18next)(LitElement) {
|
|
42
44
|
}
|
43
45
|
|
44
46
|
@media print {
|
45
|
-
|
47
|
+
md-fab {
|
46
48
|
display: none;
|
47
49
|
}
|
48
50
|
}
|
@@ -96,15 +98,15 @@ export class DataSampleView extends localize(i18next)(LitElement) {
|
|
96
98
|
`
|
97
99
|
: nothing}
|
98
100
|
|
99
|
-
<
|
100
|
-
icon="print"
|
101
|
+
<md-fab
|
101
102
|
title="print"
|
102
103
|
@click=${() =>
|
103
104
|
GhostPrint.print({
|
104
105
|
src: `./data-sample/${this.dataSampleId}`
|
105
106
|
})}
|
106
|
-
>print</mwc-fab
|
107
107
|
>
|
108
|
+
<md-icon slot="icon">print</md-icon>
|
109
|
+
</md-fab>
|
108
110
|
`
|
109
111
|
}
|
110
112
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
1
2
|
import '@operato/data-grist'
|
2
3
|
import '@operato/context/ox-context-page-toolbar.js'
|
3
4
|
|
@@ -11,15 +12,18 @@ import { client } from '@operato/graphql'
|
|
11
12
|
import { i18next, localize } from '@operato/i18n'
|
12
13
|
import { notify } from '@operato/layout'
|
13
14
|
import { PageView, store } from '@operato/shell'
|
14
|
-
import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
|
15
|
+
import { CommonGristStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
|
15
16
|
import { isMobileDevice } from '@operato/utils'
|
16
17
|
import { DataGrist, FetchOption } from '@operato/data-grist'
|
17
18
|
import { OxPrompt } from '@operato/popup/ox-prompt.js'
|
18
19
|
|
20
|
+
import { p13n } from '@operato/p13n'
|
21
|
+
|
19
22
|
@customElement('data-sensor-list-page')
|
20
|
-
export class DataSensorListPage extends connect(store)(localize(i18next)(PageView)) {
|
23
|
+
export class DataSensorListPage extends connect(store)(p13n(localize(i18next)(PageView))) {
|
21
24
|
static styles = [
|
22
25
|
ScrollbarStyles,
|
26
|
+
CommonGristStyles,
|
23
27
|
CommonHeaderStyles,
|
24
28
|
css`
|
25
29
|
:host {
|
@@ -33,15 +37,6 @@ export class DataSensorListPage extends connect(store)(localize(i18next)(PageVie
|
|
33
37
|
overflow-y: auto;
|
34
38
|
flex: 1;
|
35
39
|
}
|
36
|
-
|
37
|
-
@media (max-width: 450px) {
|
38
|
-
.header {
|
39
|
-
display: grid;
|
40
|
-
grid-template-areas:
|
41
|
-
'title actions'
|
42
|
-
'filters filters';
|
43
|
-
}
|
44
|
-
}
|
45
40
|
`
|
46
41
|
]
|
47
42
|
|
@@ -79,7 +74,10 @@ export class DataSensorListPage extends connect(store)(localize(i18next)(PageVie
|
|
79
74
|
{
|
80
75
|
icon: 'delete',
|
81
76
|
title: i18next.t('button.delete'),
|
82
|
-
action: this._deleteDataSensor.bind(this)
|
77
|
+
action: this._deleteDataSensor.bind(this),
|
78
|
+
emphasis: {
|
79
|
+
danger: true
|
80
|
+
}
|
83
81
|
}
|
84
82
|
],
|
85
83
|
toolbar: false
|
@@ -90,12 +88,15 @@ export class DataSensorListPage extends connect(store)(localize(i18next)(PageVie
|
|
90
88
|
const mode = this.mode || (isMobileDevice() ? 'LIST' : 'GRID')
|
91
89
|
|
92
90
|
return html`
|
93
|
-
<ox-grist
|
91
|
+
<ox-grist
|
92
|
+
.mode=${mode}
|
93
|
+
.config=${this.gristConfig}
|
94
|
+
.fetchHandler=${this.fetchHandler.bind(this)}
|
95
|
+
.personalConfigProvider=${this.getPagePreferenceProvider('ox-grist')}
|
96
|
+
?url-params-sensitive=${this.active}
|
97
|
+
>
|
94
98
|
<div slot="headroom" class="header">
|
95
|
-
<div class="title">
|
96
|
-
<mwc-icon>summarize</mwc-icon>
|
97
|
-
${i18next.t('title.data-sensor list')}
|
98
|
-
</div>
|
99
|
+
<div class="title">${i18next.t('title.data-sensor list')}</div>
|
99
100
|
|
100
101
|
<div class="filters">
|
101
102
|
<ox-filters-form class="filter" autofocus without-search></ox-filters-form>
|
@@ -103,6 +104,8 @@ export class DataSensorListPage extends connect(store)(localize(i18next)(PageVie
|
|
103
104
|
|
104
105
|
<ox-context-page-toolbar class="actions" .context=${this.context}></ox-context-page-toolbar>
|
105
106
|
</div>
|
107
|
+
|
108
|
+
<ox-grist-personalizer slot="setting"></ox-grist-personalizer>
|
106
109
|
</ox-grist>
|
107
110
|
`
|
108
111
|
}
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
2
|
+
|
1
3
|
import gql from 'graphql-tag'
|
2
4
|
|
3
5
|
import { css, html, LitElement } from 'lit'
|
@@ -7,6 +9,7 @@ import { client } from '@operato/graphql'
|
|
7
9
|
import { i18next, localize } from '@operato/i18n'
|
8
10
|
import { isMobileDevice } from '@operato/utils'
|
9
11
|
import { DataGrist, FetchOption } from '@operato/data-grist'
|
12
|
+
import { ButtonContainerStyles } from '@operato/styles'
|
10
13
|
|
11
14
|
const DataItemStats = ['sum', 'mean', 'stddev', 'variance', 'min', 'max', 'range', 'median', 'mode']
|
12
15
|
|
@@ -17,6 +20,7 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
17
20
|
@state() gristConfig: any
|
18
21
|
|
19
22
|
static styles = [
|
23
|
+
ButtonContainerStyles,
|
20
24
|
css`
|
21
25
|
:host {
|
22
26
|
display: flex;
|
@@ -28,19 +32,6 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
28
32
|
ox-grist {
|
29
33
|
flex: 1;
|
30
34
|
}
|
31
|
-
|
32
|
-
.button-container {
|
33
|
-
display: flex;
|
34
|
-
margin-left: auto;
|
35
|
-
padding: var(--padding-default);
|
36
|
-
}
|
37
|
-
|
38
|
-
[danger] {
|
39
|
-
--mdc-theme-primary: var(--mdc-danger-button-primary-color);
|
40
|
-
}
|
41
|
-
mwc-button {
|
42
|
-
margin-left: var(--margin-default);
|
43
|
-
}
|
44
35
|
`
|
45
36
|
]
|
46
37
|
|
@@ -49,9 +40,10 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
49
40
|
render() {
|
50
41
|
return html`
|
51
42
|
<ox-grist .mode=${isMobileDevice() ? 'LIST' : 'GRID'} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}></ox-grist>
|
43
|
+
|
52
44
|
<div class="button-container">
|
53
|
-
<
|
54
|
-
<
|
45
|
+
<button danger @click=${this._deleteDataItems.bind(this)}><md-icon>delete_forever</md-icon>${i18next.t('button.delete')}</button>
|
46
|
+
<button @click=${this._updateDataItems.bind(this)}><md-icon>save</md-icon>${i18next.t('button.save')}</button>
|
55
47
|
</div>
|
56
48
|
`
|
57
49
|
}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
1
2
|
import '@operato/data-grist'
|
2
3
|
|
3
4
|
import gql from 'graphql-tag'
|
@@ -8,10 +9,11 @@ import { client } from '@operato/graphql'
|
|
8
9
|
import { i18next } from '@operato/i18n'
|
9
10
|
import { isMobileDevice } from '@operato/utils'
|
10
11
|
import { DataSet } from '@operato/dataset'
|
11
|
-
|
12
|
+
import { ButtonContainerStyles } from '@operato/styles'
|
12
13
|
@customElement('data-set-importer')
|
13
14
|
export class DataSetImporter extends LitElement {
|
14
15
|
static styles = [
|
16
|
+
ButtonContainerStyles,
|
15
17
|
css`
|
16
18
|
:host {
|
17
19
|
display: flex;
|
@@ -23,16 +25,6 @@ export class DataSetImporter extends LitElement {
|
|
23
25
|
ox-grist {
|
24
26
|
flex: 1;
|
25
27
|
}
|
26
|
-
|
27
|
-
.button-container {
|
28
|
-
display: flex;
|
29
|
-
margin-left: auto;
|
30
|
-
padding: var(--padding-default);
|
31
|
-
}
|
32
|
-
|
33
|
-
mwc-button {
|
34
|
-
margin-left: var(--margin-default);
|
35
|
-
}
|
36
28
|
`
|
37
29
|
]
|
38
30
|
|
@@ -65,14 +57,10 @@ export class DataSetImporter extends LitElement {
|
|
65
57
|
|
66
58
|
render() {
|
67
59
|
return html`
|
68
|
-
<ox-grist
|
69
|
-
.mode=${isMobileDevice() ? 'LIST' : 'GRID'}
|
70
|
-
.config=${this.columns}
|
71
|
-
.data=${{ records: this.dataSets }}
|
72
|
-
></ox-grist>
|
60
|
+
<ox-grist .mode=${isMobileDevice() ? 'LIST' : 'GRID'} .config=${this.columns} .data=${{ records: this.dataSets }}></ox-grist>
|
73
61
|
|
74
62
|
<div class="button-container">
|
75
|
-
<
|
63
|
+
<button @click=${this.save.bind(this)}><md-icon>save</md-icon>${i18next.t('button.save')}</button>
|
76
64
|
</div>
|
77
65
|
`
|
78
66
|
}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
1
2
|
import '@operato/data-grist'
|
2
3
|
import '@operato/context/ox-context-page-toolbar.js'
|
3
4
|
import './data-item-list.js'
|
@@ -8,7 +9,7 @@ import gql from 'graphql-tag'
|
|
8
9
|
import { css, html } from 'lit'
|
9
10
|
import { customElement, query, state } from 'lit/decorators.js'
|
10
11
|
import { asyncReplace } from 'lit/directives/async-replace.js'
|
11
|
-
import moment from 'moment-timezone'
|
12
|
+
import moment from '@operato/moment-timezone-es'
|
12
13
|
import { connect } from 'pwa-helpers/connect-mixin'
|
13
14
|
|
14
15
|
import { DataGrist, FetchOption, getEditor, getRenderer, ImexConfig } from '@operato/data-grist'
|
@@ -17,9 +18,11 @@ import { client } from '@operato/graphql'
|
|
17
18
|
import { i18next, localize } from '@operato/i18n'
|
18
19
|
import { notify, openPopup } from '@operato/layout'
|
19
20
|
import { PageView, store } from '@operato/shell'
|
20
|
-
import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
|
21
|
+
import { CommonGristStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
|
21
22
|
import { isMobileDevice, sleep } from '@operato/utils'
|
22
23
|
|
24
|
+
import { p13n } from '@operato/p13n'
|
25
|
+
|
23
26
|
const MIN = 60
|
24
27
|
const HOUR = 60 * MIN
|
25
28
|
const DAY = 24 * HOUR
|
@@ -74,9 +77,10 @@ const USECASE_OPTIONS = () => {
|
|
74
77
|
}
|
75
78
|
|
76
79
|
@customElement('data-set-list-page')
|
77
|
-
export class DataSetListPage extends connect(store)(localize(i18next)(PageView)) {
|
80
|
+
export class DataSetListPage extends connect(store)(p13n(localize(i18next)(PageView))) {
|
78
81
|
static styles = [
|
79
82
|
ScrollbarStyles,
|
83
|
+
CommonGristStyles,
|
80
84
|
CommonHeaderStyles,
|
81
85
|
css`
|
82
86
|
:host {
|
@@ -98,6 +102,7 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
|
|
98
102
|
]
|
99
103
|
|
100
104
|
@state() gristConfig: any
|
105
|
+
|
101
106
|
@state() mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'
|
102
107
|
|
103
108
|
@query('ox-grist') private grist!: DataGrist
|
@@ -138,7 +143,10 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
|
|
138
143
|
{
|
139
144
|
title: i18next.t('button.delete'),
|
140
145
|
action: this._deleteDataSet.bind(this),
|
141
|
-
icon: 'delete'
|
146
|
+
icon: 'delete',
|
147
|
+
emphasis: {
|
148
|
+
danger: true
|
149
|
+
}
|
142
150
|
}
|
143
151
|
],
|
144
152
|
toolbar: false
|
@@ -149,12 +157,15 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
|
|
149
157
|
const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')
|
150
158
|
|
151
159
|
return html`
|
152
|
-
<ox-grist
|
160
|
+
<ox-grist
|
161
|
+
.mode=${mode}
|
162
|
+
.config=${this.gristConfig}
|
163
|
+
.personalConfigProvider=${this.getPagePreferenceProvider('ox-grist')}
|
164
|
+
.fetchHandler=${this.fetchHandler.bind(this)}
|
165
|
+
?url-params-sensitive=${this.active}
|
166
|
+
>
|
153
167
|
<div slot="headroom" class="header">
|
154
|
-
<div class="title">
|
155
|
-
<mwc-icon>summarize</mwc-icon>
|
156
|
-
${i18next.t('title.data-set list')}
|
157
|
-
</div>
|
168
|
+
<div class="title">${i18next.t('title.data-set list')}</div>
|
158
169
|
|
159
170
|
<div class="filters">
|
160
171
|
<ox-filters-form autofocus without-search></ox-filters-form>
|
@@ -162,6 +173,8 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
|
|
162
173
|
|
163
174
|
<ox-context-page-toolbar class="actions" .context=${this.context}> </ox-context-page-toolbar>
|
164
175
|
</div>
|
176
|
+
|
177
|
+
<ox-grist-personalizer slot="setting"></ox-grist-personalizer>
|
165
178
|
</ox-grist>
|
166
179
|
`
|
167
180
|
}
|
@@ -224,11 +237,14 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
|
|
224
237
|
title: i18next.t('title.data collecting editor'),
|
225
238
|
handlers: {
|
226
239
|
click: (columns, data, column, record, rowIndex) => {
|
227
|
-
openPopup(
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
240
|
+
openPopup(
|
241
|
+
html` <data-entry-form .dataSet=${record} style="background-color: white;"></data-entry-form> `,
|
242
|
+
{
|
243
|
+
backdrop: true,
|
244
|
+
size: 'large',
|
245
|
+
title: i18next.t('title.data-entry-form')
|
246
|
+
}
|
247
|
+
)
|
232
248
|
}
|
233
249
|
}
|
234
250
|
},
|
@@ -982,7 +998,9 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
|
|
982
998
|
.filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
|
983
999
|
.reduce((record, column) => {
|
984
1000
|
var imexKey = (column.imex as ImexConfig)!.key
|
985
|
-
record[imexKey] = imexKey
|
1001
|
+
record[imexKey] = imexKey
|
1002
|
+
.split('.')
|
1003
|
+
.reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
|
986
1004
|
return record
|
987
1005
|
}, {})
|
988
1006
|
}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
1
2
|
import '@operato/data-grist'
|
2
3
|
import '@operato/context/ox-context-page-toolbar.js'
|
3
4
|
import './data-summary-view.js'
|
@@ -6,7 +7,7 @@ import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
|
|
6
7
|
import { PageView, store } from '@operato/shell'
|
7
8
|
import { css, html } from 'lit'
|
8
9
|
import { customElement, property, query, state } from 'lit/decorators.js'
|
9
|
-
import moment from 'moment-timezone'
|
10
|
+
import moment from '@operato/moment-timezone-es'
|
10
11
|
import { DataGrist, GristRecord, FetchOption } from '@operato/data-grist'
|
11
12
|
import { client } from '@operato/graphql'
|
12
13
|
import { i18next, localize } from '@operato/i18n'
|
@@ -24,13 +25,14 @@ export class DataSummaryListPage extends connect(store)(localize(i18next)(PageVi
|
|
24
25
|
css`
|
25
26
|
:host {
|
26
27
|
display: flex;
|
28
|
+
flex-direction: column;
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
-
--grid-record-emphasized-background-color: #8b0000;
|
31
|
-
--grid-record-emphasized-color: #ff6b6b;
|
30
|
+
overflow: hidden;
|
31
|
+
}
|
32
32
|
|
33
|
-
|
33
|
+
ox-grist {
|
34
|
+
overflow-y: auto;
|
35
|
+
flex: 1;
|
34
36
|
}
|
35
37
|
`
|
36
38
|
]
|
@@ -69,10 +71,7 @@ export class DataSummaryListPage extends connect(store)(localize(i18next)(PageVi
|
|
69
71
|
return html`
|
70
72
|
<ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)} ?url-params-sensitive=${false /* this.active */}>
|
71
73
|
<div slot="headroom" class="header">
|
72
|
-
<div class="title">
|
73
|
-
<mwc-icon>summarize</mwc-icon>
|
74
|
-
${i18next.t('title.data-summary list')}
|
75
|
-
</div>
|
74
|
+
<div class="title">${i18next.t('title.data-summary list')}</div>
|
76
75
|
|
77
76
|
<div class="filters">
|
78
77
|
<ox-filters-form autofocus without-search></ox-filters-form>
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
1
2
|
import '@operato/input/ox-input-select-buttons.js'
|
2
3
|
import '@operato/data-grist'
|
3
4
|
import '@operato/context/ox-context-page-toolbar.js'
|
@@ -83,10 +84,7 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
83
84
|
return html`
|
84
85
|
<ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
|
85
86
|
<div slot="headroom" class="header">
|
86
|
-
<div class="title">
|
87
|
-
<mwc-icon>summarize</mwc-icon>
|
88
|
-
${i18next.t('title.data-summary period')}
|
89
|
-
</div>
|
87
|
+
<div class="title">${i18next.t('title.data-summary period')}</div>
|
90
88
|
|
91
89
|
<div
|
92
90
|
class="filters"
|
@@ -348,22 +346,8 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
348
346
|
|
349
347
|
const response = await client.query({
|
350
348
|
query: gql`
|
351
|
-
query (
|
352
|
-
$dataSetName:
|
353
|
-
$period: String!
|
354
|
-
$dataKeys: [String!]
|
355
|
-
$filters: [Filter!]
|
356
|
-
$pagination: Pagination
|
357
|
-
$sortings: [Sorting!]
|
358
|
-
) {
|
359
|
-
dataSummaryByPeriod(
|
360
|
-
dataSetName: $dataSetName
|
361
|
-
period: $period
|
362
|
-
dataKeys: $dataKeys
|
363
|
-
filters: $filters
|
364
|
-
pagination: $pagination
|
365
|
-
sortings: $sortings
|
366
|
-
) {
|
349
|
+
query ($dataSetName: String!, $period: String!, $dataKeys: [String!], $filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
|
350
|
+
dataSummaryByPeriod(dataSetName: $dataSetName, period: $period, dataKeys: $dataKeys, filters: $filters, pagination: $pagination, sortings: $sortings) {
|
367
351
|
month
|
368
352
|
date
|
369
353
|
period
|
@@ -426,9 +410,7 @@ export class DataSummaryGroupPage extends connect(store)(localize(i18next)(PageV
|
|
426
410
|
.filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
|
427
411
|
.reduce((record, column) => {
|
428
412
|
const key = column.imex === true ? column.name : column.imex.key
|
429
|
-
record[key] = key
|
430
|
-
.split('.')
|
431
|
-
.reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
|
413
|
+
record[key] = key.split('.').reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
|
432
414
|
return record
|
433
415
|
}, {})
|
434
416
|
}
|