@operato/dataset 1.0.0-beta.10 → 1.0.0-beta.13

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.
@@ -11,10 +11,22 @@ export class OxDataEntryForm extends LitElement {
11
11
  :host {
12
12
  display: flex;
13
13
  flex-direction: row;
14
+ --item-description-font: normal 0.8rem/1rem var(--theme-font);
15
+ --item-description-color: var(--page-description-color);
14
16
  }
15
17
 
16
- h2,
18
+ h2 {
19
+ margin: var(--title-margin);
20
+ font: var(--title-font);
21
+ color: var(--title-text-color);
22
+ text-transform: capitalize;
23
+ text-align: center;
24
+ }
17
25
  h3 {
26
+ margin: var(--page-description-margin);
27
+ font: var(--page-description-font);
28
+ color: var(--page-description-color);
29
+ text-transform: capitalize;
18
30
  text-align: center;
19
31
  }
20
32
 
@@ -48,10 +60,18 @@ export class OxDataEntryForm extends LitElement {
48
60
  }
49
61
  div[description] {
50
62
  grid-area: description;
51
- font: var(--page-description-font);
52
- color: var(--page-description-color);
63
+ opacity: 0.7;
64
+ font: var(--item-description-font);
65
+ color: var(--item-description-color);
53
66
  text-align: left;
54
67
  }
68
+ div[description] * {
69
+ vertical-align: middle;
70
+ }
71
+ div[description] mwc-icon {
72
+ margin-top: -3px;
73
+ font-size: 0.9rem;
74
+ }
55
75
  div[elements] {
56
76
  grid-area: inputs;
57
77
  display: flex;
@@ -160,7 +180,7 @@ export class OxDataEntryForm extends LitElement {
160
180
 
161
181
  return html` <label .title=${description}>
162
182
  <div name>${name}${unit ? `(${unit})` : ''}</div>
163
- <div description>${description}</div>
183
+ <div description><mwc-icon>info_outline</mwc-icon> ${description}</div>
164
184
  <div elements>${elements}</div>
165
185
  </label>`
166
186
  })
@@ -12,20 +12,75 @@ export class OxDataItemSpec extends LitElement {
12
12
  :host {
13
13
  display: flex;
14
14
  flex-direction: row;
15
- border-bottom: var(--border-dark-color);
16
- padding: var(--margin-default) 0;
17
- }
18
- [specName] {
19
- font: var(--legend-font);
20
- color: var(--legend-text-color);
21
- }
22
- [description] {
23
- font: var(--form-sublabel-font);
24
- opacity: 0.8;
15
+ --item-description-font: normal 0.8rem/1rem var(--theme-font);
16
+ --item-description-color: var(--page-description-color);
25
17
  }
26
18
 
27
19
  form {
28
20
  flex: 1;
21
+ display: flex;
22
+ flex-direction: column;
23
+ }
24
+ label {
25
+ display: grid;
26
+
27
+ grid-template-rows: auto 1fr;
28
+ grid-template-columns: 1fr 5fr;
29
+ grid-template-areas: 'name description' 'empty inputs';
30
+
31
+ grid-gap: 9px;
32
+ align-items: center;
33
+ margin-bottom: var(--margin-default);
34
+ }
35
+ label:nth-child(odd) {
36
+ background-color: var(--main-section-background-color);
37
+ padding: var(--padding-default) 0;
38
+ }
39
+ div[name] {
40
+ grid-area: name;
41
+ font: var(--label-font);
42
+ color: var(--label-color);
43
+ text-align: right;
44
+ }
45
+ div[description] {
46
+ grid-area: description;
47
+ opacity: 0.7;
48
+ font: var(--item-description-font);
49
+ color: var(--item-description-color);
50
+ text-align: left;
51
+ }
52
+ div[description] * {
53
+ vertical-align: middle;
54
+ }
55
+ div[description] mwc-icon {
56
+ margin-top: -3px;
57
+ font-size: 0.9rem;
58
+ }
59
+ ox-properties-dynamic-view {
60
+ grid-area: inputs;
61
+ display: flex;
62
+ flex-direction: row;
63
+ flex-wrap: wrap;
64
+ gap: 10px;
65
+ padding-right: var(--padding-default);
66
+ }
67
+
68
+ @media only screen and (max-width: 460px) {
69
+ label {
70
+ display: grid;
71
+
72
+ grid-template-rows: auto auto 1fr;
73
+ grid-template-columns: 1fr;
74
+ grid-template-areas: 'name' 'description' 'inputs';
75
+
76
+ grid-gap: 9px;
77
+ align-items: center;
78
+ margin-bottom: var(--margin-default);
79
+ }
80
+
81
+ div[name] {
82
+ text-align: left;
83
+ }
29
84
  }
30
85
  `
31
86
 
@@ -39,10 +94,12 @@ export class OxDataItemSpec extends LitElement {
39
94
  render() {
40
95
  return html`<form @property-change=${(e: Event) => this.onChange(e)}>
41
96
  ${this.dataItemSpecSets.map(
42
- ({ name, description, specs }) => html` <div specName>${name}</div>
43
- <div description>${description}</div>
97
+ ({ name, description, specs }) => html` <label
98
+ ><div name>${name}</div>
99
+ <div description><mwc-icon>info_outline</mwc-icon> ${description}</div>
44
100
  <ox-properties-dynamic-view data-name=${name} .props=${specs} .value=${this.value?.[name]}>
45
- </ox-properties-dynamic-view>`
101
+ </ox-properties-dynamic-view
102
+ ></label>`
46
103
  )}
47
104
  </form>`
48
105
  }
@@ -16,7 +16,6 @@ export class OxDataOocView extends LitElement {
16
16
  display: flex;
17
17
  flex-direction: column;
18
18
  background-color: var(--main-section-background-color);
19
- padding: var(--padding-wide);
20
19
 
21
20
  position: relative;
22
21
  }
@@ -30,19 +29,74 @@ export class OxDataOocView extends LitElement {
30
29
 
31
30
  h3[state] {
32
31
  position: absolute;
33
-
34
- right: 20px;
35
- top: 25px;
32
+ margin: 0;
33
+ padding: 0;
34
+ right: 10px;
35
+ width: 90px;
36
+ text-align: center;
36
37
  }
37
38
 
38
39
  mwc-icon {
39
40
  font-size: 16px;
40
41
  }
42
+ [state] mwc-icon {
43
+ font-size: 80px;
44
+ opacity: 0.4;
45
+ color: var(--primary-background-color);
46
+ }
41
47
 
42
- [page-description] {
48
+ [state] div {
49
+ position: absolute;
50
+ top: 22px;
51
+ left: 0;
52
+ right: 0;
53
+ font-size: 10px;
54
+ color: var(--theme-white-color);
55
+ }
56
+ [state] [field-state] {
57
+ display: block;
58
+ border-radius: 4px;
59
+ background-color: var(--primary-color);
60
+ box-shadow: var(--box-shadow);
61
+ margin-top: var(--margin-narrow);
62
+ padding: 1px 3px;
63
+ font-size: 0.8rem;
64
+ }
65
+ [danger] [field-state] {
66
+ background-color: var(--status-danger-color);
67
+ }
68
+ [complate] [field-state] {
69
+ background-color: var(--status-info-color);
70
+ }
71
+ [page-history] [field-state] {
72
+ border-radius: 2px;
73
+ background-color: var(--primary-color);
74
+ margin-left: var(--margin-default);
75
+ padding: 1px 2px;
76
+ font-size: 0.7rem;
77
+ color: var(--theme-white-color);
78
+ }
79
+ [page-history] {
80
+ background-color: var(--theme-white-color);
81
+ box-shadow: var(--box-shadow);
82
+ border-radius: var(--border-radius);
43
83
  margin: var(--page-description-margin);
84
+ padding: var(--padding-default);
44
85
  font: var(--page-description-font);
45
- color: var(--page-description-color);
86
+ color: var(--secondary-color);
87
+ }
88
+ [page-history] mwc-icon {
89
+ position: relative;
90
+ top: 3px;
91
+ margin: 0 2px 0 10px;
92
+ }
93
+ [field-info] {
94
+ opacity: 0.7;
95
+ }
96
+ [page-history] strong {
97
+ display: block;
98
+ font-weight: bold;
99
+ font-size: 0.9rem;
46
100
  }
47
101
  `
48
102
 
@@ -56,17 +110,22 @@ export class OxDataOocView extends LitElement {
56
110
  return html`
57
111
  <ox-data-sample-view .dataSample=${this.dataOoc} .dataSet=${this.dataSet}></ox-data-sample-view>
58
112
 
59
- <h3 state>${this.dataOoc?.state || ''}</h3>
113
+ <h3 state>
114
+ <!--상태에 따라 추가로 danger, complate를 어트리뷰트로 추가시 배경컬러 변경되도록 해두었습니다-->
115
+ <mwc-icon>shield</mwc-icon>
116
+ <div>${i18next.t('field.name')} <span field-state>${this.dataOoc?.state || ''}</span></div>
117
+ </h3>
60
118
 
61
119
  <h3>${i18next.t('title.history')}</h3>
62
120
  ${history.map(
63
121
  ({ user, state, comment, timestamp }) => html`
64
- <p page-description>
65
- ${formatter.format(new Date(timestamp))}
66
- <br />
67
- ${state} <mwc-icon>account_circle</mwc-icon> ${user.name}
68
- <br />
69
- ${comment}
122
+ <p page-history>
123
+ <!--상태에 따라 추가로 danger, complate를 어트리뷰트로 추가시 배경컬러 변경되도록 해두었습니다-->
124
+ <span field-info
125
+ >${formatter.format(new Date(timestamp))} <mwc-icon>account_circle</mwc-icon>${user.name}</span
126
+ >
127
+ <span field-state>${state}</span>
128
+ <strong>${comment}</strong>
70
129
  </p>
71
130
  `
72
131
  )}
@@ -14,7 +14,6 @@ export class OxDataSampleView extends LitElement {
14
14
  :host {
15
15
  display: flex;
16
16
  flex-direction: column;
17
- background-color: var(--main-section-background-color);
18
17
  }
19
18
 
20
19
  form {
@@ -26,13 +25,23 @@ export class OxDataSampleView extends LitElement {
26
25
 
27
26
  h2 {
28
27
  margin: var(--title-margin);
29
- padding-top: 25px;
30
28
  font: var(--title-font);
31
29
  color: var(--title-text-color);
30
+ text-transform: capitalize;
32
31
  }
33
32
  [page-description] {
34
33
  margin: var(--page-description-margin);
34
+ opacity: 0.7;
35
35
  font: var(--page-description-font);
36
+ color: var(--secondary-color);
37
+ text-transform: capitalize;
38
+ }
39
+ [page-description] * {
40
+ vertical-align: middle;
41
+ }
42
+ [page-description] mwc-icon {
43
+ margin-top: -2px;
44
+ font-size: 0.9rem;
36
45
  color: var(--page-description-color);
37
46
  }
38
47
 
@@ -98,9 +107,10 @@ export class OxDataSampleView extends LitElement {
98
107
 
99
108
  return html` <h2>${i18next.t('field.name')}</h2>
100
109
  <p page-description>
101
- ${i18next.t('field.description')}<br /><br />
102
- ${i18next.t('field.work-date')}: ${workDate} ${workShift}<br />
103
- ${i18next.t('field.collected-at')}: ${formatter.format(new Date(collectedAt!))}
110
+ <mwc-icon>info_outline</mwc-icon> ${i18next.t('field.description')}<br />
111
+ <mwc-icon>alarm</mwc-icon> ${i18next.t('field.work-date')}: ${workDate} ${workShift} |
112
+ <mwc-icon>pending_actions</mwc-icon> ${i18next.t('field.collected-at')}:
113
+ ${formatter.format(new Date(collectedAt!))}
104
114
  </p>
105
115
 
106
116
  <form @change=${(e: Event) => this.onChange(e)}>
@@ -1,13 +0,0 @@
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
- }
@@ -1,214 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"ox-data-sample-view copy.js","sourceRoot":"","sources":["../../src/ox-data-sample-view copy.ts"],"names":[],"mappings":"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","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"]}