@operato/dataset 1.0.0-beta.9 → 1.0.0

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 (97) hide show
  1. package/CHANGELOG.md +362 -0
  2. package/dist/src/grist-editor/ox-grist-editor-data-item-spec.js +1 -1
  3. package/dist/src/grist-editor/ox-grist-editor-data-item-spec.js.map +1 -1
  4. package/dist/src/grist-editor/ox-popup-data-item-spec.js +3 -2
  5. package/dist/src/grist-editor/ox-popup-data-item-spec.js.map +1 -1
  6. package/dist/src/index.d.ts +1 -5
  7. package/dist/src/index.js +1 -5
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/ox-data-entry-form.js +24 -4
  10. package/dist/src/ox-data-entry-form.js.map +1 -1
  11. package/dist/src/ox-data-item-spec.d.ts +2 -2
  12. package/dist/src/ox-data-item-spec.js +71 -14
  13. package/dist/src/ox-data-item-spec.js.map +1 -1
  14. package/dist/src/ox-data-ooc-view.js +73 -14
  15. package/dist/src/ox-data-ooc-view.js.map +1 -1
  16. package/dist/src/ox-data-sample-view.d.ts +1 -3
  17. package/dist/src/ox-data-sample-view.js +40 -38
  18. package/dist/src/ox-data-sample-view.js.map +1 -1
  19. package/dist/src/types.d.ts +25 -6
  20. package/dist/src/types.js.map +1 -1
  21. package/dist/src/usecase/ccp/index.d.ts +1 -0
  22. package/dist/src/usecase/ccp/index.js +8 -0
  23. package/dist/src/usecase/ccp/index.js.map +1 -0
  24. package/dist/src/usecase/ccp/ox-data-use-case-ccp.d.ts +7 -0
  25. package/dist/src/usecase/ccp/ox-data-use-case-ccp.js +102 -0
  26. package/dist/src/usecase/ccp/ox-data-use-case-ccp.js.map +1 -0
  27. package/dist/src/usecase/ccp/ox-input-ccp-limits.d.ts +44 -0
  28. package/dist/src/usecase/ccp/ox-input-ccp-limits.js +171 -0
  29. package/dist/src/usecase/ccp/ox-input-ccp-limits.js.map +1 -0
  30. package/dist/src/usecase/ccp/ox-property-editor-ccp-limits.d.ts +5 -0
  31. package/dist/src/usecase/ccp/ox-property-editor-ccp-limits.js +24 -0
  32. package/dist/src/usecase/ccp/ox-property-editor-ccp-limits.js.map +1 -0
  33. package/dist/src/{ox-data-use-case.d.ts → usecase/ox-data-use-case.d.ts} +5 -5
  34. package/dist/src/{ox-data-use-case.js → usecase/ox-data-use-case.js} +22 -34
  35. package/dist/src/usecase/ox-data-use-case.js.map +1 -0
  36. package/dist/src/usecase/qc/index.d.ts +1 -0
  37. package/dist/src/usecase/qc/index.js +8 -0
  38. package/dist/src/usecase/qc/index.js.map +1 -0
  39. package/dist/src/usecase/qc/ox-data-use-case-qc.d.ts +7 -0
  40. package/dist/src/usecase/qc/ox-data-use-case-qc.js +55 -0
  41. package/dist/src/usecase/qc/ox-data-use-case-qc.js.map +1 -0
  42. package/dist/src/usecase/qc/ox-input-qc-limits.d.ts +44 -0
  43. package/dist/src/usecase/qc/ox-input-qc-limits.js +171 -0
  44. package/dist/src/usecase/qc/ox-input-qc-limits.js.map +1 -0
  45. package/dist/src/usecase/qc/ox-property-editor-qc-limits.d.ts +5 -0
  46. package/dist/src/usecase/qc/ox-property-editor-qc-limits.js +24 -0
  47. package/dist/src/usecase/qc/ox-property-editor-qc-limits.js.map +1 -0
  48. package/dist/stories/ox-data-entry-form.stories.d.ts +19 -0
  49. package/dist/stories/ox-data-entry-form.stories.js +152 -0
  50. package/dist/stories/ox-data-entry-form.stories.js.map +1 -0
  51. package/dist/stories/ox-data-item-spec.stories.d.ts +26 -0
  52. package/dist/stories/ox-data-item-spec.stories.js +102 -0
  53. package/dist/stories/ox-data-item-spec.stories.js.map +1 -0
  54. package/dist/stories/ox-data-ooc-view.stories.d.ts +19 -0
  55. package/dist/stories/ox-data-ooc-view.stories.js +242 -0
  56. package/dist/stories/ox-data-ooc-view.stories.js.map +1 -0
  57. package/dist/stories/ox-data-sample-view.stories.d.ts +19 -0
  58. package/dist/stories/ox-data-sample-view.stories.js +213 -0
  59. package/dist/stories/ox-data-sample-view.stories.js.map +1 -0
  60. package/dist/stories/ox-grist-editor-data-item-spec.stories.d.ts +27 -0
  61. package/dist/stories/ox-grist-editor-data-item-spec.stories.js +389 -0
  62. package/dist/stories/ox-grist-editor-data-item-spec.stories.js.map +1 -0
  63. package/dist/tsconfig.tsbuildinfo +1 -1
  64. package/package.json +24 -18
  65. package/src/grist-editor/ox-grist-editor-data-item-spec.ts +1 -1
  66. package/src/grist-editor/ox-popup-data-item-spec.ts +3 -2
  67. package/src/index.ts +1 -5
  68. package/src/ox-data-entry-form.ts +24 -4
  69. package/src/ox-data-item-spec.ts +73 -16
  70. package/src/ox-data-ooc-view.ts +73 -14
  71. package/src/ox-data-sample-view.ts +43 -39
  72. package/src/types.ts +31 -6
  73. package/src/usecase/ccp/index.ts +10 -0
  74. package/src/usecase/ccp/ox-data-use-case-ccp.ts +147 -0
  75. package/src/usecase/ccp/ox-input-ccp-limits.ts +161 -0
  76. package/src/usecase/ccp/ox-property-editor-ccp-limits.ts +23 -0
  77. package/src/{ox-data-use-case.ts → usecase/ox-data-use-case.ts} +27 -41
  78. package/src/usecase/qc/index.ts +10 -0
  79. package/src/usecase/qc/ox-data-use-case-qc.ts +72 -0
  80. package/src/usecase/qc/ox-input-qc-limits.ts +161 -0
  81. package/src/usecase/qc/ox-property-editor-qc-limits.ts +23 -0
  82. package/stories/ox-data-entry-form.stories.ts +165 -0
  83. package/stories/ox-data-item-spec.stories.ts +121 -0
  84. package/stories/ox-data-ooc-view.stories.ts +256 -0
  85. package/stories/ox-data-sample-view.stories.ts +227 -0
  86. package/stories/ox-grist-editor-data-item-spec.stories.ts +409 -0
  87. package/translations/en.json +26 -8
  88. package/translations/ko.json +25 -7
  89. package/translations/ms.json +26 -8
  90. package/translations/zh.json +25 -7
  91. package/demo/index.html +0 -28
  92. package/demo/ox-data-entry-form.html +0 -118
  93. package/demo/ox-data-item-spec.html +0 -152
  94. package/demo/ox-data-ooc-view.html +0 -185
  95. package/demo/ox-data-sample-view.html +0 -150
  96. package/demo/ox-grist-editor-data-item-spec.html +0 -476
  97. package/dist/src/ox-data-use-case.js.map +0 -1
@@ -0,0 +1,102 @@
1
+ import i18next from 'i18next'; // Since this is a common module, @operato/i18n was deliberately avoided.
2
+ import { OxDataUseCase } from '../ox-data-use-case.js';
3
+ export class OxDataUseCaseCCP extends OxDataUseCase {
4
+ getSpecification(dataItem) {
5
+ return {
6
+ name: 'CCP',
7
+ description: 'Critical Control Point Data Spec',
8
+ help: '',
9
+ specs: [
10
+ {
11
+ type: 'ccp-limits' /* A value which seperates acceptability from unacceptability */,
12
+ label: 'critical-limits',
13
+ name: 'criticalLimits',
14
+ property: dataItem
15
+ },
16
+ {
17
+ type: 'ccp-limits',
18
+ label: 'target-limits',
19
+ name: 'targetLimits',
20
+ property: dataItem
21
+ }
22
+ ]
23
+ };
24
+ }
25
+ evaluate(spec, values) {
26
+ if (!spec || typeof values === 'undefined') {
27
+ return;
28
+ }
29
+ if (!(values instanceof Array)) {
30
+ values = [values];
31
+ }
32
+ const { minimum: criticalMinimum, maximum: criticalMaximum, acceptables: criticalAcceptables } = spec['criticalLimits'] || {};
33
+ const { minimum: targetMinimum, maximum: targetMaximum, acceptables: targetAcceptables } = spec['targetLimits'] || {};
34
+ var oos = false;
35
+ var ooc = false;
36
+ for (let i = 0; i < values.length; i++) {
37
+ const value = values[i];
38
+ if (criticalMinimum != null && value < criticalMinimum) {
39
+ oos = true;
40
+ break;
41
+ }
42
+ if (criticalMaximum != null && value > criticalMaximum) {
43
+ oos = true;
44
+ break;
45
+ }
46
+ if (criticalAcceptables != null && !criticalAcceptables.includes(value)) {
47
+ oos = true;
48
+ break;
49
+ }
50
+ }
51
+ for (let i = 0; i < values.length; i++) {
52
+ const value = values[i];
53
+ if (targetMinimum != null && value < targetMinimum) {
54
+ ooc = true;
55
+ break;
56
+ }
57
+ if (targetMaximum != null && value > targetMaximum) {
58
+ ooc = true;
59
+ break;
60
+ }
61
+ if (targetAcceptables != null && !targetAcceptables.includes(value)) {
62
+ ooc = true;
63
+ break;
64
+ }
65
+ }
66
+ return { oos, ooc };
67
+ }
68
+ elaborateUseCaseSpec(limits) {
69
+ if (!limits) {
70
+ return;
71
+ }
72
+ var text = '';
73
+ const { minimum: criticalMinimum, maximum: criticalMaximum, acceptables: criticalAcceptables } = limits['criticalLimits'] || {};
74
+ if (criticalMinimum != null || criticalMaximum != null || criticalAcceptables != null) {
75
+ text += `${i18next.t('label.critical-limits')}\n`;
76
+ }
77
+ if (criticalMinimum != null) {
78
+ text += `\t${i18next.t('label.minimum value')} : ${criticalMinimum}\n`;
79
+ }
80
+ if (criticalMaximum != null) {
81
+ text += `\t${i18next.t('label.maximum value')} : ${criticalMaximum}\n`;
82
+ }
83
+ if (criticalAcceptables != null) {
84
+ text += `\t${i18next.t('label.acceptables')} : ${criticalAcceptables instanceof Array ? criticalAcceptables.join(', ') : criticalAcceptables}\n`;
85
+ }
86
+ const { minimum: targetMinimum, maximum: targetMaximum, acceptables: targetAcceptables } = limits['targetLimits'] || {};
87
+ if (targetMinimum != null || targetMaximum != null || targetAcceptables != null) {
88
+ text += `${i18next.t('label.target-limits')}\n`;
89
+ }
90
+ if (targetMinimum != null) {
91
+ text += `\t${i18next.t('label.minimum value')} : ${targetMinimum}\n`;
92
+ }
93
+ if (targetMaximum != null) {
94
+ text += `\t${i18next.t('label.maximum value')} : ${targetMaximum}\n`;
95
+ }
96
+ if (targetAcceptables != null) {
97
+ text += `\t${i18next.t('label.acceptables')} : ${targetAcceptables instanceof Array ? targetAcceptables.join(', ') : targetAcceptables}\n`;
98
+ }
99
+ return text;
100
+ }
101
+ }
102
+ //# sourceMappingURL=ox-data-use-case-ccp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-data-use-case-ccp.js","sourceRoot":"","sources":["../../../../src/usecase/ccp/ox-data-use-case-ccp.ts"],"names":[],"mappings":"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","sourcesContent":["import i18next from 'i18next' // Since this is a common module, @operato/i18n was deliberately avoided.\n\nimport { DataItem, EvaluationResult, UseCaseDefinition } from '../../types'\nimport { OxDataUseCase } from '../ox-data-use-case.js'\n\nexport class OxDataUseCaseCCP extends OxDataUseCase {\n getSpecification(dataItem: DataItem): UseCaseDefinition {\n return {\n name: 'CCP',\n description: 'Critical Control Point Data Spec',\n help: '',\n specs: [\n {\n type: 'ccp-limits' /* A value which seperates acceptability from unacceptability */,\n label: 'critical-limits',\n name: 'criticalLimits',\n property: dataItem\n },\n {\n type: 'ccp-limits',\n label: 'target-limits',\n name: 'targetLimits',\n property: dataItem\n }\n ]\n }\n }\n\n evaluate(spec: any, values: any | any[]): EvaluationResult | undefined {\n if (!spec || typeof values === 'undefined') {\n return\n }\n\n if (!(values instanceof Array)) {\n values = [values]\n }\n\n const {\n minimum: criticalMinimum,\n maximum: criticalMaximum,\n acceptables: criticalAcceptables\n } = spec['criticalLimits'] || {}\n\n const {\n minimum: targetMinimum,\n maximum: targetMaximum,\n acceptables: targetAcceptables\n } = spec['targetLimits'] || {}\n\n var oos = false\n var ooc = false\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i]\n\n if (criticalMinimum != null && value < criticalMinimum) {\n oos = true\n break\n }\n\n if (criticalMaximum != null && value > criticalMaximum) {\n oos = true\n break\n }\n\n if (criticalAcceptables != null && !criticalAcceptables.includes(value)) {\n oos = true\n break\n }\n }\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i]\n\n if (targetMinimum != null && value < targetMinimum) {\n ooc = true\n break\n }\n\n if (targetMaximum != null && value > targetMaximum) {\n ooc = true\n break\n }\n\n if (targetAcceptables != null && !targetAcceptables.includes(value)) {\n ooc = true\n break\n }\n }\n\n return { oos, ooc }\n }\n\n elaborateUseCaseSpec(limits: any): string | undefined {\n if (!limits) {\n return\n }\n\n var text = ''\n\n const {\n minimum: criticalMinimum,\n maximum: criticalMaximum,\n acceptables: criticalAcceptables\n } = limits['criticalLimits'] || {}\n\n if (criticalMinimum != null || criticalMaximum != null || criticalAcceptables != null) {\n text += `${i18next.t('label.critical-limits')}\\n`\n }\n\n if (criticalMinimum != null) {\n text += `\\t${i18next.t('label.minimum value')} : ${criticalMinimum}\\n`\n }\n if (criticalMaximum != null) {\n text += `\\t${i18next.t('label.maximum value')} : ${criticalMaximum}\\n`\n }\n if (criticalAcceptables != null) {\n text += `\\t${i18next.t('label.acceptables')} : ${\n criticalAcceptables instanceof Array ? criticalAcceptables.join(', ') : criticalAcceptables\n }\\n`\n }\n\n const {\n minimum: targetMinimum,\n maximum: targetMaximum,\n acceptables: targetAcceptables\n } = limits['targetLimits'] || {}\n\n if (targetMinimum != null || targetMaximum != null || targetAcceptables != null) {\n text += `${i18next.t('label.target-limits')}\\n`\n }\n\n if (targetMinimum != null) {\n text += `\\t${i18next.t('label.minimum value')} : ${targetMinimum}\\n`\n }\n if (targetMaximum != null) {\n text += `\\t${i18next.t('label.maximum value')} : ${targetMaximum}\\n`\n }\n if (targetAcceptables != null) {\n text += `\\t${i18next.t('label.acceptables')} : ${\n targetAcceptables instanceof Array ? targetAcceptables.join(', ') : targetAcceptables\n }\\n`\n }\n\n return text\n }\n}\n"]}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { LitElement } from 'lit';
5
+ export declare enum DataItemType {
6
+ number = "number",
7
+ text = "text",
8
+ boolean = "boolean",
9
+ select = "select",
10
+ file = "file"
11
+ }
12
+ export declare type CcpLimitValue = {
13
+ minimum?: number;
14
+ maximum?: number;
15
+ acceptables?: string[];
16
+ };
17
+ /**
18
+ element for CCP limits
19
+
20
+ Example:
21
+
22
+ <ox-input-ccp-limits
23
+ .value=${value}
24
+ .type=${type}>
25
+ </ox-input-ccp-limits>
26
+ */
27
+ export declare class OxInputCcpLimits extends LitElement {
28
+ static styles: import("lit").CSSResult;
29
+ value: CcpLimitValue;
30
+ type: DataItemType;
31
+ unit?: string;
32
+ options: {
33
+ options?: {
34
+ text: string;
35
+ value: string;
36
+ }[];
37
+ };
38
+ minimum: HTMLInputElement;
39
+ maximum: HTMLInputElement;
40
+ checkedAll: NodeListOf<HTMLInputElement>;
41
+ firstUpdated(): void;
42
+ render(): import("lit-html").TemplateResult<1>;
43
+ private onChange;
44
+ }
@@ -0,0 +1,171 @@
1
+ /**
2
+ * @license Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { __decorate } from "tslib";
5
+ import { css, html, LitElement } from 'lit';
6
+ import { customElement, property, query, queryAll } from 'lit/decorators.js';
7
+ import { i18next } from '@operato/i18n';
8
+ export var DataItemType;
9
+ (function (DataItemType) {
10
+ DataItemType["number"] = "number";
11
+ DataItemType["text"] = "text";
12
+ DataItemType["boolean"] = "boolean";
13
+ DataItemType["select"] = "select";
14
+ DataItemType["file"] = "file";
15
+ })(DataItemType || (DataItemType = {}));
16
+ /**
17
+ element for CCP limits
18
+
19
+ Example:
20
+
21
+ <ox-input-ccp-limits
22
+ .value=${value}
23
+ .type=${type}>
24
+ </ox-input-ccp-limits>
25
+ */
26
+ let OxInputCcpLimits = class OxInputCcpLimits extends LitElement {
27
+ constructor() {
28
+ super(...arguments);
29
+ this.value = {};
30
+ this.type = DataItemType.number;
31
+ this.options = {};
32
+ }
33
+ firstUpdated() {
34
+ this.renderRoot.addEventListener('change', this.onChange.bind(this));
35
+ }
36
+ render() {
37
+ var _a, _b;
38
+ const { minimum, maximum, acceptables = [] } = this.value || {};
39
+ return html `
40
+ <div>
41
+ ${this.type === DataItemType.number
42
+ ? html `
43
+ <label>
44
+ <div name>${i18next.t('text.minimum value')}</div>
45
+ <input type="number" name="minimum" .value=${minimum} />
46
+ <div unit>${this.unit}</div>
47
+ </select>
48
+ </label>
49
+ <label>
50
+ <div name>${i18next.t('text.maximum value')}</div>
51
+ <input type="number" name="maximum" .value=${maximum} />
52
+ <div unit>${this.unit}</div>
53
+ </label>
54
+ </div>
55
+ `
56
+ : this.type === DataItemType.select
57
+ ? html `
58
+ <!-- <div>Acceptables</div> -->
59
+ ${(_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.map(option => html `
60
+ <div>
61
+ <input type="checkbox" data-value=${option.value} ?checked=${acceptables.includes(option.value)} />
62
+ <span>${option.text}</span>
63
+ <span value>(${option.value})</span>
64
+ </div>
65
+ `)}
66
+ </div>
67
+ `
68
+ : html ` <div properties>${i18next.t('text.no properties to set')}</div> `}
69
+ </div>
70
+ `;
71
+ }
72
+ onChange(e) {
73
+ if (this.type === DataItemType.number) {
74
+ this.value = {
75
+ minimum: this.minimum.valueAsNumber,
76
+ maximum: this.maximum.valueAsNumber
77
+ };
78
+ }
79
+ else if (this.type === DataItemType.select) {
80
+ this.value = {
81
+ acceptables: Array.from(this.checkedAll).map(checked => {
82
+ const x = checked.getAttribute('data-value');
83
+ console.log(x);
84
+ return x;
85
+ })
86
+ };
87
+ }
88
+ else {
89
+ this.value = {};
90
+ }
91
+ this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }));
92
+ }
93
+ };
94
+ OxInputCcpLimits.styles = css `
95
+ :host {
96
+ display: flex;
97
+ flex-direction: column;
98
+ align-content: center;
99
+ }
100
+
101
+ label {
102
+ margin: 0 var(--margin-default) var(--margin-default) 0;
103
+ }
104
+
105
+ label div > * {
106
+ vertical-align: middle;
107
+ }
108
+
109
+ button {
110
+ width: 20px;
111
+ text-align: center;
112
+ }
113
+
114
+ div[name],
115
+ input[type='checkbox'] + span {
116
+ display: inline-block;
117
+ font: var(--label-font);
118
+ color: var(--label-color);
119
+ text-align: right;
120
+ }
121
+ input,
122
+ select {
123
+ border: var(--input-field-border);
124
+ border-radius: var(--input-field-border-radius);
125
+ padding: var(--input-field-padding);
126
+ font: var(--input-field-font);
127
+ }
128
+
129
+ input[type='checkbox'] {
130
+ width: initial;
131
+ }
132
+ input[checked] + span {
133
+ font-weight: bold;
134
+ }
135
+ [unit],
136
+ [value] {
137
+ display: inline-block;
138
+ opacity: 0.7;
139
+ font: var(--form-sublabel-font);
140
+ }
141
+ [properties] {
142
+ font: var(--input-field-font);
143
+ color: var(--label-color);
144
+ }
145
+ `;
146
+ __decorate([
147
+ property({ type: Object })
148
+ ], OxInputCcpLimits.prototype, "value", void 0);
149
+ __decorate([
150
+ property({ type: String })
151
+ ], OxInputCcpLimits.prototype, "type", void 0);
152
+ __decorate([
153
+ property({ type: String })
154
+ ], OxInputCcpLimits.prototype, "unit", void 0);
155
+ __decorate([
156
+ property({ type: Array })
157
+ ], OxInputCcpLimits.prototype, "options", void 0);
158
+ __decorate([
159
+ query('[name=minimum]')
160
+ ], OxInputCcpLimits.prototype, "minimum", void 0);
161
+ __decorate([
162
+ query('[name=maximum]')
163
+ ], OxInputCcpLimits.prototype, "maximum", void 0);
164
+ __decorate([
165
+ queryAll('[type=checkbox]:checked')
166
+ ], OxInputCcpLimits.prototype, "checkedAll", void 0);
167
+ OxInputCcpLimits = __decorate([
168
+ customElement('ox-input-ccp-limits')
169
+ ], OxInputCcpLimits);
170
+ export { OxInputCcpLimits };
171
+ //# sourceMappingURL=ox-input-ccp-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-input-ccp-limits.js","sourceRoot":"","sources":["../../../../src/usecase/ccp/ox-input-ccp-limits.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, queryAll } from 'lit/decorators.js'\n\nimport { i18next } from '@operato/i18n'\n\nexport enum DataItemType {\n number = 'number',\n text = 'text',\n boolean = 'boolean',\n select = 'select',\n file = 'file'\n}\n\nexport type CcpLimitValue = {\n minimum?: number\n maximum?: number\n acceptables?: string[]\n}\n\n/**\n element for CCP limits\n \n Example:\n \n <ox-input-ccp-limits\n .value=${value}\n .type=${type}>\n </ox-input-ccp-limits>\n */\n@customElement('ox-input-ccp-limits')\nexport class OxInputCcpLimits extends LitElement {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n align-content: center;\n }\n\n label {\n margin: 0 var(--margin-default) var(--margin-default) 0;\n }\n\n label div > * {\n vertical-align: middle;\n }\n\n button {\n width: 20px;\n text-align: center;\n }\n\n div[name],\n input[type='checkbox'] + span {\n display: inline-block;\n font: var(--label-font);\n color: var(--label-color);\n text-align: right;\n }\n input,\n 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\n input[type='checkbox'] {\n width: initial;\n }\n input[checked] + span {\n font-weight: bold;\n }\n [unit],\n [value] {\n display: inline-block;\n opacity: 0.7;\n font: var(--form-sublabel-font);\n }\n [properties] {\n font: var(--input-field-font);\n color: var(--label-color);\n }\n `\n\n @property({ type: Object }) value: CcpLimitValue = {}\n @property({ type: String }) type: DataItemType = DataItemType.number\n @property({ type: String }) unit?: string\n @property({ type: Array }) options: { options?: { text: string; value: string }[] } = {}\n\n @query('[name=minimum]') minimum!: HTMLInputElement\n @query('[name=maximum]') maximum!: HTMLInputElement\n @queryAll('[type=checkbox]:checked') checkedAll!: NodeListOf<HTMLInputElement>\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', this.onChange.bind(this))\n }\n\n render() {\n const { minimum, maximum, acceptables = [] } = this.value || {}\n\n return html`\n <div>\n ${this.type === DataItemType.number\n ? html`\n <label>\n <div name>${i18next.t('text.minimum value')}</div>\n <input type=\"number\" name=\"minimum\" .value=${minimum} />\n <div unit>${this.unit}</div>\n </select>\n </label>\n <label>\n <div name>${i18next.t('text.maximum value')}</div>\n <input type=\"number\" name=\"maximum\" .value=${maximum} />\n <div unit>${this.unit}</div>\n </label>\n </div>\n `\n : this.type === DataItemType.select\n ? html`\n <!-- <div>Acceptables</div> -->\n ${this.options?.options?.map(\n option => html`\n <div>\n <input type=\"checkbox\" data-value=${option.value} ?checked=${acceptables.includes(option.value)} />\n <span>${option.text}</span>\n <span value>(${option.value})</span>\n </div>\n `\n )}\n </div>\n `\n : html` <div properties>${i18next.t('text.no properties to set')}</div> `}\n </div>\n `\n }\n\n private onChange(e: Event) {\n if (this.type === DataItemType.number) {\n this.value = {\n minimum: this.minimum.valueAsNumber,\n maximum: this.maximum.valueAsNumber\n }\n } else if (this.type === DataItemType.select) {\n this.value = {\n acceptables: Array.from(this.checkedAll).map(checked => {\n const x = checked.getAttribute('data-value')!\n console.log(x)\n return x\n })\n }\n } else {\n this.value = {}\n }\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import './ox-input-ccp-limits.js';
2
+ import { OxPropertyEditor, PropertySpec } from '@operato/property-editor';
3
+ export declare class OxPropertyEditorCcpLimits extends OxPropertyEditor {
4
+ editorTemplate(value: any, spec: PropertySpec): import("lit-html").TemplateResult<1>;
5
+ }
@@ -0,0 +1,24 @@
1
+ import { __decorate } from "tslib";
2
+ import './ox-input-ccp-limits.js';
3
+ import { html } from 'lit';
4
+ import { customElement } from 'lit/decorators.js';
5
+ import { OxPropertyEditor } from '@operato/property-editor';
6
+ let OxPropertyEditorCcpLimits = class OxPropertyEditorCcpLimits extends OxPropertyEditor {
7
+ editorTemplate(value, spec) {
8
+ const { type, options, unit } = spec.property || {};
9
+ return html `
10
+ <ox-input-ccp-limits
11
+ id="editor"
12
+ .value=${value}
13
+ .type=${type}
14
+ .unit=${unit}
15
+ .options=${options}
16
+ ></ox-input-ccp-limits>
17
+ `;
18
+ }
19
+ };
20
+ OxPropertyEditorCcpLimits = __decorate([
21
+ customElement('ox-property-editor-ccp-limits')
22
+ ], OxPropertyEditorCcpLimits);
23
+ export { OxPropertyEditorCcpLimits };
24
+ //# sourceMappingURL=ox-property-editor-ccp-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-property-editor-ccp-limits.js","sourceRoot":"","sources":["../../../../src/usecase/ccp/ox-property-editor-ccp-limits.ts"],"names":[],"mappings":";AAAA,OAAO,0BAA0B,CAAA;AAEjC,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,gBAAgB,EAAgB,MAAM,0BAA0B,CAAA;AAGzE,IAAa,yBAAyB,GAAtC,MAAa,yBAA0B,SAAQ,gBAAgB;IAC7D,cAAc,CAAC,KAAU,EAAE,IAAkB;QAC3C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;QAEnD,OAAO,IAAI,CAAA;;;iBAGE,KAAK;gBACN,IAAI;gBACJ,IAAI;mBACD,OAAO;;KAErB,CAAA;IACH,CAAC;CACF,CAAA;AAdY,yBAAyB;IADrC,aAAa,CAAC,+BAA+B,CAAC;GAClC,yBAAyB,CAcrC;SAdY,yBAAyB","sourcesContent":["import './ox-input-ccp-limits.js'\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxPropertyEditor, PropertySpec } from '@operato/property-editor'\n\n@customElement('ox-property-editor-ccp-limits')\nexport class OxPropertyEditorCcpLimits extends OxPropertyEditor {\n editorTemplate(value: any, spec: PropertySpec) {\n const { type, options, unit } = spec.property || {}\n\n return html`\n <ox-input-ccp-limits\n id=\"editor\"\n .value=${value}\n .type=${type}\n .unit=${unit}\n .options=${options}\n ></ox-input-ccp-limits>\n `\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { DataItem, DataItemSpecSet, DataSet, EvaluationResult } from './types';
1
+ import { DataItem, DataSet, DataSpecLimitSet, EvaluationResult, UseCaseDefinition } from '../types';
2
2
  export declare abstract class OxDataUseCase {
3
3
  static registry: {
4
4
  [name: string]: OxDataUseCase;
@@ -7,10 +7,10 @@ export declare abstract class OxDataUseCase {
7
7
  static getUseCaseNames(): string[];
8
8
  static getUseCases(): OxDataUseCase[];
9
9
  static getUseCase(name: string): OxDataUseCase | undefined;
10
- static elaborateDataItemSpec(dataSet: DataSet, dataItem: DataItem): string;
11
- static evaluate(dataSet: DataSet, dataItems: DataItem[], data: any): EvaluationResult | undefined;
12
- static evaluateItem(dataSet: DataSet, dataItem: DataItem, values: any | any[]): EvaluationResult | undefined;
10
+ static elaborateDataItemSpec(useCaseNames: string[], spec: DataSpecLimitSet): string;
11
+ static evaluate(dataSet: DataSet, dataItems: DataItem[], data: any): EvaluationResult;
12
+ static evaluateItem(spec: DataSpecLimitSet, values: any | any[]): EvaluationResult | undefined;
13
13
  abstract evaluate(specs: any, values: any[]): EvaluationResult | undefined;
14
14
  abstract elaborateUseCaseSpec(spec: any): string | undefined;
15
- abstract getSpecification(dataItem: DataItem): DataItemSpecSet;
15
+ abstract getSpecification(dataItem: DataItem): UseCaseDefinition;
16
16
  }
@@ -11,29 +11,24 @@ export class OxDataUseCase {
11
11
  static getUseCase(name) {
12
12
  return OxDataUseCase.registry[name];
13
13
  }
14
- static elaborateDataItemSpec(dataSet, dataItem) {
15
- var _a;
16
- if (!dataSet.useCase) {
17
- return '';
18
- }
19
- const useCaseNames = dataSet.useCase.split(',').map(useCaseName => useCaseName.trim());
20
- const useCases = useCaseNames.map(useCaseName => OxDataUseCase.getUseCase(useCaseName)).filter(useCase => !!useCase);
14
+ static elaborateDataItemSpec(useCaseNames, spec) {
21
15
  var texts = [];
22
- for (let j = 0; j < useCases.length; j++) {
23
- const useCase = useCases[j];
16
+ useCaseNames.forEach(useCaseName => {
17
+ const useCase = OxDataUseCase.getUseCase(useCaseName);
24
18
  if (!useCase) {
25
- continue;
19
+ return;
26
20
  }
27
- const specs = (_a = dataItem.spec) === null || _a === void 0 ? void 0 : _a[dataSet.useCase];
28
- if (!specs) {
29
- continue;
21
+ const limits = spec === null || spec === void 0 ? void 0 : spec[useCaseName];
22
+ if (!limits) {
23
+ return;
30
24
  }
31
- const result = useCase.elaborateUseCaseSpec(dataItem.spec);
25
+ const result = useCase.elaborateUseCaseSpec(limits);
32
26
  if (!result) {
33
- continue;
27
+ return;
34
28
  }
29
+ texts.push(`[ ${useCaseName} ]`);
35
30
  texts.push(result);
36
- }
31
+ });
37
32
  return texts.join('\n');
38
33
  }
39
34
  static evaluate(dataSet, dataItems, data) {
@@ -64,7 +59,7 @@ export class OxDataUseCase {
64
59
  if (!specs) {
65
60
  continue;
66
61
  }
67
- const result = useCase === null || useCase === void 0 ? void 0 : useCase.evaluate(specs, values);
62
+ const result = useCase.evaluate(specs, values);
68
63
  if (result) {
69
64
  ooc || (ooc = result.ooc);
70
65
  oos || (oos = result.oos);
@@ -73,37 +68,30 @@ export class OxDataUseCase {
73
68
  }
74
69
  return { ooc, oos };
75
70
  }
76
- static evaluateItem(dataSet, dataItem, values) {
77
- var _a;
71
+ static evaluateItem(spec, values) {
78
72
  var ooc = false;
79
73
  var oos = false;
80
- if (!dataSet.useCase) {
81
- return { ooc, oos };
82
- }
83
- const useCaseNames = dataSet.useCase.split(',').map(useCaseName => useCaseName.trim());
84
- const useCases = useCaseNames.map(useCaseName => OxDataUseCase.getUseCase(useCaseName)).filter(useCase => !!useCase);
85
- const { active, tag } = dataItem;
86
- if (!active || !tag) {
87
- return;
88
- }
89
74
  if (typeof values === 'undefined') {
90
75
  return; // TODO what if in case no value ?
91
76
  }
92
77
  if (!(values instanceof Array)) {
93
78
  values = [values];
94
79
  }
95
- for (let j = 0; j < useCases.length; j++) {
96
- const useCase = useCases[j];
97
- const specs = (_a = dataItem.spec) === null || _a === void 0 ? void 0 : _a[dataSet.useCase];
98
- if (!specs) {
80
+ const useCaseNames = Object.keys(spec || {});
81
+ if (useCaseNames.length === 0) {
82
+ return { ooc, oos };
83
+ }
84
+ useCaseNames.forEach(useCaseName => {
85
+ const useCase = OxDataUseCase.getUseCase(useCaseName);
86
+ if (!useCase) {
99
87
  return;
100
88
  }
101
- const result = useCase === null || useCase === void 0 ? void 0 : useCase.evaluate(specs, values);
89
+ const result = useCase === null || useCase === void 0 ? void 0 : useCase.evaluate(spec[useCaseName], values);
102
90
  if (result) {
103
91
  ooc || (ooc = result.ooc);
104
92
  oos || (oos = result.oos);
105
93
  }
106
- }
94
+ });
107
95
  return { ooc, oos };
108
96
  }
109
97
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-data-use-case.js","sourceRoot":"","sources":["../../../src/usecase/ox-data-use-case.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataItem, DataSet, DataSpecLimitSet, EvaluationResult, UseCaseDefinition } from '../types'\n\nexport abstract class OxDataUseCase {\n static registry: { [name: string]: OxDataUseCase } = {}\n\n public static registerUseCase(name: string, useCase: OxDataUseCase) {\n OxDataUseCase.registry[name] = useCase\n }\n\n public static getUseCaseNames() {\n return Object.keys(OxDataUseCase.registry)\n }\n\n public static getUseCases(): OxDataUseCase[] {\n return Object.values(OxDataUseCase.registry)\n }\n\n public static getUseCase(name: string): OxDataUseCase | undefined {\n return OxDataUseCase.registry[name]\n }\n\n public static elaborateDataItemSpec(useCaseNames: string[], spec: DataSpecLimitSet): string {\n var texts: string[] = []\n\n useCaseNames.forEach(useCaseName => {\n const useCase = OxDataUseCase.getUseCase(useCaseName)\n if (!useCase) {\n return\n }\n\n const limits = spec?.[useCaseName]\n if (!limits) {\n return\n }\n\n const result = useCase.elaborateUseCaseSpec(limits)\n if (!result) {\n return\n }\n\n texts.push(`[ ${useCaseName} ]`)\n texts.push(result)\n })\n\n return texts.join('\\n')\n }\n\n public static evaluate(dataSet: DataSet, dataItems: DataItem[], data: any): EvaluationResult {\n var ooc = false\n var oos = false\n\n if (!dataSet.useCase) {\n return { ooc, oos }\n }\n\n const useCaseNames = dataSet.useCase.split(',').map(useCaseName => useCaseName.trim())\n const useCases = useCaseNames.map(useCaseName => OxDataUseCase.getUseCase(useCaseName)).filter(useCase => !!useCase)\n\n for (let i = 0; i < dataItems.length; i++) {\n const dataItem = dataItems[i]\n const { active, tag } = dataItem\n if (!active || !tag) {\n continue\n }\n\n let values: any | any[] = data[tag]\n if (typeof values === 'undefined') {\n continue // TODO what if in case no value ?\n }\n\n if (!(values instanceof Array)) {\n values = [values]\n }\n\n for (let j = 0; j < useCases.length; j++) {\n const useCase = useCases[j]\n\n const specs = dataItem.spec?.[dataSet.useCase]\n if (!specs) {\n continue\n }\n\n const result = useCase!.evaluate(specs, values)\n\n if (result) {\n ooc ||= result.ooc\n oos ||= result.oos\n }\n }\n }\n\n return { ooc, oos }\n }\n\n public static evaluateItem(spec: DataSpecLimitSet, values: any | any[]): EvaluationResult | undefined {\n var ooc = false\n var oos = false\n\n if (typeof values === 'undefined') {\n return // TODO what if in case no value ?\n }\n\n if (!(values instanceof Array)) {\n values = [values]\n }\n\n const useCaseNames = Object.keys(spec || {})\n\n if (useCaseNames.length === 0) {\n return { ooc, oos }\n }\n\n useCaseNames.forEach(useCaseName => {\n const useCase = OxDataUseCase.getUseCase(useCaseName)\n if (!useCase) {\n return\n }\n\n const result = useCase?.evaluate(spec[useCaseName], values)\n\n if (result) {\n ooc ||= result.ooc\n oos ||= result.oos\n }\n })\n\n return { ooc, oos }\n }\n\n public abstract evaluate(specs: any, values: any[]): EvaluationResult | undefined\n public abstract elaborateUseCaseSpec(spec: any): string | undefined\n public abstract getSpecification(dataItem: DataItem): UseCaseDefinition\n}\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ /* Here, only the common module of client and server is imported/exported. Be careful not to use a module dedicated to client or server. */
2
+ import { OxDataUseCase } from '../ox-data-use-case.js';
3
+ import { OxDataUseCaseQC } from './ox-data-use-case-qc.js';
4
+ // OxPropertyEditor.register({
5
+ // 'qc-limits': 'ox-property-editor-qc-limits'
6
+ // })
7
+ OxDataUseCase.registerUseCase('QC', new OxDataUseCaseQC());
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/usecase/qc/index.ts"],"names":[],"mappings":"AAAA,2IAA2I;AAE3I,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D,8BAA8B;AAC9B,gDAAgD;AAChD,KAAK;AAEL,aAAa,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,eAAe,EAAE,CAAC,CAAA","sourcesContent":["/* Here, only the common module of client and server is imported/exported. Be careful not to use a module dedicated to client or server. */\n\nimport { OxDataUseCase } from '../ox-data-use-case.js'\nimport { OxDataUseCaseQC } from './ox-data-use-case-qc.js'\n\n// OxPropertyEditor.register({\n// 'qc-limits': 'ox-property-editor-qc-limits'\n// })\n\nOxDataUseCase.registerUseCase('QC', new OxDataUseCaseQC())\n"]}
@@ -0,0 +1,7 @@
1
+ import { DataItem, EvaluationResult, UseCaseDefinition } from '../../types.js';
2
+ import { OxDataUseCase } from '../ox-data-use-case.js';
3
+ export declare class OxDataUseCaseQC implements OxDataUseCase {
4
+ getSpecification(dataItem: DataItem): UseCaseDefinition;
5
+ evaluate(spec: any, values: any[]): EvaluationResult;
6
+ elaborateUseCaseSpec(limits: any): string | undefined;
7
+ }
@@ -0,0 +1,55 @@
1
+ import i18next from 'i18next'; // Since this is a common module, @operato/i18n was deliberately avoided.
2
+ export class OxDataUseCaseQC {
3
+ getSpecification(dataItem) {
4
+ return {
5
+ name: 'QC',
6
+ description: 'Quality Control Data Spec',
7
+ help: '',
8
+ specs: [
9
+ {
10
+ type: 'qc-limits' /* 'A value which seperates acceptability from unacceptability' */,
11
+ label: 'pass-limits',
12
+ name: 'passLimits',
13
+ property: dataItem
14
+ }
15
+ ]
16
+ };
17
+ }
18
+ evaluate(spec, values) {
19
+ const { minimum, maximum, acceptables } = spec['passLimits'];
20
+ for (let i = 0; i < values.length; i++) {
21
+ const value = values[i];
22
+ if (minimum != null && value < minimum) {
23
+ return { oos: true, ooc: true };
24
+ }
25
+ if (maximum != null && value > maximum) {
26
+ return { oos: true, ooc: true };
27
+ }
28
+ if (acceptables != null && !acceptables.includes(value)) {
29
+ return { oos: true, ooc: true };
30
+ }
31
+ }
32
+ return { oos: false, ooc: false };
33
+ }
34
+ elaborateUseCaseSpec(limits) {
35
+ if (!limits) {
36
+ return;
37
+ }
38
+ var text = '';
39
+ const { minimum, maximum, acceptables } = limits['passLimits'] || {};
40
+ if (minimum != null || maximum != null || acceptables != null) {
41
+ text += `${i18next.t('label.pass-limits')}\n`;
42
+ }
43
+ if (minimum != null) {
44
+ text += `\t${i18next.t('label.minimum value')} : ${minimum}\n`;
45
+ }
46
+ if (maximum != null) {
47
+ text += `\t${i18next.t('label.maximum value')} : ${maximum}\n`;
48
+ }
49
+ if (acceptables != null) {
50
+ text += `\t${i18next.t('label.acceptables')} : ${acceptables instanceof Array ? acceptables.join(', ') : acceptables}\n`;
51
+ }
52
+ return text;
53
+ }
54
+ }
55
+ //# sourceMappingURL=ox-data-use-case-qc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-data-use-case-qc.js","sourceRoot":"","sources":["../../../../src/usecase/qc/ox-data-use-case-qc.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA,CAAC,yEAAyE;AAKvG,MAAM,OAAO,eAAe;IAC1B,gBAAgB,CAAC,QAAkB;QACjC,OAAO;YACL,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,2BAA2B;YACxC,IAAI,EAAE,EAAE;YACR,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,WAAW,CAAC,kEAAkE;oBACpF,KAAK,EAAE,aAAa;oBACpB,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,QAAQ;iBACnB;aACF;SACF,CAAA;IACH,CAAC;IAED,QAAQ,CAAC,IAAS,EAAE,MAAa;QAC/B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;QAE5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAEvB,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK,GAAG,OAAO,EAAE;gBACtC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;aAChC;YAED,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK,GAAG,OAAO,EAAE;gBACtC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;aAChC;YAED,IAAI,WAAW,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACvD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;aAChC;SACF;QAED,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;IACnC,CAAC;IAED,oBAAoB,CAAC,MAAW;QAC9B,IAAI,CAAC,MAAM,EAAE;YACX,OAAM;SACP;QAED,IAAI,IAAI,GAAG,EAAE,CAAA;QAEb,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;QAEpE,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,EAAE;YAC7D,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAA;SAC9C;QAED,IAAI,OAAO,IAAI,IAAI,EAAE;YACnB,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,OAAO,IAAI,CAAA;SAC/D;QACD,IAAI,OAAO,IAAI,IAAI,EAAE;YACnB,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,OAAO,IAAI,CAAA;SAC/D;QACD,IAAI,WAAW,IAAI,IAAI,EAAE;YACvB,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,MACzC,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAC1D,IAAI,CAAA;SACL;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF","sourcesContent":["import i18next from 'i18next' // Since this is a common module, @operato/i18n was deliberately avoided.\n\nimport { DataItem, EvaluationResult, UseCaseDefinition } from '../../types.js'\nimport { OxDataUseCase } from '../ox-data-use-case.js'\n\nexport class OxDataUseCaseQC implements OxDataUseCase {\n getSpecification(dataItem: DataItem): UseCaseDefinition {\n return {\n name: 'QC',\n description: 'Quality Control Data Spec',\n help: '',\n specs: [\n {\n type: 'qc-limits' /* 'A value which seperates acceptability from unacceptability' */,\n label: 'pass-limits',\n name: 'passLimits',\n property: dataItem\n }\n ]\n }\n }\n\n evaluate(spec: any, values: any[]): EvaluationResult {\n const { minimum, maximum, acceptables } = spec['passLimits']\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i]\n\n if (minimum != null && value < minimum) {\n return { oos: true, ooc: true }\n }\n\n if (maximum != null && value > maximum) {\n return { oos: true, ooc: true }\n }\n\n if (acceptables != null && !acceptables.includes(value)) {\n return { oos: true, ooc: true }\n }\n }\n\n return { oos: false, ooc: false }\n }\n\n elaborateUseCaseSpec(limits: any): string | undefined {\n if (!limits) {\n return\n }\n\n var text = ''\n\n const { minimum, maximum, acceptables } = limits['passLimits'] || {}\n\n if (minimum != null || maximum != null || acceptables != null) {\n text += `${i18next.t('label.pass-limits')}\\n`\n }\n\n if (minimum != null) {\n text += `\\t${i18next.t('label.minimum value')} : ${minimum}\\n`\n }\n if (maximum != null) {\n text += `\\t${i18next.t('label.maximum value')} : ${maximum}\\n`\n }\n if (acceptables != null) {\n text += `\\t${i18next.t('label.acceptables')} : ${\n acceptables instanceof Array ? acceptables.join(', ') : acceptables\n }\\n`\n }\n\n return text\n }\n}\n"]}