@things-factory/dataset 6.2.99 → 6.2.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.
Files changed (43) hide show
  1. package/client/pages/data-ooc/data-ooc-list-page.ts +26 -11
  2. package/client/pages/data-ooc/{data-ooc-view-page.ts → data-ooc-page.ts} +1 -1
  3. package/client/pages/data-ooc/data-ooc-view.ts +10 -10
  4. package/client/pages/data-ooc/data-oocs-page.ts +132 -0
  5. package/client/pages/data-sample/data-sample-list-page.ts +25 -20
  6. package/client/pages/data-sample/{data-sample-view-page.ts → data-sample-page.ts} +1 -1
  7. package/client/pages/data-sample/data-sample-view.ts +11 -9
  8. package/client/pages/data-sample/data-samples-page.ts +121 -0
  9. package/client/route.ts +10 -2
  10. package/dist-client/pages/data-ooc/data-ooc-list-page.d.ts +6 -0
  11. package/dist-client/pages/data-ooc/data-ooc-list-page.js +17 -3
  12. package/dist-client/pages/data-ooc/data-ooc-list-page.js.map +1 -1
  13. package/dist-client/pages/data-ooc/{data-ooc-view-page.js → data-ooc-page.js} +2 -2
  14. package/dist-client/pages/data-ooc/data-ooc-page.js.map +1 -0
  15. package/dist-client/pages/data-ooc/data-ooc-view.js +10 -10
  16. package/dist-client/pages/data-ooc/data-ooc-view.js.map +1 -1
  17. package/dist-client/pages/data-ooc/data-oocs-page.d.ts +17 -0
  18. package/dist-client/pages/data-ooc/data-oocs-page.js +132 -0
  19. package/dist-client/pages/data-ooc/data-oocs-page.js.map +1 -0
  20. package/dist-client/pages/data-sample/data-sample-list-page.d.ts +6 -1
  21. package/dist-client/pages/data-sample/data-sample-list-page.js +19 -13
  22. package/dist-client/pages/data-sample/data-sample-list-page.js.map +1 -1
  23. package/dist-client/pages/data-sample/{data-sample-view-page.js → data-sample-page.js} +2 -2
  24. package/dist-client/pages/data-sample/data-sample-page.js.map +1 -0
  25. package/dist-client/pages/data-sample/data-sample-view.js +11 -9
  26. package/dist-client/pages/data-sample/data-sample-view.js.map +1 -1
  27. package/dist-client/pages/data-sample/data-samples-page.d.ts +19 -0
  28. package/dist-client/pages/data-sample/data-samples-page.js +120 -0
  29. package/dist-client/pages/data-sample/data-samples-page.js.map +1 -0
  30. package/dist-client/route.js +8 -2
  31. package/dist-client/route.js.map +1 -1
  32. package/dist-client/tsconfig.tsbuildinfo +1 -1
  33. package/package.json +2 -2
  34. package/things-factory.config.js +10 -2
  35. package/translations/en.json +1 -0
  36. package/translations/ja.json +1 -0
  37. package/translations/ko.json +1 -0
  38. package/translations/ms.json +1 -0
  39. package/translations/zh.json +1 -0
  40. package/dist-client/pages/data-ooc/data-ooc-view-page.js.map +0 -1
  41. package/dist-client/pages/data-sample/data-sample-view-page.js.map +0 -1
  42. /package/dist-client/pages/data-ooc/{data-ooc-view-page.d.ts → data-ooc-page.d.ts} +0 -0
  43. /package/dist-client/pages/data-sample/{data-sample-view-page.d.ts → data-sample-page.d.ts} +0 -0
@@ -1,6 +1,7 @@
1
1
  import '@operato/data-grist'
2
2
  import '@operato/context/ox-context-page-toolbar.js'
3
3
  import '@operato/input/ox-input-select-buttons.js'
4
+
4
5
  import './data-ooc-view.js'
5
6
 
6
7
  import gql from 'graphql-tag'
@@ -8,6 +9,8 @@ import { css, html } from 'lit'
8
9
  import { customElement, property, query, state } from 'lit/decorators.js'
9
10
  import { connect } from 'pwa-helpers/connect-mixin'
10
11
 
12
+ import { GhostPrint } from '@operato/ghost-print'
13
+
11
14
  function getOocStatus() {
12
15
  return [
13
16
  {
@@ -74,6 +77,13 @@ export class DataOocListPage extends connect(store)(localize(i18next)(PageView))
74
77
  }
75
78
  },
76
79
  help: 'dataset/data-ooc',
80
+ actions: [
81
+ {
82
+ title: i18next.t('button.print'),
83
+ action: this.printOocs.bind(this),
84
+ icon: 'print'
85
+ }
86
+ ],
77
87
  exportable: {
78
88
  name: i18next.t('title.data-ooc list'),
79
89
  data: this._exportableData.bind(this)
@@ -126,14 +136,11 @@ export class DataOocListPage extends connect(store)(localize(i18next)(PageView))
126
136
  title: i18next.t('title.view detail ooc data'),
127
137
  handlers: {
128
138
  click: (columns, data, column, record, rowIndex) => {
129
- const popup = openPopup(
130
- html` <data-ooc-view .dataOoc=${record} style="background-color: white;"></data-ooc-view> `,
131
- {
132
- backdrop: true,
133
- size: 'large',
134
- title: i18next.t('title.data-ooc view')
135
- }
136
- )
139
+ const popup = openPopup(html` <data-ooc-view .dataOoc=${record} style="background-color: white;"></data-ooc-view> `, {
140
+ backdrop: true,
141
+ size: 'large',
142
+ title: i18next.t('title.data-ooc view')
143
+ })
137
144
  popup.onclosed = () => {
138
145
  this.grist.fetch()
139
146
  }
@@ -479,9 +486,7 @@ export class DataOocListPage extends connect(store)(localize(i18next)(PageView))
479
486
  .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
480
487
  .reduce((record, column) => {
481
488
  const key = column.imex === true ? column.name : column.imex.key
482
- record[key] = key
483
- .split('.')
484
- .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
489
+ record[key] = key.split('.').reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
485
490
  return record
486
491
  }, {})
487
492
  }
@@ -489,4 +494,14 @@ export class DataOocListPage extends connect(store)(localize(i18next)(PageView))
489
494
 
490
495
  return { header: headerSetting, data: data }
491
496
  }
497
+
498
+ printOocs() {
499
+ const selected = this.grist.selected
500
+ const ids = selected.map(record => record.id).join('|')
501
+
502
+ GhostPrint.print({
503
+ src: `./data-oocs?ids=${ids}`
504
+ // pending: 200 * selected.length
505
+ })
506
+ }
492
507
  }
@@ -8,7 +8,7 @@ import { client } from '@operato/graphql'
8
8
 
9
9
  import './data-ooc-view.js'
10
10
 
11
- @customElement('data-ooc-view-page')
11
+ @customElement('data-ooc-page')
12
12
  export class DataOocViewPage extends localize(i18next)(PageView) {
13
13
  static styles = [
14
14
  css`
@@ -21,13 +21,6 @@ export class DataOocView extends localize(i18next)(LitElement) {
21
21
  background-color: #fff;
22
22
  }
23
23
 
24
- div[content] {
25
- flex: 1;
26
-
27
- display: flex;
28
- overflow: auto;
29
- }
30
-
31
24
  ox-data-ooc-brief-view {
32
25
  flex: 1;
33
26
  padding: var(--padding-wide);
@@ -43,6 +36,15 @@ export class DataOocView extends localize(i18next)(LitElement) {
43
36
  }
44
37
 
45
38
  @media print {
39
+ :host {
40
+ display: block;
41
+ }
42
+
43
+ ox-data-ooc-brief-view {
44
+ flex: unset;
45
+ overflow: visible;
46
+ }
47
+
46
48
  mwc-fab {
47
49
  display: none;
48
50
  }
@@ -58,9 +60,7 @@ export class DataOocView extends localize(i18next)(LitElement) {
58
60
 
59
61
  render() {
60
62
  return html`
61
- <div content>
62
- <ox-data-ooc-brief-view .dataOoc=${this.dataOoc}></ox-data-ooc-brief-view>
63
- </div>
63
+ <ox-data-ooc-brief-view .dataOoc=${this.dataOoc}></ox-data-ooc-brief-view>
64
64
 
65
65
  <mwc-fab
66
66
  icon="print"
@@ -0,0 +1,132 @@
1
+ import '@operato/dataset/ox-data-ooc-brief-view.js'
2
+
3
+ import gql from 'graphql-tag'
4
+ import { PropertyValues, html, css } from 'lit'
5
+ import { customElement, state } from 'lit/decorators.js'
6
+ import { PageView } from '@operato/shell'
7
+ import { i18next, localize } from '@operato/i18n'
8
+ import { client } from '@operato/graphql'
9
+
10
+ /**
11
+ * 이 페이지는 여러개의 Data OOC를 한번에 프린트하기 위한 용도로 사용되는 페이지이다.
12
+ */
13
+ @customElement('data-oocs-page')
14
+ export class DataOocsPage extends localize(i18next)(PageView) {
15
+ static styles = [
16
+ css`
17
+ :host {
18
+ display: block;
19
+ overflow: auto;
20
+ }
21
+
22
+ ox-data-ooc-brief-view {
23
+ page-break-after: always;
24
+ break-after: always;
25
+ }
26
+ `
27
+ ]
28
+
29
+ @state() dataOocs?: any[]
30
+
31
+ get context() {
32
+ return {
33
+ title: i18next.t('title.data-ooc view')
34
+ }
35
+ }
36
+
37
+ render() {
38
+ return this.dataOocs?.map(dataOoc => html` <ox-data-ooc-brief-view .dataOoc=${dataOoc}></ox-data-ooc-brief-view> `)
39
+ }
40
+
41
+ pageUpdated(changes: any, lifecycle: any, before: any) {
42
+ if (this.active) {
43
+ /*
44
+ * this page is activated
45
+ */
46
+ const { ids = '' } = lifecycle.params
47
+
48
+ this.fetchOocs(ids.split('|').map(id => id.trim()))
49
+ } else {
50
+ /* this page is deactivated */
51
+ }
52
+ }
53
+
54
+ async fetchOocs(ids: string[]) {
55
+ const filters = [
56
+ {
57
+ name: 'id',
58
+ operator: 'in',
59
+ value: ids
60
+ }
61
+ ]
62
+
63
+ const response = await client.query({
64
+ query: gql`
65
+ query ($filters: [Filter!]) {
66
+ dataOocs(filters: $filters) {
67
+ items {
68
+ id
69
+ name
70
+ description
71
+ useCase
72
+ dataSet {
73
+ id
74
+ name
75
+ }
76
+ key01
77
+ key02
78
+ key03
79
+ key04
80
+ key05
81
+ partitionKeys
82
+ dataItems {
83
+ name
84
+ description
85
+ active
86
+ tag
87
+ group
88
+ type
89
+ unit
90
+ options
91
+ quota
92
+ spec
93
+ }
94
+ data
95
+ rawData
96
+ judgment
97
+ ooc
98
+ oos
99
+ state
100
+ history
101
+ workDate
102
+ workShift
103
+ correctiveInstruction
104
+ correctiveAction
105
+ reviewedAt
106
+ reviewer {
107
+ id
108
+ name
109
+ }
110
+ correctedAt
111
+ corrector {
112
+ id
113
+ name
114
+ }
115
+ updater {
116
+ id
117
+ name
118
+ }
119
+ updatedAt
120
+ collectedAt
121
+ }
122
+ }
123
+ }
124
+ `,
125
+ variables: {
126
+ filters
127
+ }
128
+ })
129
+
130
+ this.dataOocs = response.data.dataOocs.items
131
+ }
132
+ }
@@ -15,6 +15,7 @@ import { openPopup } from '@operato/layout'
15
15
  import { PageView, store } from '@operato/shell'
16
16
  import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
17
17
  import { isMobileDevice } from '@operato/utils'
18
+ import { GhostPrint } from '@operato/ghost-print'
18
19
 
19
20
  @customElement('data-sample-list-page')
20
21
  export class DataSampleListPage extends connect(store)(localize(i18next)(PageView)) {
@@ -56,7 +57,13 @@ export class DataSampleListPage extends connect(store)(localize(i18next)(PageVie
56
57
  }
57
58
  },
58
59
  help: 'dataset/data-sample',
59
- actions: [],
60
+ actions: [
61
+ {
62
+ title: i18next.t('button.print'),
63
+ action: this.printSamples.bind(this),
64
+ icon: 'print'
65
+ }
66
+ ],
60
67
  exportable: {
61
68
  name: i18next.t('title.data-sample list'),
62
69
  data: this._exportableData.bind(this)
@@ -69,12 +76,7 @@ export class DataSampleListPage extends connect(store)(localize(i18next)(PageVie
69
76
  const mode = this.mode || (isMobileDevice() ? 'LIST' : 'GRID')
70
77
 
71
78
  return html`
72
- <ox-grist
73
- .mode=${mode}
74
- .config=${this.gristConfig}
75
- .fetchHandler=${this.fetchHandler.bind(this)}
76
- ?url-params-sensitive=${false /* this.active */}
77
- >
79
+ <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)} ?url-params-sensitive=${false /* this.active */}>
78
80
  <div slot="headroom" class="header">
79
81
  <div class="title">
80
82
  <mwc-icon>summarize</mwc-icon>
@@ -108,16 +110,11 @@ export class DataSampleListPage extends connect(store)(localize(i18next)(PageVie
108
110
  title: i18next.t('title.open data sample view'),
109
111
  handlers: {
110
112
  click: (columns, data, column, record, rowIndex) => {
111
- openPopup(
112
- html`
113
- <data-sample-view data-sample-id=${record.id} style="background-color: white;"></data-sample-view>
114
- `,
115
- {
116
- backdrop: true,
117
- size: 'large',
118
- title: i18next.t('title.data-sample view')
119
- }
120
- )
113
+ openPopup(html` <data-sample-view data-sample-id=${record.id} style="background-color: white;"></data-sample-view> `, {
114
+ backdrop: true,
115
+ size: 'large',
116
+ title: i18next.t('title.data-sample view')
117
+ })
121
118
  }
122
119
  }
123
120
  },
@@ -387,9 +384,7 @@ export class DataSampleListPage extends connect(store)(localize(i18next)(PageVie
387
384
  .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
388
385
  .reduce((record, column) => {
389
386
  const key = column.imex === true ? column.name : column.imex.key
390
- record[key] = key
391
- .split('.')
392
- .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
387
+ record[key] = key.split('.').reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
393
388
  return record
394
389
  }, {})
395
390
  }
@@ -397,4 +392,14 @@ export class DataSampleListPage extends connect(store)(localize(i18next)(PageVie
397
392
 
398
393
  return { header: headerSetting, data: data }
399
394
  }
395
+
396
+ printSamples() {
397
+ const selected = this.grist.selected
398
+ const ids = selected.map(record => record.id).join('|')
399
+
400
+ GhostPrint.print({
401
+ src: `./data-samples?ids=${ids}`
402
+ // pending: 200 * selected.length
403
+ })
404
+ }
400
405
  }
@@ -5,7 +5,7 @@ import { i18next, localize } from '@operato/i18n'
5
5
 
6
6
  import './data-sample-view.js'
7
7
 
8
- @customElement('data-sample-view-page')
8
+ @customElement('data-sample-page')
9
9
  export class DataSampleViewPage extends localize(i18next)(PageView) {
10
10
  static styles = [
11
11
  css`
@@ -1,7 +1,7 @@
1
1
  import '@operato/dataset/ox-data-sample-view.js'
2
2
 
3
3
  import gql from 'graphql-tag'
4
- import { css, html, LitElement } from 'lit'
4
+ import { css, html, LitElement, nothing } from 'lit'
5
5
  import { customElement, property, state } from 'lit/decorators.js'
6
6
 
7
7
  import { client } from '@operato/graphql'
@@ -22,13 +22,6 @@ class DataSampleView extends localize(i18next)(LitElement) {
22
22
  background-color: #fff;
23
23
  }
24
24
 
25
- div[content] {
26
- flex: 1;
27
-
28
- display: flex;
29
- overflow: auto;
30
- }
31
-
32
25
  ox-data-sample-view {
33
26
  flex: 1;
34
27
  padding: var(--padding-wide);
@@ -44,6 +37,15 @@ class DataSampleView extends localize(i18next)(LitElement) {
44
37
  }
45
38
 
46
39
  @media print {
40
+ :host {
41
+ display: block;
42
+ }
43
+
44
+ ox-data-sample-view {
45
+ flex: unset;
46
+ overflow: visible;
47
+ }
48
+
47
49
  mwc-fab {
48
50
  display: none;
49
51
  }
@@ -63,7 +65,7 @@ class DataSampleView extends localize(i18next)(LitElement) {
63
65
 
64
66
  render() {
65
67
  return html`
66
- <div content>${this.dataSample ? html`<ox-data-sample-view .dataSample=${this.dataSample}></ox-data-sample-view>` : html``}</div>
68
+ ${this.dataSample ? html`<ox-data-sample-view .dataSample=${this.dataSample}></ox-data-sample-view>` : nothing}
67
69
 
68
70
  <mwc-fab
69
71
  icon="print"
@@ -0,0 +1,121 @@
1
+ import '@operato/dataset/ox-data-sample-view.js'
2
+
3
+ import gql from 'graphql-tag'
4
+ import { PropertyValues, html, css } from 'lit'
5
+ import { customElement, state } from 'lit/decorators.js'
6
+ import { PageView } from '@operato/shell'
7
+ import { i18next, localize } from '@operato/i18n'
8
+ import { client } from '@operato/graphql'
9
+
10
+ /**
11
+ * 이 페이지는 여러개의 Data Sample을 한번에 프린트하기 위한 용도로 사용되는 페이지이다.
12
+ */
13
+ @customElement('data-samples-page')
14
+ export class DataSamplesPage extends localize(i18next)(PageView) {
15
+ static styles = [
16
+ css`
17
+ :host {
18
+ display: block;
19
+ overflow: auto;
20
+ }
21
+
22
+ ox-data-sample-view {
23
+ page-break-after: always;
24
+ break-after: always;
25
+ }
26
+ `
27
+ ]
28
+
29
+ @state() dataSamples?: any[]
30
+
31
+ get context() {
32
+ return {
33
+ title: i18next.t('title.data-sample view')
34
+ }
35
+ }
36
+
37
+ render() {
38
+ return this.dataSamples?.map(dataSample => html` <ox-data-sample-view .dataSample=${dataSample}></ox-data-sample-view> `)
39
+ }
40
+
41
+ updated(changes: PropertyValues<this>) {}
42
+
43
+ pageUpdated(changes: any, lifecycle: any, before: any) {
44
+ if (this.active) {
45
+ /*
46
+ * this page is activated
47
+ */
48
+ const { ids = '' } = lifecycle.params
49
+
50
+ this.fetchSamples(ids.split('|').map(id => id.trim()))
51
+ } else {
52
+ /* this page is deactivated */
53
+ }
54
+ }
55
+
56
+ async fetchSamples(ids: string[]) {
57
+ const filters = [
58
+ {
59
+ name: 'id',
60
+ operator: 'in',
61
+ value: ids
62
+ }
63
+ ]
64
+
65
+ const response = await client.query({
66
+ query: gql`
67
+ query ($filters: [Filter!]) {
68
+ dataSamples(filters: $filters) {
69
+ items {
70
+ id
71
+ name
72
+ description
73
+ useCase
74
+ key01
75
+ key02
76
+ key03
77
+ key04
78
+ key05
79
+ data
80
+ ooc
81
+ oos
82
+ dataSet {
83
+ id
84
+ name
85
+ description
86
+ }
87
+ dataItems {
88
+ name
89
+ description
90
+ active
91
+ hidden
92
+ tag
93
+ group
94
+ type
95
+ unit
96
+ options
97
+ quota
98
+ spec
99
+ stat
100
+ }
101
+ judgment
102
+ workDate
103
+ workShift
104
+ updater {
105
+ id
106
+ name
107
+ }
108
+ updatedAt
109
+ collectedAt
110
+ }
111
+ }
112
+ }
113
+ `,
114
+ variables: {
115
+ filters
116
+ }
117
+ })
118
+
119
+ this.dataSamples = response.data.dataSamples.items
120
+ }
121
+ }
package/client/route.ts CHANGED
@@ -9,7 +9,11 @@ export default function route(page) {
9
9
  return page
10
10
 
11
11
  case 'data-sample':
12
- import('./pages/data-sample/data-sample-view-page.js')
12
+ import('./pages/data-sample/data-sample-page.js')
13
+ return page
14
+
15
+ case 'data-samples':
16
+ import('./pages/data-sample/data-samples-page.js')
13
17
  return page
14
18
 
15
19
  case 'data-sample-list':
@@ -37,7 +41,11 @@ export default function route(page) {
37
41
  return page
38
42
 
39
43
  case 'data-ooc':
40
- import('./pages/data-ooc/data-ooc-view-page.js')
44
+ import('./pages/data-ooc/data-ooc-page.js')
45
+ return page
46
+
47
+ case 'data-oocs':
48
+ import('./pages/data-ooc/data-oocs-page.js')
41
49
  return page
42
50
 
43
51
  case 'data-ooc-list':
@@ -27,6 +27,11 @@ export declare class DataOocListPage extends DataOocListPage_base {
27
27
  handler: () => void;
28
28
  };
29
29
  help: string;
30
+ actions: {
31
+ title: string;
32
+ action: () => void;
33
+ icon: string;
34
+ }[];
30
35
  exportable: {
31
36
  name: string;
32
37
  data: () => {
@@ -56,5 +61,6 @@ export declare class DataOocListPage extends DataOocListPage_base {
56
61
  } | undefined)[];
57
62
  data: any;
58
63
  };
64
+ printOocs(): void;
59
65
  }
60
66
  export {};
@@ -7,6 +7,7 @@ import gql from 'graphql-tag';
7
7
  import { css, html } from 'lit';
8
8
  import { customElement, query, state } from 'lit/decorators.js';
9
9
  import { connect } from 'pwa-helpers/connect-mixin';
10
+ import { GhostPrint } from '@operato/ghost-print';
10
11
  function getOocStatus() {
11
12
  return [
12
13
  {
@@ -51,6 +52,13 @@ let DataOocListPage = class DataOocListPage extends connect(store)(localize(i18n
51
52
  }
52
53
  },
53
54
  help: 'dataset/data-ooc',
55
+ actions: [
56
+ {
57
+ title: i18next.t('button.print'),
58
+ action: this.printOocs.bind(this),
59
+ icon: 'print'
60
+ }
61
+ ],
54
62
  exportable: {
55
63
  name: i18next.t('title.data-ooc list'),
56
64
  data: this._exportableData.bind(this)
@@ -442,14 +450,20 @@ let DataOocListPage = class DataOocListPage extends connect(store)(localize(i18n
442
450
  .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
443
451
  .reduce((record, column) => {
444
452
  const key = column.imex === true ? column.name : column.imex.key;
445
- record[key] = key
446
- .split('.')
447
- .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item);
453
+ record[key] = key.split('.').reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item);
448
454
  return record;
449
455
  }, {}));
450
456
  });
451
457
  return { header: headerSetting, data: data };
452
458
  }
459
+ printOocs() {
460
+ const selected = this.grist.selected;
461
+ const ids = selected.map(record => record.id).join('|');
462
+ GhostPrint.print({
463
+ src: `./data-oocs?ids=${ids}`
464
+ // pending: 200 * selected.length
465
+ });
466
+ }
453
467
  };
454
468
  DataOocListPage.styles = [
455
469
  ScrollbarStyles,