@operato/dataset 1.0.0-beta.4 → 1.0.0-beta.43

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 +578 -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 +6 -4
  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 +20 -14
  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 +8 -5
  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
@@ -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"]}
@@ -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 QcLimitValue = {
13
+ minimum?: number;
14
+ maximum?: number;
15
+ acceptables?: string[];
16
+ };
17
+ /**
18
+ element for QC limits
19
+
20
+ Example:
21
+
22
+ <ox-input-qc-limits
23
+ .value=${value}
24
+ .type=${type}>
25
+ </ox-input-qc-limits>
26
+ */
27
+ export declare class OxInputQcLimits extends LitElement {
28
+ static styles: import("lit").CSSResult;
29
+ value: QcLimitValue;
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 QC limits
18
+
19
+ Example:
20
+
21
+ <ox-input-qc-limits
22
+ .value=${value}
23
+ .type=${type}>
24
+ </ox-input-qc-limits>
25
+ */
26
+ let OxInputQcLimits = class OxInputQcLimits 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
+ OxInputQcLimits.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
+ ], OxInputQcLimits.prototype, "value", void 0);
149
+ __decorate([
150
+ property({ type: String })
151
+ ], OxInputQcLimits.prototype, "type", void 0);
152
+ __decorate([
153
+ property({ type: String })
154
+ ], OxInputQcLimits.prototype, "unit", void 0);
155
+ __decorate([
156
+ property({ type: Array })
157
+ ], OxInputQcLimits.prototype, "options", void 0);
158
+ __decorate([
159
+ query('[name=minimum]')
160
+ ], OxInputQcLimits.prototype, "minimum", void 0);
161
+ __decorate([
162
+ query('[name=maximum]')
163
+ ], OxInputQcLimits.prototype, "maximum", void 0);
164
+ __decorate([
165
+ queryAll('[type=checkbox]:checked')
166
+ ], OxInputQcLimits.prototype, "checkedAll", void 0);
167
+ OxInputQcLimits = __decorate([
168
+ customElement('ox-input-qc-limits')
169
+ ], OxInputQcLimits);
170
+ export { OxInputQcLimits };
171
+ //# sourceMappingURL=ox-input-qc-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-input-qc-limits.js","sourceRoot":"","sources":["../../../../src/usecase/qc/ox-input-qc-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 QcLimitValue = {\n minimum?: number\n maximum?: number\n acceptables?: string[]\n}\n\n/**\n element for QC limits\n \n Example:\n \n <ox-input-qc-limits\n .value=${value}\n .type=${type}>\n </ox-input-qc-limits>\n */\n@customElement('ox-input-qc-limits')\nexport class OxInputQcLimits 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: QcLimitValue = {}\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-qc-limits.js';
2
+ import { OxPropertyEditor } from '@operato/property-editor';
3
+ export declare class OxPropertyEditorQcLimits extends OxPropertyEditor {
4
+ editorTemplate(): import("lit-html").TemplateResult<1>;
5
+ }
@@ -0,0 +1,24 @@
1
+ import { __decorate } from "tslib";
2
+ import './ox-input-qc-limits.js';
3
+ import { html } from 'lit';
4
+ import { customElement } from 'lit/decorators.js';
5
+ import { OxPropertyEditor } from '@operato/property-editor';
6
+ let OxPropertyEditorQcLimits = class OxPropertyEditorQcLimits extends OxPropertyEditor {
7
+ editorTemplate() {
8
+ const { type, options, unit } = this.property || {};
9
+ return html `
10
+ <ox-input-qc-limits
11
+ id="editor"
12
+ .value=${this.value}
13
+ .type=${type}
14
+ .unit=${unit}
15
+ .options=${options}
16
+ ></ox-input-qc-limits>
17
+ `;
18
+ }
19
+ };
20
+ OxPropertyEditorQcLimits = __decorate([
21
+ customElement('ox-property-editor-qc-limits')
22
+ ], OxPropertyEditorQcLimits);
23
+ export { OxPropertyEditorQcLimits };
24
+ //# sourceMappingURL=ox-property-editor-qc-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-property-editor-qc-limits.js","sourceRoot":"","sources":["../../../../src/usecase/qc/ox-property-editor-qc-limits.ts"],"names":[],"mappings":";AAAA,OAAO,yBAAyB,CAAA;AAEhC,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAG3D,IAAa,wBAAwB,GAArC,MAAa,wBAAyB,SAAQ,gBAAgB;IAC5D,cAAc;QACZ,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;QAEnD,OAAO,IAAI,CAAA;;;iBAGE,IAAI,CAAC,KAAK;gBACX,IAAI;gBACJ,IAAI;mBACD,OAAO;;KAErB,CAAA;IACH,CAAC;CACF,CAAA;AAdY,wBAAwB;IADpC,aAAa,CAAC,8BAA8B,CAAC;GACjC,wBAAwB,CAcpC;SAdY,wBAAwB","sourcesContent":["import './ox-input-qc-limits.js'\n\nimport { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxPropertyEditor } from '@operato/property-editor'\n\n@customElement('ox-property-editor-qc-limits')\nexport class OxPropertyEditorQcLimits extends OxPropertyEditor {\n editorTemplate() {\n const { type, options, unit } = this.property || {}\n\n return html`\n <ox-input-qc-limits\n id=\"editor\"\n .value=${this.value}\n .type=${type}\n .unit=${unit}\n .options=${options}\n ></ox-input-qc-limits>\n `\n }\n}\n"]}
@@ -0,0 +1,19 @@
1
+ import '@operato/i18n';
2
+ import '../src/ox-data-entry-form.js';
3
+ import '../src/usecase/ccp';
4
+ import '@material/mwc-icon';
5
+ import { TemplateResult } from 'lit';
6
+ declare const _default: {
7
+ title: string;
8
+ component: string;
9
+ argTypes: {};
10
+ };
11
+ export default _default;
12
+ interface Story<T> {
13
+ (args: T): TemplateResult;
14
+ args?: Partial<T>;
15
+ argTypes?: Record<string, unknown>;
16
+ }
17
+ interface ArgTypes {
18
+ }
19
+ export declare const Regular: Story<ArgTypes>;
@@ -0,0 +1,152 @@
1
+ import '@operato/i18n';
2
+ import '../src/ox-data-entry-form.js';
3
+ import '../src/usecase/ccp'; /* register usecase CCP */
4
+ import '@material/mwc-icon';
5
+ import { html } from 'lit';
6
+ export default {
7
+ title: 'ox-data-entry-form',
8
+ component: 'ox-data-entry-form',
9
+ argTypes: {}
10
+ };
11
+ const dataSet = {
12
+ name: 'sample',
13
+ description: 'sample description',
14
+ useCase: 'CCP',
15
+ dataItems: [
16
+ {
17
+ name: '창고 온도',
18
+ description: '창고 온도는 섭씨 0도 이하로 유지되어야 합니다.',
19
+ sequence: 1,
20
+ tag: 'temp',
21
+ type: 'number',
22
+ quota: 1,
23
+ active: true,
24
+ unit: '℃',
25
+ spec: {
26
+ CCP: {
27
+ criticalLimits: {
28
+ minimum: 100,
29
+ maximum: 200
30
+ },
31
+ targetLimits: {
32
+ minimum: 120,
33
+ maximum: 180
34
+ }
35
+ }
36
+ }
37
+ },
38
+ {
39
+ name: '창고 습도',
40
+ description: '창고 습도는 30% 이하로 유지되어야 합니다.',
41
+ sequence: 2,
42
+ tag: 'humid',
43
+ type: 'number',
44
+ quota: 5,
45
+ active: true,
46
+ unit: '%',
47
+ spec: {
48
+ CCP: {
49
+ criticalLimits: {
50
+ minimum: 10,
51
+ maximum: 50
52
+ },
53
+ targetLimits: {
54
+ minimum: 20,
55
+ maximum: 40
56
+ }
57
+ }
58
+ }
59
+ },
60
+ {
61
+ name: '육안 검사',
62
+ description: '육안 검사는 포장전 30분 내로 실행되어야 합니다.',
63
+ sequence: 3,
64
+ tag: 'inspection',
65
+ type: 'boolean',
66
+ quota: 3,
67
+ active: true,
68
+ spec: {
69
+ CCP: {
70
+ criticalLimits: {
71
+ acceptables: true
72
+ },
73
+ targetLimits: {
74
+ acceptables: true
75
+ }
76
+ }
77
+ }
78
+ },
79
+ {
80
+ name: '품평',
81
+ description: '품평은 최우수/우수/보통/미달을 포함하여 간단히 평가.',
82
+ sequence: 4,
83
+ tag: 'evaluation',
84
+ type: 'select',
85
+ options: {
86
+ options: [
87
+ { text: '최우수', value: '최우수' },
88
+ { text: '우수', value: '우수' },
89
+ { text: '보통', value: '보통' },
90
+ { text: '미달', value: '미달' }
91
+ ]
92
+ },
93
+ quota: 3,
94
+ active: true,
95
+ spec: {
96
+ CCP: {
97
+ criticalLimits: {
98
+ acceptables: ['최우수', '우수', '보통']
99
+ },
100
+ targetLimits: {
101
+ acceptables: ['최우수', '우수']
102
+ }
103
+ }
104
+ }
105
+ },
106
+ {
107
+ name: '코멘트',
108
+ description: '특이사항을 기록함.',
109
+ sequence: 4,
110
+ tag: 'comment',
111
+ type: 'string',
112
+ quota: 1,
113
+ active: true
114
+ },
115
+ {
116
+ name: '첨부파일',
117
+ description: '참조 첨부 파일.',
118
+ sequence: 4,
119
+ tag: 'attachment',
120
+ type: 'file',
121
+ quota: 1,
122
+ active: true
123
+ }
124
+ ]
125
+ };
126
+ var value = {
127
+ temp: 1000,
128
+ humid: [20, 23, 21, 26, 27],
129
+ inspection: [true, false, true],
130
+ evaluation: ['최우수', '보통', '우수'],
131
+ comment: '이것이 코멘트입니다.'
132
+ };
133
+ const Template = ({}) => html `
134
+ <link href="/themes/app-theme.css" rel="stylesheet" />
135
+ <link href="https://fonts.googleapis.com/css?family=Material+Icons&display=block" rel="stylesheet" />
136
+ <style>
137
+ body {
138
+ }
139
+ </style>
140
+
141
+ <ox-data-entry-form
142
+ .dataSet=${dataSet}
143
+ .value=${value}
144
+ @change=${(e) => {
145
+ value = e.detail;
146
+ console.log('change', value);
147
+ }}
148
+ ></ox-data-entry-form>
149
+ `;
150
+ export const Regular = Template.bind({});
151
+ Regular.args = {};
152
+ //# sourceMappingURL=ox-data-entry-form.stories.js.map