@operato/dataset 2.0.0-alpha.3 → 2.0.0-alpha.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +214 -0
- package/demo/favicon.ico +0 -0
- package/demo/index.html +338 -0
- package/demo/ox-data-ooc-brief-view-test.html +338 -0
- package/dist/src/ox-data-entry-form.js +48 -36
- package/dist/src/ox-data-entry-form.js.map +1 -1
- package/dist/src/ox-data-entry-subgroup-form.js +2 -0
- package/dist/src/ox-data-entry-subgroup-form.js.map +1 -1
- package/dist/src/ox-data-entry-view.d.ts +2 -2
- package/dist/src/ox-data-entry-view.js +12 -2
- package/dist/src/ox-data-entry-view.js.map +1 -1
- package/dist/src/ox-data-ooc-badge.d.ts +9 -0
- package/dist/src/ox-data-ooc-badge.js +66 -0
- package/dist/src/ox-data-ooc-badge.js.map +1 -0
- package/dist/src/ox-data-ooc-brief-view.d.ts +2 -0
- package/dist/src/ox-data-ooc-brief-view.js +8 -110
- package/dist/src/ox-data-ooc-brief-view.js.map +1 -1
- package/dist/src/ox-data-ooc-correction-part.d.ts +9 -0
- package/dist/src/ox-data-ooc-correction-part.js +99 -0
- package/dist/src/ox-data-ooc-correction-part.js.map +1 -0
- package/dist/src/ox-data-ooc-history.d.ts +10 -0
- package/dist/src/ox-data-ooc-history.js +72 -0
- package/dist/src/ox-data-ooc-history.js.map +1 -0
- package/dist/src/ox-data-ooc-view.d.ts +1 -0
- package/dist/src/ox-data-ooc-view.js +6 -89
- package/dist/src/ox-data-ooc-view.js.map +1 -1
- package/dist/src/ox-data-sample-subgroup-view.js +1 -1
- package/dist/src/ox-data-sample-subgroup-view.js.map +1 -1
- package/dist/src/ox-data-sample-view.js +47 -30
- package/dist/src/ox-data-sample-view.js.map +1 -1
- package/dist/src/ox-data-summary-view.js +7 -1
- package/dist/src/ox-data-summary-view.js.map +1 -1
- package/dist/src/types.d.ts +57 -9
- package/dist/src/types.js.map +1 -1
- package/dist/src/usecase/spc/index.d.ts +1 -0
- package/dist/src/usecase/spc/index.js +8 -0
- package/dist/src/usecase/spc/index.js.map +1 -0
- package/dist/src/usecase/spc/ox-data-use-case-spc.d.ts +7 -0
- package/dist/src/usecase/spc/ox-data-use-case-spc.js +102 -0
- package/dist/src/usecase/spc/ox-data-use-case-spc.js.map +1 -0
- package/dist/src/usecase/spc/ox-input-spc-limits.d.ts +44 -0
- package/dist/src/usecase/spc/ox-input-spc-limits.js +193 -0
- package/dist/src/usecase/spc/ox-input-spc-limits.js.map +1 -0
- package/dist/src/usecase/spc/ox-property-editor-spc-limits.d.ts +6 -0
- package/dist/src/usecase/spc/ox-property-editor-spc-limits.js +24 -0
- package/dist/src/usecase/spc/ox-property-editor-spc-limits.js.map +1 -0
- package/dist/stories/ox-data-entry-form.stories.js +43 -0
- package/dist/stories/ox-data-entry-form.stories.js.map +1 -1
- package/dist/stories/ox-data-ooc-view.stories.js +2 -0
- package/dist/stories/ox-data-ooc-view.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +37 -22
- package/src/ox-data-entry-form.ts +65 -46
- package/src/ox-data-entry-subgroup-form.ts +2 -0
- package/src/ox-data-entry-view.ts +13 -2
- package/src/ox-data-ooc-badge.ts +64 -0
- package/src/ox-data-ooc-brief-view.ts +9 -120
- package/src/ox-data-ooc-correction-part.ts +107 -0
- package/src/ox-data-ooc-history.ts +74 -0
- package/src/ox-data-ooc-view.ts +6 -91
- package/src/ox-data-sample-subgroup-view.ts +1 -1
- package/src/ox-data-sample-view.ts +47 -30
- package/src/ox-data-summary-view.ts +7 -1
- package/src/types.ts +76 -27
- package/src/usecase/spc/index.ts +10 -0
- package/src/usecase/spc/ox-data-use-case-spc.ts +147 -0
- package/src/usecase/spc/ox-input-spc-limits.ts +182 -0
- package/src/usecase/spc/ox-property-editor-spc-limits.ts +23 -0
- package/stories/ox-data-entry-form.stories.ts +44 -0
- package/stories/ox-data-ooc-view.stories.ts +2 -0
- package/themes/grist-theme.css +1 -1
- package/translations/en.json +1 -0
- package/translations/ko.json +1 -0
- package/translations/ms.json +142 -70
- package/translations/zh.json +146 -75
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import i18next from 'i18next' // Since this is a common module, @operato/i18n was deliberately avoided.
|
|
2
|
+
|
|
3
|
+
import { DataItem, EvaluationResult, UseCaseDefinition } from '../../types'
|
|
4
|
+
import { OxDataUseCase } from '../ox-data-use-case.js'
|
|
5
|
+
|
|
6
|
+
export class OxDataUseCaseSPC extends OxDataUseCase {
|
|
7
|
+
getSpecification(dataItem: DataItem): UseCaseDefinition {
|
|
8
|
+
return {
|
|
9
|
+
name: 'SPC',
|
|
10
|
+
description: 'Critical Control Point Data Spec',
|
|
11
|
+
help: '',
|
|
12
|
+
specs: [
|
|
13
|
+
{
|
|
14
|
+
type: 'spc-limits' /* A value which seperates acceptability from unacceptability */,
|
|
15
|
+
label: 'critical-limits',
|
|
16
|
+
name: 'criticalLimits',
|
|
17
|
+
property: dataItem
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
type: 'spc-limits',
|
|
21
|
+
label: 'target-limits',
|
|
22
|
+
name: 'targetLimits',
|
|
23
|
+
property: dataItem
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
evaluate(spec: any, values: any | any[]): EvaluationResult | undefined {
|
|
30
|
+
if (!spec || typeof values === 'undefined') {
|
|
31
|
+
return
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (!(values instanceof Array)) {
|
|
35
|
+
values = [values]
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const {
|
|
39
|
+
minimum: criticalMinimum,
|
|
40
|
+
maximum: criticalMaximum,
|
|
41
|
+
acceptables: criticalAcceptables
|
|
42
|
+
} = spec['criticalLimits'] || {}
|
|
43
|
+
|
|
44
|
+
const {
|
|
45
|
+
minimum: targetMinimum,
|
|
46
|
+
maximum: targetMaximum,
|
|
47
|
+
acceptables: targetAcceptables
|
|
48
|
+
} = spec['targetLimits'] || {}
|
|
49
|
+
|
|
50
|
+
var oos = false
|
|
51
|
+
var ooc = false
|
|
52
|
+
|
|
53
|
+
for (let i = 0; i < values.length; i++) {
|
|
54
|
+
const value = values[i]
|
|
55
|
+
|
|
56
|
+
if (criticalMinimum != null && value < criticalMinimum) {
|
|
57
|
+
oos = true
|
|
58
|
+
break
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (criticalMaximum != null && value > criticalMaximum) {
|
|
62
|
+
oos = true
|
|
63
|
+
break
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (criticalAcceptables != null && !criticalAcceptables.includes(value)) {
|
|
67
|
+
oos = true
|
|
68
|
+
break
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
for (let i = 0; i < values.length; i++) {
|
|
73
|
+
const value = values[i]
|
|
74
|
+
|
|
75
|
+
if (targetMinimum != null && value < targetMinimum) {
|
|
76
|
+
ooc = true
|
|
77
|
+
break
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (targetMaximum != null && value > targetMaximum) {
|
|
81
|
+
ooc = true
|
|
82
|
+
break
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (targetAcceptables != null && !targetAcceptables.includes(value)) {
|
|
86
|
+
ooc = true
|
|
87
|
+
break
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return { oos, ooc }
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
elaborateUseCaseSpec(limits: any): string | undefined {
|
|
95
|
+
if (!limits) {
|
|
96
|
+
return
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
var text = ''
|
|
100
|
+
|
|
101
|
+
const {
|
|
102
|
+
minimum: criticalMinimum,
|
|
103
|
+
maximum: criticalMaximum,
|
|
104
|
+
acceptables: criticalAcceptables
|
|
105
|
+
} = limits['criticalLimits'] || {}
|
|
106
|
+
|
|
107
|
+
if (criticalMinimum != null || criticalMaximum != null || criticalAcceptables != null) {
|
|
108
|
+
text += `${i18next.t('label.critical-limits')}\n`
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (criticalMinimum != null) {
|
|
112
|
+
text += `\t${i18next.t('label.minimum value')} : ${criticalMinimum}\n`
|
|
113
|
+
}
|
|
114
|
+
if (criticalMaximum != null) {
|
|
115
|
+
text += `\t${i18next.t('label.maximum value')} : ${criticalMaximum}\n`
|
|
116
|
+
}
|
|
117
|
+
if (criticalAcceptables != null) {
|
|
118
|
+
text += `\t${i18next.t('label.acceptables')} : ${
|
|
119
|
+
criticalAcceptables instanceof Array ? criticalAcceptables.join(', ') : criticalAcceptables
|
|
120
|
+
}\n`
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const {
|
|
124
|
+
minimum: targetMinimum,
|
|
125
|
+
maximum: targetMaximum,
|
|
126
|
+
acceptables: targetAcceptables
|
|
127
|
+
} = limits['targetLimits'] || {}
|
|
128
|
+
|
|
129
|
+
if (targetMinimum != null || targetMaximum != null || targetAcceptables != null) {
|
|
130
|
+
text += `${i18next.t('label.target-limits')}\n`
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (targetMinimum != null) {
|
|
134
|
+
text += `\t${i18next.t('label.minimum value')} : ${targetMinimum}\n`
|
|
135
|
+
}
|
|
136
|
+
if (targetMaximum != null) {
|
|
137
|
+
text += `\t${i18next.t('label.maximum value')} : ${targetMaximum}\n`
|
|
138
|
+
}
|
|
139
|
+
if (targetAcceptables != null) {
|
|
140
|
+
text += `\t${i18next.t('label.acceptables')} : ${
|
|
141
|
+
targetAcceptables instanceof Array ? targetAcceptables.join(', ') : targetAcceptables
|
|
142
|
+
}\n`
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return text
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { css, html, LitElement } from 'lit'
|
|
6
|
+
import { customElement, property, query, queryAll } from 'lit/decorators.js'
|
|
7
|
+
|
|
8
|
+
import { i18next } from '@operato/i18n'
|
|
9
|
+
|
|
10
|
+
export enum DataItemType {
|
|
11
|
+
number = 'number',
|
|
12
|
+
text = 'text',
|
|
13
|
+
boolean = 'boolean',
|
|
14
|
+
select = 'select',
|
|
15
|
+
file = 'file'
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type SpcLimitValue = {
|
|
19
|
+
minimum?: number
|
|
20
|
+
maximum?: number
|
|
21
|
+
acceptables?: string[] | boolean[]
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
element for SPC limits
|
|
26
|
+
|
|
27
|
+
Example:
|
|
28
|
+
|
|
29
|
+
<ox-input-spc-limits
|
|
30
|
+
.value=${value}
|
|
31
|
+
.type=${type}>
|
|
32
|
+
</ox-input-spc-limits>
|
|
33
|
+
*/
|
|
34
|
+
@customElement('ox-input-spc-limits')
|
|
35
|
+
export class OxInputSpcLimits extends LitElement {
|
|
36
|
+
static styles = css`
|
|
37
|
+
:host {
|
|
38
|
+
display: flex;
|
|
39
|
+
flex-direction: column;
|
|
40
|
+
align-content: center;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
label {
|
|
44
|
+
margin: 0 var(--margin-default) var(--margin-default) 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
label div > * {
|
|
48
|
+
vertical-align: middle;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
button {
|
|
52
|
+
width: 20px;
|
|
53
|
+
text-align: center;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
div[name],
|
|
57
|
+
input[type='checkbox'] + span {
|
|
58
|
+
display: inline-block;
|
|
59
|
+
font: var(--label-font);
|
|
60
|
+
color: var(--label-color);
|
|
61
|
+
text-align: right;
|
|
62
|
+
}
|
|
63
|
+
input,
|
|
64
|
+
select {
|
|
65
|
+
border: var(--input-field-border);
|
|
66
|
+
border-radius: var(--input-field-border-radius);
|
|
67
|
+
padding: var(--input-field-padding);
|
|
68
|
+
font: var(--input-field-font);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
input[type='checkbox'] {
|
|
72
|
+
width: initial;
|
|
73
|
+
}
|
|
74
|
+
input[checked] + span {
|
|
75
|
+
font-weight: bold;
|
|
76
|
+
}
|
|
77
|
+
[unit],
|
|
78
|
+
[value] {
|
|
79
|
+
display: inline-block;
|
|
80
|
+
opacity: 0.7;
|
|
81
|
+
font: var(--form-sublabel-font);
|
|
82
|
+
}
|
|
83
|
+
[properties] {
|
|
84
|
+
font: var(--input-field-font);
|
|
85
|
+
color: var(--label-color);
|
|
86
|
+
}
|
|
87
|
+
`
|
|
88
|
+
|
|
89
|
+
@property({ type: Object }) value: SpcLimitValue = {}
|
|
90
|
+
@property({ type: String }) type: DataItemType = DataItemType.number
|
|
91
|
+
@property({ type: String }) unit?: string
|
|
92
|
+
@property({ type: Object }) options: { options?: { text: string; value: string }[] } = {}
|
|
93
|
+
|
|
94
|
+
@query('[name=minimum]') minimum!: HTMLInputElement
|
|
95
|
+
@query('[name=maximum]') maximum!: HTMLInputElement
|
|
96
|
+
@queryAll('[type=checkbox]:checked') checkedAll!: NodeListOf<HTMLInputElement>
|
|
97
|
+
|
|
98
|
+
firstUpdated() {
|
|
99
|
+
this.renderRoot.addEventListener('change', this.onChange.bind(this))
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
render() {
|
|
103
|
+
const { minimum, maximum, acceptables = [] } = this.value || {}
|
|
104
|
+
|
|
105
|
+
return html`
|
|
106
|
+
<div>
|
|
107
|
+
${this.type === DataItemType.number
|
|
108
|
+
? html`
|
|
109
|
+
<label>
|
|
110
|
+
<div name>${i18next.t('text.minimum value')}</div>
|
|
111
|
+
<input type="number" name="minimum" .value=${String(minimum)} />
|
|
112
|
+
<div unit>${this.unit}</div>
|
|
113
|
+
</select>
|
|
114
|
+
</label>
|
|
115
|
+
<label>
|
|
116
|
+
<div name>${i18next.t('text.maximum value')}</div>
|
|
117
|
+
<input type="number" name="maximum" .value=${String(maximum)} />
|
|
118
|
+
<div unit>${this.unit}</div>
|
|
119
|
+
</label>
|
|
120
|
+
`
|
|
121
|
+
: this.type === DataItemType.select
|
|
122
|
+
? html`
|
|
123
|
+
<!-- <div>Acceptables</div> -->
|
|
124
|
+
${this.options?.options?.map(
|
|
125
|
+
option => html`
|
|
126
|
+
<div>
|
|
127
|
+
<input
|
|
128
|
+
type="checkbox"
|
|
129
|
+
data-value=${option.value}
|
|
130
|
+
?checked=${(acceptables as string[]).includes(option.value)}
|
|
131
|
+
/>
|
|
132
|
+
<span>${option.text}</span>
|
|
133
|
+
<span value>(${option.value})</span>
|
|
134
|
+
</div>
|
|
135
|
+
`
|
|
136
|
+
)}
|
|
137
|
+
`
|
|
138
|
+
: this.type === DataItemType.boolean
|
|
139
|
+
? html`
|
|
140
|
+
<div>
|
|
141
|
+
<input type="checkbox" data-value=${true} ?checked=${(acceptables as boolean[]).includes(true)} />
|
|
142
|
+
<span value>true</span>
|
|
143
|
+
</div>
|
|
144
|
+
<div>
|
|
145
|
+
<input type="checkbox" data-value=${false} ?checked=${(acceptables as boolean[]).includes(false)} />
|
|
146
|
+
<span value>false</span>
|
|
147
|
+
</div>
|
|
148
|
+
`
|
|
149
|
+
: html` <div properties>${i18next.t('text.no properties to set')}</div> `}
|
|
150
|
+
</div>
|
|
151
|
+
`
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
private onChange(e: Event) {
|
|
155
|
+
if (this.type === DataItemType.number) {
|
|
156
|
+
this.value = {
|
|
157
|
+
minimum: this.minimum.valueAsNumber,
|
|
158
|
+
maximum: this.maximum.valueAsNumber
|
|
159
|
+
}
|
|
160
|
+
} else if (this.type === DataItemType.select) {
|
|
161
|
+
this.value = {
|
|
162
|
+
acceptables: Array.from(this.checkedAll).map(checked => {
|
|
163
|
+
const x = checked.getAttribute('data-value')!
|
|
164
|
+
console.log(x)
|
|
165
|
+
return x
|
|
166
|
+
})
|
|
167
|
+
}
|
|
168
|
+
} else if (this.type === DataItemType.boolean) {
|
|
169
|
+
this.value = {
|
|
170
|
+
acceptables: Array.from(this.checkedAll).map(checked => {
|
|
171
|
+
const x = checked.getAttribute('data-value')! === 'true'
|
|
172
|
+
console.log(x)
|
|
173
|
+
return x
|
|
174
|
+
})
|
|
175
|
+
}
|
|
176
|
+
} else {
|
|
177
|
+
this.value = {}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import './ox-input-spc-limits.js'
|
|
2
|
+
|
|
3
|
+
import { html, TemplateResult } from 'lit'
|
|
4
|
+
import { customElement } from 'lit/decorators.js'
|
|
5
|
+
|
|
6
|
+
import { OxPropertyEditor, PropertySpec } from '@operato/property-editor'
|
|
7
|
+
|
|
8
|
+
@customElement('ox-property-editor-spc-limits')
|
|
9
|
+
export class OxPropertyEditorSpcLimits extends OxPropertyEditor {
|
|
10
|
+
editorTemplate(value: any, spec: PropertySpec): TemplateResult {
|
|
11
|
+
const { type, options, unit } = spec.property || {}
|
|
12
|
+
|
|
13
|
+
return html`
|
|
14
|
+
<ox-input-spc-limits
|
|
15
|
+
id="editor"
|
|
16
|
+
.value=${value}
|
|
17
|
+
.type=${type}
|
|
18
|
+
.unit=${unit}
|
|
19
|
+
.options=${options}
|
|
20
|
+
></ox-input-spc-limits>
|
|
21
|
+
`
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -127,6 +127,50 @@ const dataSet = {
|
|
|
127
127
|
quota: 1,
|
|
128
128
|
active: true
|
|
129
129
|
},
|
|
130
|
+
{
|
|
131
|
+
name: '라디오',
|
|
132
|
+
description: '라디오 그룹',
|
|
133
|
+
|
|
134
|
+
group: '측정데이타',
|
|
135
|
+
sequence: 5,
|
|
136
|
+
tag: 'check1',
|
|
137
|
+
type: 'radio',
|
|
138
|
+
options: {
|
|
139
|
+
options: [
|
|
140
|
+
{
|
|
141
|
+
text: '예',
|
|
142
|
+
value: 'Y'
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
text: '아니오',
|
|
146
|
+
value: 'N'
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
quota: 3,
|
|
151
|
+
active: true
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
name: '라디오2',
|
|
155
|
+
description: '라디오 그룹2',
|
|
156
|
+
sequence: 5,
|
|
157
|
+
tag: 'check2',
|
|
158
|
+
type: 'radio',
|
|
159
|
+
options: {
|
|
160
|
+
options: [
|
|
161
|
+
{
|
|
162
|
+
text: '예',
|
|
163
|
+
value: 'Y'
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
text: '아니오',
|
|
167
|
+
value: 'N'
|
|
168
|
+
}
|
|
169
|
+
]
|
|
170
|
+
},
|
|
171
|
+
quota: 1,
|
|
172
|
+
active: true
|
|
173
|
+
},
|
|
130
174
|
{
|
|
131
175
|
name: '첨부파일',
|
|
132
176
|
description: '참조 첨부 파일.',
|
|
@@ -144,6 +144,7 @@ var dataOoc = {
|
|
|
144
144
|
name: 'Data Sample Name',
|
|
145
145
|
description: 'Data Sample이 어쩌구 저쩌구 그래서 중요합니다. 당연히 그래야죠.',
|
|
146
146
|
useCase: 'CCP',
|
|
147
|
+
state: 'REVIEWED',
|
|
147
148
|
judgment: {
|
|
148
149
|
temp: {
|
|
149
150
|
ooc: true,
|
|
@@ -247,6 +248,7 @@ var dataOoc = {
|
|
|
247
248
|
name: 'shnam'
|
|
248
249
|
},
|
|
249
250
|
state: 'CORRECTED',
|
|
251
|
+
comment: '전량 폐기하였습니다',
|
|
250
252
|
timestamp: Date.now()
|
|
251
253
|
}
|
|
252
254
|
]
|
package/themes/grist-theme.css
CHANGED
|
@@ -37,7 +37,7 @@ body {
|
|
|
37
37
|
|
|
38
38
|
--grid-record-background-color: var(--theme-white-color);
|
|
39
39
|
--grid-record-odd-background-color: #f9f7f5;
|
|
40
|
-
--grid-record-padding:
|
|
40
|
+
--grid-record-padding: 0 5px 0 5px;
|
|
41
41
|
--grid-record-color: var(--secondary-color);
|
|
42
42
|
--grid-record-color-hover: var(--primary-color);
|
|
43
43
|
--grid-record-wide-fontsize: var(--fontsize-small);
|
package/translations/en.json
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"field.entry-role": "entry role",
|
|
18
18
|
"field.entry-type": "entry type",
|
|
19
19
|
"field.entry-view": "entry view",
|
|
20
|
+
"field.finalizing-function": "finalizing func.",
|
|
20
21
|
"field.hidden": "hidden",
|
|
21
22
|
"field.item": "item",
|
|
22
23
|
"field.latest-collected-at": "latest collected at",
|
package/translations/ko.json
CHANGED
package/translations/ms.json
CHANGED
|
@@ -1,77 +1,149 @@
|
|
|
1
1
|
{
|
|
2
|
-
"button.corrected": "
|
|
3
|
-
"button.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"field.
|
|
8
|
-
"field.
|
|
9
|
-
"field.
|
|
10
|
-
"field.
|
|
11
|
-
"field.
|
|
12
|
-
"field.
|
|
13
|
-
"field.
|
|
2
|
+
"button.corrected": "diperbetulkan",
|
|
3
|
+
"button.request-archive": "permintaan arkib",
|
|
4
|
+
"button.reviewed": "disemak",
|
|
5
|
+
"error.dataset not found": "Tidak dapat mencari dataSet dengan nama yang diberi({dataSetName})",
|
|
6
|
+
"error.summary not supported": "DataSet yang diberi({dataSetName}) tidak menyokong laporan untuk {period}",
|
|
7
|
+
"field.agg-function": "fungsi agregasi",
|
|
8
|
+
"field.appliance": "peralatan",
|
|
9
|
+
"field.assignees": "penugasan",
|
|
10
|
+
"field.collected-at": "dikumpulkan pada",
|
|
11
|
+
"field.corrected-at": "diperbetulkan pada",
|
|
12
|
+
"field.corrective-action": "tindakan pembetulan",
|
|
13
|
+
"field.corrector": "pembetul",
|
|
14
|
+
"field.count": "jumlah",
|
|
15
|
+
"field.count-ooc": "jumlah ooc",
|
|
16
|
+
"field.count-oos": "jumlah oos",
|
|
14
17
|
"field.data": "data",
|
|
15
|
-
"field.
|
|
16
|
-
"field.
|
|
17
|
-
"field.
|
|
18
|
-
"field.
|
|
19
|
-
"field.
|
|
18
|
+
"field.data-01": "data 1",
|
|
19
|
+
"field.data-02": "data 2",
|
|
20
|
+
"field.data-03": "data 3",
|
|
21
|
+
"field.data-04": "data 4",
|
|
22
|
+
"field.data-05": "data 5",
|
|
23
|
+
"field.data-key": "kunci data",
|
|
24
|
+
"field.data-key-set": "set kunci data",
|
|
25
|
+
"field.data-sample": "sampel data",
|
|
26
|
+
"field.data-set": "set data",
|
|
27
|
+
"field.date": "tarikh",
|
|
28
|
+
"field.device-id": "id peranti",
|
|
29
|
+
"field.download-url": "url muat turun",
|
|
30
|
+
"field.entry-role": "peranan masukan",
|
|
31
|
+
"field.entry-type": "jenis masukan",
|
|
32
|
+
"field.entry-view": "paparan masukan",
|
|
33
|
+
"field.finalizing-function": "fungsi penyempurnaan",
|
|
34
|
+
"field.hidden": "tersembunyi",
|
|
20
35
|
"field.item": "item",
|
|
21
|
-
"field.
|
|
22
|
-
"field.
|
|
23
|
-
"field.
|
|
24
|
-
"field.
|
|
25
|
-
"field.
|
|
26
|
-
"field.
|
|
27
|
-
"field.
|
|
28
|
-
"field.
|
|
29
|
-
"field.
|
|
30
|
-
"field.
|
|
31
|
-
"field.
|
|
32
|
-
"field.
|
|
33
|
-
"field.
|
|
34
|
-
"field.
|
|
35
|
-
"field.
|
|
36
|
-
"field.
|
|
37
|
-
"field.
|
|
38
|
-
"field.
|
|
39
|
-
"field.
|
|
40
|
-
"field.
|
|
36
|
+
"field.key": "kunci",
|
|
37
|
+
"field.key-01": "kunci 1",
|
|
38
|
+
"field.key-02": "kunci 2",
|
|
39
|
+
"field.key-03": "kunci 3",
|
|
40
|
+
"field.key-04": "kunci 4",
|
|
41
|
+
"field.key-05": "kunci 5",
|
|
42
|
+
"field.latest-collected-at": "terakhir dikumpulkan pada",
|
|
43
|
+
"field.monitor-type": "jenis pemantau",
|
|
44
|
+
"field.monitor-view": "paparan pemantau",
|
|
45
|
+
"field.month": "bulan",
|
|
46
|
+
"field.netmask": "topeng rangkaian",
|
|
47
|
+
"field.next-schedule": "jadual seterusnya",
|
|
48
|
+
"field.next-summary-schedule": "jadual ringkasan seterusnya",
|
|
49
|
+
"field.normal-scenario": "skenario data normal",
|
|
50
|
+
"field.ooc": "di luar had kawalan",
|
|
51
|
+
"field.oos": "di luar had kritikal",
|
|
52
|
+
"field.options": "pilihan",
|
|
53
|
+
"field.outlier-approval-line": "baris kelulusan luar biasa",
|
|
54
|
+
"field.outlier-scenario": "skenario data luar biasa",
|
|
55
|
+
"field.partition-keys": "kunci pembahagian",
|
|
56
|
+
"field.prev-schedule": "jadual sebelumnya",
|
|
57
|
+
"field.quota": "kuota sampel",
|
|
58
|
+
"field.raw-data": "data mentah",
|
|
59
|
+
"field.ref-by": "dirujuk oleh",
|
|
60
|
+
"field.report-template": "templat laporan",
|
|
61
|
+
"field.report-type": "jenis laporan",
|
|
62
|
+
"field.report-view": "paparan laporan",
|
|
63
|
+
"field.request-params": "parameter permintaan",
|
|
64
|
+
"field.requires-review": "memerlukan semakan",
|
|
65
|
+
"field.review-approval-line": "baris kelulusan",
|
|
66
|
+
"field.role": "peranan",
|
|
67
|
+
"field.serial-no": "no. siri",
|
|
68
|
+
"field.spec": "spesifikasi",
|
|
69
|
+
"field.status": "status",
|
|
70
|
+
"field.subgroup": "Nama subkumpulan",
|
|
71
|
+
"field.summary": "ringkasan",
|
|
72
|
+
"field.summary-period": "tempoh ringkasan",
|
|
73
|
+
"field.supervisory-role": "peranan pengawasan",
|
|
74
|
+
"field.t-key": "kunci terjemahan",
|
|
75
|
+
"field.tag": "nama tag",
|
|
76
|
+
"field.time-period": "tempoh masa",
|
|
41
77
|
"field.unit": "unit",
|
|
42
|
-
"field.use-case": "
|
|
43
|
-
"field.
|
|
44
|
-
"field.work-
|
|
45
|
-
"
|
|
46
|
-
"label.
|
|
47
|
-
"label.
|
|
48
|
-
"label.
|
|
49
|
-
"label.
|
|
50
|
-
"label.
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
78
|
+
"field.use-case": "kes penggunaan",
|
|
79
|
+
"field.view": "skrin",
|
|
80
|
+
"field.work-date": "tarikh kerja",
|
|
81
|
+
"field.work-shift": "shift kerja",
|
|
82
|
+
"label.acceptables": "boleh diterima",
|
|
83
|
+
"label.corrective action": "tindakan pembetulan",
|
|
84
|
+
"label.corrective instruction": "instruksi pembetulan",
|
|
85
|
+
"label.critical-limits": "had kritikal",
|
|
86
|
+
"label.data-set-type": "jenis",
|
|
87
|
+
"label.end-date": "tarikh tamat",
|
|
88
|
+
"label.group-by data-keys": "kumpulkan mengikut setiap data-keys",
|
|
89
|
+
"label.maximum value": "nilai maksimum",
|
|
90
|
+
"label.minimum value": "nilai minimum",
|
|
91
|
+
"label.pass-limits": "had lulus",
|
|
92
|
+
"label.period-12-months": "12 bulan",
|
|
93
|
+
"label.period-30-days": "30 hari",
|
|
94
|
+
"label.period-this-month": "bulan ini",
|
|
95
|
+
"label.period-this-year": "tahun ini",
|
|
96
|
+
"label.period-today": "hari ini",
|
|
97
|
+
"label.start-date": "tarikh mula",
|
|
98
|
+
"label.state-corrected": "diperbetulkan",
|
|
99
|
+
"label.state-issued": "dikeluarkan",
|
|
100
|
+
"label.state-reviewed": "disemak",
|
|
101
|
+
"label.target-limits": "had sasaran",
|
|
102
|
+
"text.automatically collected": "dikumpulkan secara automatik",
|
|
103
|
+
"text.corrective action placeholder": "Sila masukkan butiran pelaksanaan tindakan pembetulan dan pencegahan",
|
|
104
|
+
"text.corrective instruction placeholder": "Sila masukkan arahan tindakan pembetulan dan pencegahan",
|
|
105
|
+
"text.data ooc updated successfully": "data ooc dikemas kini dengan jayanya",
|
|
106
|
+
"text.data sample created successfully": "sampel data dicipta dengan jayanya",
|
|
107
|
+
"text.data-archive request failed": "permintaan arkib data gagal",
|
|
108
|
+
"text.data-archive waits": "Ia akan mengambil masa beberapa minit, Anda boleh mencari mesej push bila siap",
|
|
109
|
+
"text.manually collected": "dikumpulkan secara manual",
|
|
110
|
+
"text.presigned_url_created": "url arkib yang ditandatangani sebelumnya dicipta",
|
|
111
|
+
"title.data collecting editor": "editor pengumpulan data",
|
|
112
|
+
"title.data collecting schedule (un)register": "(tidak) mendaftar jadual pengumpulan data",
|
|
113
|
+
"title.data-archive downloads ready": "muat turun arkib data sedia",
|
|
114
|
+
"title.data-archive list": "senarai arkib data",
|
|
115
|
+
"title.data-archive request failed": "gagal permintaan arkib data",
|
|
116
|
+
"title.data-archive request popup": "permintaan arkib data",
|
|
117
|
+
"title.data-entry list": "senarai masukan data",
|
|
118
|
+
"title.data-entry-form": "borang masukan data",
|
|
119
|
+
"title.data-item list": "senarai item data",
|
|
120
|
+
"title.data-key-item list": "senarai item kunci data",
|
|
121
|
+
"title.data-key-set list": "senarai set kunci data",
|
|
122
|
+
"title.data-monitor-view": "paparan pemantau data",
|
|
123
|
+
"title.data-ooc list": "senarai data OOC",
|
|
124
|
+
"title.data-ooc view": "paparan data OOC",
|
|
125
|
+
"title.data-report list": "senarai laporan data",
|
|
126
|
+
"title.data-report samples": "contoh laporan data",
|
|
127
|
+
"title.data-report-view": "paparan laporan data",
|
|
128
|
+
"title.data-sample list": "senarai sampel data",
|
|
129
|
+
"title.data-sample search": "pencarian sampel data",
|
|
130
|
+
"title.data-sample view": "paparan sampel data",
|
|
131
|
+
"title.data-sensor list": "senarai sensor data",
|
|
132
|
+
"title.data-set list": "senarai set data",
|
|
133
|
+
"title.data-set model": "model set data",
|
|
134
|
+
"title.data-summary list": "senarai ringkasan data",
|
|
135
|
+
"title.data-summary period": "tempoh ringkasan data",
|
|
136
|
+
"title.data-summary search": "pencarian ringkasan data",
|
|
137
|
+
"title.data-summary view": "paparan ringkasan data",
|
|
138
|
+
"title.edit code": "edit kod",
|
|
139
|
+
"title.edit data-key items": "edit item kunci data",
|
|
140
|
+
"title.edit duration": "edit tempoh",
|
|
74
141
|
"title.edit hashtag": "edit hashtag",
|
|
75
142
|
"title.edit json": "edit json",
|
|
76
|
-
"title.
|
|
143
|
+
"title.open data sample report page": "buka laman laporan sampel data",
|
|
144
|
+
"title.open data sample search page": "buka laman pencarian sampel data",
|
|
145
|
+
"title.open data sample view": "buka paparan sampel data",
|
|
146
|
+
"title.open data summary view": "buka paparan ringkasan data",
|
|
147
|
+
"title.ready": "sedia",
|
|
148
|
+
"title.view detail ooc data": "lihat butiran data ooc"
|
|
77
149
|
}
|