@operato/dataset 1.0.0-alpha.38 → 1.0.0-alpha.40

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/CHANGELOG.md CHANGED
@@ -3,6 +3,27 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.0.0-alpha.40](https://github.com/hatiolab/operato/compare/v1.0.0-alpha.39...v1.0.0-alpha.40) (2022-03-26)
7
+
8
+
9
+ ### :bug: Bug Fix
10
+
11
+ * ox-data-ooc ([77ce499](https://github.com/hatiolab/operato/commit/77ce49978d60cb964ce736f9289655103740f04c))
12
+
13
+
14
+
15
+ ## [1.0.0-alpha.39](https://github.com/hatiolab/operato/compare/v1.0.0-alpha.38...v1.0.0-alpha.39) (2022-03-25)
16
+
17
+
18
+ ### :bug: Bug Fix
19
+
20
+ * added ox-data-ooc-view ([6693d0c](https://github.com/hatiolab/operato/commit/6693d0cdea7481c877ded73ab1ca1746f49b5ead))
21
+ * ox-data-sample-view ooc oos style ([7e8bebe](https://github.com/hatiolab/operato/commit/7e8bebe1d08eb60a42823bb1850a8d8738b1bb75))
22
+ * ox-data-sample-view ooc,oos icon checked => done ([3e3e345](https://github.com/hatiolab/operato/commit/3e3e3459104eac47a60fac60ab3c6ceeb933df14))
23
+ * ox-data-sample-view style ([ff0513d](https://github.com/hatiolab/operato/commit/ff0513dbd5f8cc6a72c336c2336f544e463ab78a))
24
+
25
+
26
+
6
27
  ## [1.0.0-alpha.38](https://github.com/hatiolab/operato/compare/v1.0.0-alpha.37...v1.0.0-alpha.38) (2022-03-25)
7
28
 
8
29
 
package/demo/index.html CHANGED
@@ -21,6 +21,7 @@
21
21
  <body>
22
22
  <a href="./ox-data-entry-form.html">ox-data-entry-form</a>
23
23
  <a href="./ox-data-sample-view.html">ox-data-sample-view</a>
24
+ <a href="./ox-data-ooc-view.html">ox-data-ooc-view</a>
24
25
  <a href="./ox-data-item-spec.html">ox-data-item-spec</a>
25
26
  <a href="./ox-grist-editor-data-item-spec.html">ox-grist-editor-data-item-spec</a>
26
27
  </body>
@@ -0,0 +1,185 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-GB">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1" />
6
+ <style>
7
+ body {
8
+ --ox-checkbox-size: 12px;
9
+ }
10
+
11
+ #demo {
12
+ }
13
+ </style>
14
+ <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet" />
15
+ <link href="https://fonts.googleapis.com/css?family=Material+Icons&display=block" rel="stylesheet" />
16
+ <link href="/themes/app-theme.css" rel="stylesheet" />
17
+ <link href="/themes/form-theme.css" rel="stylesheet" />
18
+ </head>
19
+ <body>
20
+ <div id="demo"></div>
21
+
22
+ <script type="module">
23
+ import { html, render } from 'lit'
24
+ import '@operato/ccp'
25
+ import '@operato/qc'
26
+
27
+ const parent = document.querySelector('#demo')
28
+ const dataSet = {
29
+ name: 'sample',
30
+ description: 'sample description',
31
+ useCase: 'CCP',
32
+ dataItems: [
33
+ {
34
+ name: '창고 온도',
35
+ description: '창고 온도는 섭씨 0도 이하로 유지되어야 합니다.',
36
+ sequence: 1,
37
+ tag: 'temp',
38
+ type: 'number',
39
+ quota: 1,
40
+ active: true,
41
+ unit: '℃',
42
+ spec: {
43
+ CCP: {
44
+ criticalLimits: {
45
+ minimum: 100,
46
+ maximum: 200
47
+ },
48
+ targetLimits: {
49
+ minimum: 120,
50
+ maximum: 180
51
+ }
52
+ }
53
+ }
54
+ },
55
+ {
56
+ name: '창고 습도',
57
+ description: '창고 습도는 30% 이하로 유지되어야 합니다.',
58
+ sequence: 2,
59
+ tag: 'humid',
60
+ type: 'number',
61
+ quota: 5,
62
+ active: true,
63
+ unit: '%',
64
+ spec: {
65
+ CCP: {
66
+ criticalLimits: {
67
+ minimum: 10,
68
+ maximum: 50
69
+ },
70
+ targetLimits: {
71
+ minimum: 20,
72
+ maximum: 40
73
+ }
74
+ }
75
+ }
76
+ },
77
+ {
78
+ name: '육안 검사',
79
+ description: '육안 검사는 포장전 30분 내로 실행되어야 합니다.',
80
+ sequence: 3,
81
+ tag: 'inspection',
82
+ type: 'boolean',
83
+ quota: 3,
84
+ active: true
85
+ },
86
+ {
87
+ name: '품평',
88
+ description: '품평은 최우수/우수/보통/미달을 포함하여 간단히 평가.',
89
+ sequence: 4,
90
+ tag: 'evaluation',
91
+ type: 'select',
92
+ options: {
93
+ options: [
94
+ { text: '최우수', value: '최우수' },
95
+ { text: '우수', value: '우수' },
96
+ { text: '보통', value: '보통' },
97
+ { text: '미달', value: '미달' }
98
+ ]
99
+ },
100
+ quota: 3,
101
+ active: true,
102
+ spec: {
103
+ CCP: {
104
+ criticalLimits: {
105
+ acceptables: ['최우수', '우수', '보통']
106
+ },
107
+ targetLimits: {
108
+ acceptables: ['최우수', '우수']
109
+ }
110
+ }
111
+ }
112
+ },
113
+ {
114
+ name: '코멘트',
115
+ description: '특이사항을 기록함.',
116
+ sequence: 4,
117
+ tag: 'comment',
118
+ type: 'string',
119
+ quota: 1,
120
+ active: true
121
+ },
122
+ {
123
+ name: '첨부파일',
124
+ description: '참조 첨부 파일.',
125
+ sequence: 4,
126
+ tag: 'attachment',
127
+ type: 'file',
128
+ quota: 1,
129
+ active: true
130
+ }
131
+ ]
132
+ }
133
+
134
+ var dataOoc = {
135
+ name: 'Data Sample Name',
136
+ description: 'Data Sample이 어쩌구 저쩌구 그래서 중요합니다. 당연히 그래야죠.',
137
+ useCase: 'CCP',
138
+ state: 'CORRECTED',
139
+ data: {
140
+ temp: [1000],
141
+ humid: [20, 23, 21, 26, 27],
142
+ inspection: [true, false, true],
143
+ evaluation: ['최우수', '보통', '우수']
144
+ },
145
+ collectedAt: Date.now(),
146
+ history: [
147
+ {
148
+ user: {
149
+ id: 0,
150
+ name: 'shnam'
151
+ },
152
+ state: 'CREATED',
153
+ timestamp: Date.now()
154
+ },
155
+ {
156
+ user: {
157
+ id: 0,
158
+ name: 'shnam'
159
+ },
160
+ state: 'REVIEWED',
161
+ comment: '금일 생산한 제품은 전량 폐기합니다',
162
+ timestamp: Date.now()
163
+ },
164
+ {
165
+ user: {
166
+ id: 0,
167
+ name: 'shnam'
168
+ },
169
+ state: 'CORRECTED',
170
+ timestamp: Date.now()
171
+ }
172
+ ]
173
+ }
174
+
175
+ render(
176
+ html`<ox-data-ooc-view
177
+ .dataSet=${dataSet}
178
+ .dataOoc=${dataOoc}
179
+ @change=${e => console.log(e.detail)}
180
+ ></ox-data-ooc-view>`,
181
+ parent
182
+ )
183
+ </script>
184
+ </body>
185
+ </html>
@@ -1,5 +1,6 @@
1
1
  export * from './ox-data-entry-form.js';
2
2
  export * from './ox-data-sample-view.js';
3
+ export * from './ox-data-ooc-view.js';
3
4
  export * from './ox-data-item-spec.js';
4
5
  export * from './ox-data-use-case';
5
6
  export * from './types.js';
package/dist/src/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './ox-data-entry-form.js';
2
2
  export * from './ox-data-sample-view.js';
3
+ export * from './ox-data-ooc-view.js';
3
4
  export * from './ox-data-item-spec.js';
4
5
  export * from './ox-data-use-case';
5
6
  export * from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA","sourcesContent":["export * from './ox-data-entry-form.js'\nexport * from './ox-data-sample-view.js'\nexport * from './ox-data-item-spec.js'\nexport * from './ox-data-use-case'\nexport * from './types.js'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA","sourcesContent":["export * from './ox-data-entry-form.js'\nexport * from './ox-data-sample-view.js'\nexport * from './ox-data-ooc-view.js'\nexport * from './ox-data-item-spec.js'\nexport * from './ox-data-use-case'\nexport * from './types.js'\n"]}
@@ -0,0 +1,10 @@
1
+ import '@operato/input/ox-input-file.js';
2
+ import './ox-data-sample-view';
3
+ import { DataOoc, DataSet } from './types.js';
4
+ import { LitElement } from 'lit';
5
+ export declare class OxDataOocView extends LitElement {
6
+ static styles: import("lit").CSSResult;
7
+ dataSet?: DataSet;
8
+ dataOoc?: DataOoc;
9
+ render(): import("lit-html").TemplateResult<1>;
10
+ }
@@ -0,0 +1,69 @@
1
+ import { __decorate } from "tslib";
2
+ import '@operato/input/ox-input-file.js';
3
+ import './ox-data-sample-view';
4
+ import { LitElement, css, html } from 'lit';
5
+ import { customElement, property } from 'lit/decorators.js';
6
+ let OxDataOocView = class OxDataOocView extends LitElement {
7
+ render() {
8
+ var _a, _b;
9
+ const history = ((_a = this.dataOoc) === null || _a === void 0 ? void 0 : _a.history) || [];
10
+ const formatter = new Intl.DateTimeFormat(navigator.language, { dateStyle: 'full', timeStyle: 'short' });
11
+ return html `
12
+ <ox-data-sample-view .dataSample=${this.dataOoc} .dataSet=${this.dataSet}></ox-data-sample-view>
13
+
14
+ <h3 state>${((_b = this.dataOoc) === null || _b === void 0 ? void 0 : _b.state) || ''}</h3>
15
+
16
+ <h3>history</h3>
17
+ ${history.map(({ user, state, comment, timestamp }) => html `
18
+ <p page-description>
19
+ ${formatter.format(new Date(timestamp))}
20
+ <br />
21
+ ${state} by ${user.name}
22
+ <br />
23
+ ${comment}
24
+ </p>
25
+ `)}
26
+ `;
27
+ }
28
+ };
29
+ OxDataOocView.styles = css `
30
+ :host {
31
+ display: flex;
32
+ flex-direction: column;
33
+ background-color: var(--main-section-background-color);
34
+ padding: var(--padding-wide);
35
+
36
+ position: relative;
37
+ }
38
+
39
+ h3 {
40
+ margin: var(--title-margin);
41
+ padding-top: 12px;
42
+ font: var(--title-font);
43
+ color: var(--title-text-color);
44
+ }
45
+
46
+ h3[state] {
47
+ position: absolute;
48
+
49
+ right: 20px;
50
+ top: 25px;
51
+ }
52
+
53
+ [page-description] {
54
+ margin: var(--page-description-margin);
55
+ font: var(--page-description-font);
56
+ color: var(--page-description-color);
57
+ }
58
+ `;
59
+ __decorate([
60
+ property({ type: Object })
61
+ ], OxDataOocView.prototype, "dataSet", void 0);
62
+ __decorate([
63
+ property({ type: Object })
64
+ ], OxDataOocView.prototype, "dataOoc", void 0);
65
+ OxDataOocView = __decorate([
66
+ customElement('ox-data-ooc-view')
67
+ ], OxDataOocView);
68
+ export { OxDataOocView };
69
+ //# sourceMappingURL=ox-data-ooc-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-data-ooc-view.js","sourceRoot":"","sources":["../../src/ox-data-ooc-view.ts"],"names":[],"mappings":";AAAA,OAAO,iCAAiC,CAAA;AACxC,OAAO,uBAAuB,CAAA;AAG9B,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAG3D,IAAa,aAAa,GAA1B,MAAa,aAAc,SAAQ,UAAU;IAmC3C,MAAM;;QACJ,MAAM,OAAO,GAAG,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,KAAI,EAAE,CAAA;QAC3C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAA;QAExG,OAAO,IAAI,CAAA;yCAC0B,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,OAAO;;kBAE5D,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,KAAI,EAAE;;;QAGnC,OAAO,CAAC,GAAG,CACX,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,CAAA;;cAEvC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;;cAErC,KAAK,OAAO,IAAI,CAAC,IAAI;;cAErB,OAAO;;SAEZ,CACF;KACF,CAAA;IACH,CAAC;CACF,CAAA;AAzDQ,oBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BlB,CAAA;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;8CAAkB;AACjB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;8CAAkB;AAjClC,aAAa;IADzB,aAAa,CAAC,kBAAkB,CAAC;GACrB,aAAa,CA0DzB;SA1DY,aAAa","sourcesContent":["import '@operato/input/ox-input-file.js'\nimport './ox-data-sample-view'\n\nimport { DataOoc, DataSet } from './types.js'\nimport { LitElement, css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('ox-data-ooc-view')\nexport class OxDataOocView extends LitElement {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n background-color: var(--main-section-background-color);\n padding: var(--padding-wide);\n\n position: relative;\n }\n\n h3 {\n margin: var(--title-margin);\n padding-top: 12px;\n font: var(--title-font);\n color: var(--title-text-color);\n }\n\n h3[state] {\n position: absolute;\n\n right: 20px;\n top: 25px;\n }\n\n [page-description] {\n margin: var(--page-description-margin);\n font: var(--page-description-font);\n color: var(--page-description-color);\n }\n `\n\n @property({ type: Object }) dataSet?: DataSet\n @property({ type: Object }) dataOoc?: DataOoc\n\n render() {\n const history = this.dataOoc?.history || []\n const formatter = new Intl.DateTimeFormat(navigator.language, { dateStyle: 'full', timeStyle: 'short' })\n\n return html`\n <ox-data-sample-view .dataSample=${this.dataOoc} .dataSet=${this.dataSet}></ox-data-sample-view>\n\n <h3 state>${this.dataOoc?.state || ''}</h3>\n\n <h3>history</h3>\n ${history.map(\n ({ user, state, comment, timestamp }) => html`\n <p page-description>\n ${formatter.format(new Date(timestamp))}\n <br />\n ${state} by ${user.name}\n <br />\n ${comment}\n </p>\n `\n )}\n `\n }\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import '@operato/input/ox-input-file.js';
2
+ import { DataSample, DataSet } from './types.js';
3
+ import { LitElement } from 'lit';
4
+ export declare class OxDataSampleView extends LitElement {
5
+ static styles: import("lit").CSSResult;
6
+ dataSet?: DataSet;
7
+ dataSample?: DataSample;
8
+ render(): import("lit-html").TemplateResult<1>;
9
+ private onChange;
10
+ private buildSpec;
11
+ private buildValue;
12
+ private evaluateOOC;
13
+ }
@@ -0,0 +1,214 @@
1
+ import { __decorate } from "tslib";
2
+ import '@operato/input/ox-input-file.js';
3
+ import { LitElement, css, html } from 'lit';
4
+ import { customElement, property } from 'lit/decorators.js';
5
+ import { OxDataUseCase } from './ox-data-use-case.js';
6
+ let OxDataSampleView = class OxDataSampleView extends LitElement {
7
+ render() {
8
+ var _a, _b, _c, _d, _e;
9
+ const dataItems = ((_a = this.dataSet) === null || _a === void 0 ? void 0 : _a.dataItems.filter(item => item.active)) || [];
10
+ const data = ((_b = this.dataSample) === null || _b === void 0 ? void 0 : _b.data) || {};
11
+ const formatter = new Intl.DateTimeFormat(navigator.language, { dateStyle: 'full', timeStyle: 'short' });
12
+ return html ` <h2>${(_c = this.dataSample) === null || _c === void 0 ? void 0 : _c.name}</h2>
13
+ <p page-description>
14
+ ${(_d = this.dataSample) === null || _d === void 0 ? void 0 : _d.description}<br /><br />
15
+ collected at: ${formatter.format(new Date((_e = this.dataSample) === null || _e === void 0 ? void 0 : _e.collectedAt))}
16
+ </p>
17
+
18
+ <form @change=${(e) => this.onChange(e)}>
19
+ <table>
20
+ <tr>
21
+ <th>item</th>
22
+ <th>description</th>
23
+ <th>unit</th>
24
+ <th>value</th>
25
+ <th>specification</th>
26
+ <th>OOC</th>
27
+ <th>OOS</th>
28
+ </tr>
29
+ ${dataItems.map(dataItem => {
30
+ const { ooc, oos } = this.evaluateOOC(dataItem, data === null || data === void 0 ? void 0 : data[dataItem.tag]) || {};
31
+ return html `
32
+ <tr ?ooc=${ooc} ?oos=${oos}>
33
+ <td name>${dataItem.name}</td>
34
+ <td>${dataItem.description}</td>
35
+ <td>${dataItem.unit}</td>
36
+ <td>${this.buildValue(dataItem)}</td>
37
+ <td><pre>${this.buildSpec(dataItem)}</pre></td>
38
+ <td>${ooc ? html `<mwc-icon>done</mwc-icon>` : ''}</td>
39
+ <td>${oos ? html `<mwc-icon>done</mwc-icon>` : ''}</td>
40
+ </tr>
41
+ `;
42
+ })}
43
+ </table>
44
+
45
+ <label><mwc-icon>build_circle</mwc-icon> correction activity</label>
46
+ <textarea name="correctionActivity"> </textarea>
47
+ </form>`;
48
+ }
49
+ onChange(e) { }
50
+ buildSpec(dataItem) {
51
+ return OxDataUseCase.elaborateDataItemSpec(this.dataSet, dataItem);
52
+ }
53
+ buildValue(dataItem) {
54
+ var _a;
55
+ const { tag, type } = dataItem;
56
+ if (!this.dataSample) {
57
+ return '';
58
+ }
59
+ const value = (_a = this.dataSample) === null || _a === void 0 ? void 0 : _a.data[dataItem.tag];
60
+ if (value === undefined) {
61
+ return '';
62
+ }
63
+ const values = value instanceof Array ? value : [value];
64
+ const elements = values.map((_, idx) => {
65
+ const v = value[idx];
66
+ switch (type) {
67
+ case 'boolean':
68
+ return html ` <input type="checkbox" name=${tag} .checked=${v} disabled />`;
69
+ break;
70
+ case 'select':
71
+ case 'number':
72
+ case 'string':
73
+ default:
74
+ return String(v === undefined ? '' : v);
75
+ }
76
+ });
77
+ return type === 'boolean' ? elements : elements.join(', ');
78
+ }
79
+ evaluateOOC(dataItem, value) {
80
+ return OxDataUseCase.evaluateItem(this.dataSet, dataItem, value);
81
+ }
82
+ };
83
+ OxDataSampleView.styles = css `
84
+ :host {
85
+ display: flex;
86
+ flex-direction: column;
87
+ background-color: var(--main-section-background-color);
88
+ padding: var(--padding-wide);
89
+ }
90
+
91
+ form {
92
+ flex: 1;
93
+
94
+ display: flex;
95
+ flex-direction: column;
96
+ }
97
+ label {
98
+ font: var(--label-font);
99
+ color: var(--label-color);
100
+ }
101
+ label * {
102
+ text-align: middle;
103
+ }
104
+ label:nth-child(even) {
105
+ background-color: var(--main-section-background-color);
106
+ padding: var(--padding-default) 0;
107
+ }
108
+ label mwc-icon {
109
+ position: relative;
110
+ top: 4px;
111
+ font-size: 18px;
112
+ color: var(--status-danger-color);
113
+ }
114
+
115
+ div[name] {
116
+ grid-column: span 2 / auto;
117
+ font: var(--label-font);
118
+ color: var(--label-color);
119
+ text-align: right;
120
+ }
121
+ div[elements] {
122
+ grid-column: span 10 / auto;
123
+ display: flex;
124
+ flex-direction: row;
125
+ flex-wrap: wrap;
126
+ gap: 10px;
127
+ padding-right: var(--padding-default);
128
+ }
129
+ div[elements] * {
130
+ flex: 1;
131
+ }
132
+ div[elements] input,
133
+ div[elements] select {
134
+ border: var(--input-field-border);
135
+ border-radius: var(--input-field-border-radius);
136
+ padding: var(--input-field-padding);
137
+ font: var(--input-field-font);
138
+ }
139
+ h2 {
140
+ margin: var(--title-margin);
141
+ padding-top: 25px;
142
+ font: var(--title-font);
143
+ color: var(--title-text-color);
144
+ }
145
+ [page-description] {
146
+ margin: var(--page-description-margin);
147
+ font: var(--page-description-font);
148
+ color: var(--page-description-color);
149
+ }
150
+ table {
151
+ border-collapse: collapse;
152
+ margin-bottom: var(--margin-default);
153
+ }
154
+ th {
155
+ padding: var(--th-padding);
156
+ border-top: var(--th-border-top);
157
+ border-bottom: var(--td-border-bottom);
158
+ text-transform: var(--th-text-transform);
159
+ font: var(--th-font);
160
+ color: var(--th-color);
161
+ text-align: left;
162
+ }
163
+ tr {
164
+ background-color: var(--tr-background-color);
165
+ }
166
+ tr:nth-child(odd) {
167
+ background-color: var(--tr-background-odd-color);
168
+ }
169
+ tr:hover {
170
+ background-color: var(--tr-background-hover-color);
171
+ }
172
+ tr[ooc],
173
+ tr[oos] {
174
+ background-color: #fefbdf;
175
+ }
176
+ td {
177
+ border-bottom: var(--td-border-bottom);
178
+ padding: var(--td-padding);
179
+ font: var(--td-font);
180
+ color: var(--td-color);
181
+ }
182
+ td[name] {
183
+ font-weight: bold;
184
+ }
185
+ td mwc-icon {
186
+ color: var(--status-danger-color);
187
+ }
188
+ textarea {
189
+ border: var(--input-field-border);
190
+ border-radius: var(--input-border-radius);
191
+ padding: var(--input-field-padding);
192
+ font: var(--input-field-font);
193
+ }
194
+
195
+ @media only screen and (max-width: 460px) {
196
+ div[name] {
197
+ grid-column: span 3 / auto;
198
+ }
199
+ div[elements] {
200
+ grid-column: span 9 / auto;
201
+ }
202
+ }
203
+ `;
204
+ __decorate([
205
+ property({ type: Object })
206
+ ], OxDataSampleView.prototype, "dataSet", void 0);
207
+ __decorate([
208
+ property({ type: Object })
209
+ ], OxDataSampleView.prototype, "dataSample", void 0);
210
+ OxDataSampleView = __decorate([
211
+ customElement('ox-data-sample-view')
212
+ ], OxDataSampleView);
213
+ export { OxDataSampleView };
214
+ //# sourceMappingURL=ox-data-sample-view%20copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-data-sample-view copy.js","sourceRoot":"","sources":["../../src/ox-data-sample-view copy.ts"],"names":[],"mappings":";AAAA,OAAO,iCAAiC,CAAA;AAGxC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAGrD,IAAa,gBAAgB,GAA7B,MAAa,gBAAiB,SAAQ,UAAU;IA8H9C,MAAM;;QACJ,MAAM,SAAS,GAAG,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAI,EAAE,CAAA;QAC3E,MAAM,IAAI,GAAG,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI,KAAI,EAAE,CAAA;QACxC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAA;QAExG,OAAO,IAAI,CAAA,QAAQ,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI;;UAElC,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW;wBACd,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAY,CAAC,CAAC;;;sBAG3D,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;;;;;;;;;;;YAWxC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACzB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;YAC3E,OAAO,IAAI,CAAA;yBACE,GAAG,SAAS,GAAG;2BACb,QAAQ,CAAC,IAAI;sBAClB,QAAQ,CAAC,WAAW;sBACpB,QAAQ,CAAC,IAAI;sBACb,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;2BACpB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;sBAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA,2BAA2B,CAAC,CAAC,CAAC,EAAE;sBAC1C,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA,2BAA2B,CAAC,CAAC,CAAC,EAAE;;aAEnD,CAAA;QACH,CAAC,CAAC;;;;;cAKE,CAAA;IACZ,CAAC;IAEO,QAAQ,CAAC,CAAQ,IAAG,CAAC;IAErB,SAAS,CAAC,QAAkB;QAClC,OAAO,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAQ,EAAE,QAAQ,CAAC,CAAA;IACrE,CAAC;IAEO,UAAU,CAAC,QAAkB;;QACnC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAA;QAE9B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO,EAAE,CAAA;SACV;QAED,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACjD,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,OAAO,EAAE,CAAA;SACV;QACD,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAEvD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,GAAG,EAAE,EAAE;YAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;YAEpB,QAAQ,IAAI,EAAE;gBACZ,KAAK,SAAS;oBACZ,OAAO,IAAI,CAAA,gCAAgC,GAAG,aAAa,CAAC,cAAc,CAAA;oBAC1E,MAAK;gBAEP,KAAK,QAAQ,CAAC;gBACd,KAAK,QAAQ,CAAC;gBACd,KAAK,QAAQ,CAAC;gBACd;oBACE,OAAO,MAAM,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;aAC1C;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5D,CAAC;IAEO,WAAW,CAAC,QAAkB,EAAE,KAAU;QAChD,OAAO,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,OAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;IACnE,CAAC;CACF,CAAA;AAjNQ,uBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwHlB,CAAA;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDAAkB;AACjB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oDAAwB;AA5HxC,gBAAgB;IAD5B,aAAa,CAAC,qBAAqB,CAAC;GACxB,gBAAgB,CAkN5B;SAlNY,gBAAgB","sourcesContent":["import '@operato/input/ox-input-file.js'\n\nimport { DataItem, DataSample, DataSet } from './types.js'\nimport { LitElement, css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { OxDataUseCase } from './ox-data-use-case.js'\n\n@customElement('ox-data-sample-view')\nexport class OxDataSampleView extends LitElement {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n background-color: var(--main-section-background-color);\n padding: var(--padding-wide);\n }\n\n form {\n flex: 1;\n\n display: flex;\n flex-direction: column;\n }\n label {\n font: var(--label-font);\n color: var(--label-color);\n }\n label * {\n text-align: middle;\n }\n label:nth-child(even) {\n background-color: var(--main-section-background-color);\n padding: var(--padding-default) 0;\n }\n label mwc-icon {\n position: relative;\n top: 4px;\n font-size: 18px;\n color: var(--status-danger-color);\n }\n\n div[name] {\n grid-column: span 2 / auto;\n font: var(--label-font);\n color: var(--label-color);\n text-align: right;\n }\n div[elements] {\n grid-column: span 10 / auto;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 10px;\n padding-right: var(--padding-default);\n }\n div[elements] * {\n flex: 1;\n }\n div[elements] input,\n div[elements] select {\n border: var(--input-field-border);\n border-radius: var(--input-field-border-radius);\n padding: var(--input-field-padding);\n font: var(--input-field-font);\n }\n h2 {\n margin: var(--title-margin);\n padding-top: 25px;\n font: var(--title-font);\n color: var(--title-text-color);\n }\n [page-description] {\n margin: var(--page-description-margin);\n font: var(--page-description-font);\n color: var(--page-description-color);\n }\n table {\n border-collapse: collapse;\n margin-bottom: var(--margin-default);\n }\n th {\n padding: var(--th-padding);\n border-top: var(--th-border-top);\n border-bottom: var(--td-border-bottom);\n text-transform: var(--th-text-transform);\n font: var(--th-font);\n color: var(--th-color);\n text-align: left;\n }\n tr {\n background-color: var(--tr-background-color);\n }\n tr:nth-child(odd) {\n background-color: var(--tr-background-odd-color);\n }\n tr:hover {\n background-color: var(--tr-background-hover-color);\n }\n tr[ooc],\n tr[oos] {\n background-color: #fefbdf;\n }\n td {\n border-bottom: var(--td-border-bottom);\n padding: var(--td-padding);\n font: var(--td-font);\n color: var(--td-color);\n }\n td[name] {\n font-weight: bold;\n }\n td mwc-icon {\n color: var(--status-danger-color);\n }\n textarea {\n border: var(--input-field-border);\n border-radius: var(--input-border-radius);\n padding: var(--input-field-padding);\n font: var(--input-field-font);\n }\n\n @media only screen and (max-width: 460px) {\n div[name] {\n grid-column: span 3 / auto;\n }\n div[elements] {\n grid-column: span 9 / auto;\n }\n }\n `\n\n @property({ type: Object }) dataSet?: DataSet\n @property({ type: Object }) dataSample?: DataSample\n\n render() {\n const dataItems = this.dataSet?.dataItems.filter(item => item.active) || []\n const data = this.dataSample?.data || {}\n const formatter = new Intl.DateTimeFormat(navigator.language, { dateStyle: 'full', timeStyle: 'short' })\n\n return html` <h2>${this.dataSample?.name}</h2>\n <p page-description>\n ${this.dataSample?.description}<br /><br />\n collected at: ${formatter.format(new Date(this.dataSample?.collectedAt!))}\n </p>\n\n <form @change=${(e: Event) => this.onChange(e)}>\n <table>\n <tr>\n <th>item</th>\n <th>description</th>\n <th>unit</th>\n <th>value</th>\n <th>specification</th>\n <th>OOC</th>\n <th>OOS</th>\n </tr>\n ${dataItems.map(dataItem => {\n const { ooc, oos } = this.evaluateOOC(dataItem, data?.[dataItem.tag]) || {}\n return html`\n <tr ?ooc=${ooc} ?oos=${oos}>\n <td name>${dataItem.name}</td>\n <td>${dataItem.description}</td>\n <td>${dataItem.unit}</td>\n <td>${this.buildValue(dataItem)}</td>\n <td><pre>${this.buildSpec(dataItem)}</pre></td>\n <td>${ooc ? html`<mwc-icon>done</mwc-icon>` : ''}</td>\n <td>${oos ? html`<mwc-icon>done</mwc-icon>` : ''}</td>\n </tr>\n `\n })}\n </table>\n\n <label><mwc-icon>build_circle</mwc-icon> correction activity</label>\n <textarea name=\"correctionActivity\"> </textarea>\n </form>`\n }\n\n private onChange(e: Event) {}\n\n private buildSpec(dataItem: DataItem) {\n return OxDataUseCase.elaborateDataItemSpec(this.dataSet!, dataItem)\n }\n\n private buildValue(dataItem: DataItem) {\n const { tag, type } = dataItem\n\n if (!this.dataSample) {\n return ''\n }\n\n const value = this.dataSample?.data[dataItem.tag]\n if (value === undefined) {\n return ''\n }\n const values = value instanceof Array ? value : [value]\n\n const elements = values.map((_: any, idx) => {\n const v = value[idx]\n\n switch (type) {\n case 'boolean':\n return html` <input type=\"checkbox\" name=${tag} .checked=${v} disabled />`\n break\n\n case 'select':\n case 'number':\n case 'string':\n default:\n return String(v === undefined ? '' : v)\n }\n })\n\n return type === 'boolean' ? elements : elements.join(', ')\n }\n\n private evaluateOOC(dataItem: DataItem, value: any) {\n return OxDataUseCase.evaluateItem(this.dataSet!, dataItem, value)\n }\n}\n"]}