@things-factory/spc 7.0.0-alpha.18

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 (90) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/client/bootstrap.ts +1 -0
  3. package/client/index.ts +0 -0
  4. package/client/pages/spc-chart-page.ts +322 -0
  5. package/client/route.ts +7 -0
  6. package/client/tsconfig.json +13 -0
  7. package/dist-client/bootstrap.d.ts +1 -0
  8. package/dist-client/bootstrap.js +2 -0
  9. package/dist-client/bootstrap.js.map +1 -0
  10. package/dist-client/index.d.ts +0 -0
  11. package/dist-client/index.js +2 -0
  12. package/dist-client/index.js.map +1 -0
  13. package/dist-client/pages/spc-chart-page.d.ts +44 -0
  14. package/dist-client/pages/spc-chart-page.js +309 -0
  15. package/dist-client/pages/spc-chart-page.js.map +1 -0
  16. package/dist-client/route.d.ts +1 -0
  17. package/dist-client/route.js +8 -0
  18. package/dist-client/route.js.map +1 -0
  19. package/dist-client/tsconfig.tsbuildinfo +1 -0
  20. package/dist-server/controllers/data-use-case-spc.js +40 -0
  21. package/dist-server/controllers/data-use-case-spc.js.map +1 -0
  22. package/dist-server/controllers/index.js +5 -0
  23. package/dist-server/controllers/index.js.map +1 -0
  24. package/dist-server/controllers/rules/cp-cpk.js +21 -0
  25. package/dist-server/controllers/rules/cp-cpk.js.map +1 -0
  26. package/dist-server/controllers/spc-chart/c.js +26 -0
  27. package/dist-server/controllers/spc-chart/c.js.map +1 -0
  28. package/dist-server/controllers/spc-chart/histogram.js +26 -0
  29. package/dist-server/controllers/spc-chart/histogram.js.map +1 -0
  30. package/dist-server/controllers/spc-chart/i.js +26 -0
  31. package/dist-server/controllers/spc-chart/i.js.map +1 -0
  32. package/dist-server/controllers/spc-chart/index.js +172 -0
  33. package/dist-server/controllers/spc-chart/index.js.map +1 -0
  34. package/dist-server/controllers/spc-chart/mr.js +25 -0
  35. package/dist-server/controllers/spc-chart/mr.js.map +1 -0
  36. package/dist-server/controllers/spc-chart/np.js +26 -0
  37. package/dist-server/controllers/spc-chart/np.js.map +1 -0
  38. package/dist-server/controllers/spc-chart/p.js +25 -0
  39. package/dist-server/controllers/spc-chart/p.js.map +1 -0
  40. package/dist-server/controllers/spc-chart/pareto.js +24 -0
  41. package/dist-server/controllers/spc-chart/pareto.js.map +1 -0
  42. package/dist-server/controllers/spc-chart/r.js +31 -0
  43. package/dist-server/controllers/spc-chart/r.js.map +1 -0
  44. package/dist-server/controllers/spc-chart/u.js +27 -0
  45. package/dist-server/controllers/spc-chart/u.js.map +1 -0
  46. package/dist-server/controllers/spc-chart/x-bar-r.js +45 -0
  47. package/dist-server/controllers/spc-chart/x-bar-r.js.map +1 -0
  48. package/dist-server/controllers/spc-chart/x-bar.js +45 -0
  49. package/dist-server/controllers/spc-chart/x-bar.js.map +1 -0
  50. package/dist-server/index.js +11 -0
  51. package/dist-server/index.js.map +1 -0
  52. package/dist-server/service/index.js +21 -0
  53. package/dist-server/service/index.js.map +1 -0
  54. package/dist-server/service/spc-chart/index.js +8 -0
  55. package/dist-server/service/spc-chart/index.js.map +1 -0
  56. package/dist-server/service/spc-chart/spc-chart-query.js +99 -0
  57. package/dist-server/service/spc-chart/spc-chart-query.js.map +1 -0
  58. package/dist-server/service/spc-chart/spc-chart-type.js +134 -0
  59. package/dist-server/service/spc-chart/spc-chart-type.js.map +1 -0
  60. package/dist-server/tsconfig.tsbuildinfo +1 -0
  61. package/helps/spc/spc-chart-concept.md +59 -0
  62. package/helps/spc/spc-chart.md +68 -0
  63. package/package.json +37 -0
  64. package/server/controllers/data-use-case-spc.ts +44 -0
  65. package/server/controllers/index.ts +1 -0
  66. package/server/controllers/rules/cp-cpk.ts +29 -0
  67. package/server/controllers/spc-chart/c.ts +31 -0
  68. package/server/controllers/spc-chart/histogram.ts +38 -0
  69. package/server/controllers/spc-chart/i.ts +31 -0
  70. package/server/controllers/spc-chart/index.ts +171 -0
  71. package/server/controllers/spc-chart/mr.ts +30 -0
  72. package/server/controllers/spc-chart/np.ts +30 -0
  73. package/server/controllers/spc-chart/p.ts +29 -0
  74. package/server/controllers/spc-chart/pareto.ts +32 -0
  75. package/server/controllers/spc-chart/r.ts +34 -0
  76. package/server/controllers/spc-chart/u.ts +31 -0
  77. package/server/controllers/spc-chart/x-bar-r.ts +53 -0
  78. package/server/controllers/spc-chart/x-bar.ts +53 -0
  79. package/server/index.ts +10 -0
  80. package/server/service/index.ts +21 -0
  81. package/server/service/spc-chart/index.ts +5 -0
  82. package/server/service/spc-chart/spc-chart-query.ts +102 -0
  83. package/server/service/spc-chart/spc-chart-type.ts +105 -0
  84. package/server/tsconfig.json +10 -0
  85. package/things-factory.config.js +11 -0
  86. package/translations/en.json +3 -0
  87. package/translations/ja.json +3 -0
  88. package/translations/ko.json +3 -0
  89. package/translations/ms.json +3 -0
  90. package/translations/zh.json +3 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
+ and adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
+
8
+ <!-- ## [Unreleased] -->
@@ -0,0 +1 @@
1
+ export default function bootstrap() {}
File without changes
@@ -0,0 +1,322 @@
1
+ import '@operato/app/filters-form.js'
2
+ import '@operato/spc/ox-chart-xbar-r.js'
3
+ import '@operato/spc/ox-chart-i-mr.js'
4
+ import '@operato/spc/ox-chart-u.js'
5
+ import '@operato/spc/ox-chart-c.js'
6
+ import '@operato/spc/ox-chart-p.js'
7
+ import '@operato/spc/ox-chart-np.js'
8
+
9
+ import { ScrollbarStyles, CommonHeaderStyles } from '@operato/styles'
10
+ import { PageView, store } from '@operato/shell'
11
+ import { css, html, PropertyValues, nothing } from 'lit'
12
+ import { customElement, property, query, state } from 'lit/decorators.js'
13
+ import { client } from '@operato/graphql'
14
+ import { i18next, localize } from '@operato/i18n'
15
+ import { isMobileDevice } from '@operato/utils'
16
+ import { FilterConfig, FilterValue, OxFiltersFormBase } from '@operato/form'
17
+
18
+ import { connect } from 'pwa-helpers/connect-mixin'
19
+ import gql from 'graphql-tag'
20
+
21
+ function formatDate(timestamp: number) {
22
+ const date = new Date(timestamp)
23
+ const year = date.getFullYear()
24
+ const month = String(date.getMonth() + 1).padStart(2, '0') // 월은 0부터 시작하므로 1을 더함
25
+ const day = String(date.getDate()).padStart(2, '0')
26
+ const hours = String(date.getHours()).padStart(2, '0')
27
+ const minutes = String(date.getMinutes()).padStart(2, '0')
28
+ const seconds = String(date.getSeconds()).padStart(2, '0')
29
+
30
+ return `${month}-${day} ${hours}:${minutes}`
31
+ }
32
+
33
+ @customElement('spc-chart-page')
34
+ export class SpcChartPage extends connect(store)(localize(i18next)(PageView)) {
35
+ static styles = [
36
+ ScrollbarStyles,
37
+ CommonHeaderStyles,
38
+ css`
39
+ :host {
40
+ display: flex;
41
+ flex-direction: column;
42
+
43
+ width: 100%;
44
+ }
45
+
46
+ .chart {
47
+ flex: 1;
48
+ padding: var(--padding-default);
49
+ }
50
+ `
51
+ ]
52
+
53
+ @state() dataSetId?: string = ''
54
+ @state() variable?: string = ''
55
+ @state() chartType?: string = ''
56
+ @state() spcChart: any
57
+ @state() filtersValue?: FilterValue[]
58
+ @state() variables: { display: string; value: string }[] = []
59
+
60
+ @query('ox-filters-form-base') formBase!: OxFiltersFormBase
61
+
62
+ private get filtersConfig(): FilterConfig[] {
63
+ return [
64
+ {
65
+ name: 'dataSetId',
66
+ type: 'resource-id',
67
+ label: 'dataset',
68
+ operator: 'eq',
69
+ options: {
70
+ queryName: 'dataSets'
71
+ },
72
+ onchange: (value, formBase) => {
73
+ requestAnimationFrame(async () => {
74
+ const variableFilter = formBase.getFieldByName('variable') as HTMLInputElement
75
+ variableFilter.value = ''
76
+
77
+ this.variables = [
78
+ {
79
+ display: '',
80
+ value: ''
81
+ },
82
+ ...(await this.fetchVariables(value as string))
83
+ ]
84
+ })
85
+
86
+ this.dataSetId = value
87
+
88
+ return false /* whether filters-change event triggered or not */
89
+ }
90
+ },
91
+ {
92
+ name: 'variable',
93
+ type: 'select',
94
+ label: 'variable',
95
+ operator: 'eq',
96
+ options: () => this.variables,
97
+ onchange: value => (this.variable = value)
98
+ },
99
+ {
100
+ name: 'chartType',
101
+ type: 'select',
102
+ label: 'chart',
103
+ operator: 'eq',
104
+ options: ['Xbar-R', 'I-MR', 'C', 'U', 'P', 'NP'],
105
+ onchange: value => (this.chartType = value)
106
+ },
107
+ {
108
+ name: 'dateRange',
109
+ type: 'date',
110
+ label: 'date',
111
+ operator: 'between',
112
+ value: [
113
+ {
114
+ name: 'today',
115
+ params: {
116
+ relativeDays: -30
117
+ }
118
+ },
119
+ {
120
+ name: 'today',
121
+ params: {
122
+ relativeDays: -1
123
+ }
124
+ }
125
+ ]
126
+ }
127
+ ]
128
+ }
129
+
130
+ get context() {
131
+ return {
132
+ title: i18next.t('title.spc-chart'),
133
+ help: 'spc/spc-chart'
134
+ }
135
+ }
136
+
137
+ render() {
138
+ const { dataSet = {}, variable, charts = [] } = this.spcChart || {}
139
+
140
+ var plotters: { chart: string; data: any[] }[] = []
141
+
142
+ switch (this.chartType) {
143
+ case 'Xbar-R':
144
+ const xbar = charts.find(r => r.chartType == 'Xbar')
145
+ const r = charts.find(r => r.chartType == 'R')
146
+
147
+ plotters.push({ chart: 'xbar-r', data: xbar?.plots ?? [] })
148
+ break
149
+
150
+ case 'I-MR':
151
+ const i = charts.find(r => r.chartType == 'I')
152
+ const mr = charts.find(r => r.chartType == 'MR')
153
+
154
+ plotters.push({ chart: 'i-mr', data: i?.plots ?? [] })
155
+ break
156
+
157
+ case 'P':
158
+ const p = charts.find(r => r.chartType == 'P')
159
+ plotters.push({ chart: 'p', data: p?.plots ?? [] })
160
+ break
161
+
162
+ case 'NP':
163
+ const np = charts.find(r => r.chartType == 'NP')
164
+ plotters.push({ chart: 'np', data: np?.plots ?? [] })
165
+ break
166
+
167
+ case 'C':
168
+ const c = charts.find(r => r.chartType == 'C')
169
+ plotters.push({ chart: 'c', data: c?.plots ?? [] })
170
+ break
171
+
172
+ case 'U':
173
+ const u = charts.find(r => r.chartType == 'U')
174
+ plotters.push({ chart: 'u', data: u?.plots ?? [] })
175
+
176
+ default:
177
+ }
178
+
179
+ plotters = plotters.map(plotter => {
180
+ return {
181
+ ...plotter,
182
+ data: plotter.data.map(plot => {
183
+ return {
184
+ ...plot,
185
+ x: formatDate(Number(plot.x))
186
+ }
187
+ })
188
+ }
189
+ })
190
+
191
+ return html`
192
+ <div class="header">
193
+ <div class="title"><mwc-icon>summarize</mwc-icon>${i18next.t('title.spc-chart')}</div>
194
+ <ox-filters-form-base
195
+ class="filters"
196
+ .value=${this.filtersValue}
197
+ .filters=${this.filtersConfig}
198
+ ?url-params-sensitive=${false}
199
+ @filters-change=${(e: CustomEvent) => {
200
+ this.fetchSpcChart()
201
+ }}
202
+ >
203
+ </ox-filters-form-base>
204
+ </div>
205
+
206
+ ${plotters.map(({ chart, data }) =>
207
+ chart == 'xbar-r'
208
+ ? html` <ox-chart-xbar-r class="chart" .plots=${data}></ox-chart-xbar-r> `
209
+ : chart == 'i-mr'
210
+ ? html` <ox-chart-i-mr class="chart" .plots=${data}></ox-chart-i-mr> `
211
+ : chart == 'u'
212
+ ? html` <ox-chart-u class="chart" .plots=${data}></ox-chart-u> `
213
+ : chart == 'c'
214
+ ? html` <ox-chart-c class="chart" .plots=${data}></ox-chart-c> `
215
+ : chart == 'p'
216
+ ? html` <ox-chart-p class="chart" .plots=${data}></ox-chart-p> `
217
+ : chart == 'np'
218
+ ? html` <ox-chart-np class="chart" .plots=${data}></ox-chart-np> `
219
+ : nothing
220
+ )}
221
+ `
222
+ }
223
+
224
+ updated(changes: PropertyValues<this>) {
225
+ if (!changes.has('spcChart')) {
226
+ this.fetchSpcChart()
227
+ }
228
+ }
229
+
230
+ async pageUpdated(changes: any, lifecycle: any) {
231
+ if (this.active) {
232
+ this.dataSetId = lifecycle.resourceId
233
+ }
234
+ }
235
+
236
+ async fetchSpcChart() {
237
+ const {
238
+ dataSetId,
239
+ dateRange: [fromDate, toDate],
240
+ variable,
241
+ chartType
242
+ } = (await this.formBase.getQueryFilters()).reduce((sum, field) => {
243
+ sum[field.name] = field.value
244
+ return sum
245
+ }, {} as any)
246
+
247
+ if (!(dataSetId && fromDate && toDate && variable && chartType)) {
248
+ return
249
+ }
250
+
251
+ const response = await client.query({
252
+ query: gql`
253
+ query spcChart($dataSetId: String!, $variable: String!, $chartType: String!, $fromDate: String!, $toDate: String!) {
254
+ spcChart(dataSetId: $dataSetId, variable: $variable, chartType: $chartType, fromDate: $fromDate, toDate: $toDate) {
255
+ dataSet {
256
+ id
257
+ name
258
+ }
259
+ variable
260
+ charts {
261
+ chartType
262
+ controlLimits {
263
+ ucl
264
+ lcl
265
+ cl
266
+ }
267
+ specLimits {
268
+ usl
269
+ lsl
270
+ target
271
+ }
272
+ plots {
273
+ x
274
+ values
275
+ xbar
276
+ r
277
+ i
278
+ mr
279
+ n
280
+ defects
281
+ }
282
+ }
283
+ }
284
+ }
285
+ `,
286
+ variables: {
287
+ dataSetId,
288
+ variable,
289
+ chartType,
290
+ fromDate,
291
+ toDate
292
+ }
293
+ })
294
+
295
+ this.spcChart = response.data.spcChart
296
+ }
297
+
298
+ async fetchVariables(id: string): Promise<{ display: string; value: string }[]> {
299
+ const response = await client.query({
300
+ query: gql`
301
+ query dataSet($id: String!) {
302
+ dataSet(id: $id) {
303
+ dataItems {
304
+ name
305
+ tag
306
+ }
307
+ }
308
+ }
309
+ `,
310
+ variables: {
311
+ id
312
+ }
313
+ })
314
+
315
+ return response.data.dataSet.dataItems.map(dataItem => {
316
+ return {
317
+ display: dataItem.name,
318
+ value: dataItem.name
319
+ }
320
+ })
321
+ }
322
+ }
@@ -0,0 +1,7 @@
1
+ export default function route(page) {
2
+ switch (page) {
3
+ case 'spc-chart':
4
+ import('./pages/spc-chart-page')
5
+ return page
6
+ }
7
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "extends": "../../tsconfig-base.json",
3
+ "compilerOptions": {
4
+ "experimentalDecorators": true,
5
+ "skipLibCheck": true,
6
+ "strict": true,
7
+ "declaration": true,
8
+ "module": "esnext",
9
+ "outDir": "../dist-client",
10
+ "baseUrl": "./"
11
+ },
12
+ "include": ["./**/*"]
13
+ }
@@ -0,0 +1 @@
1
+ export default function bootstrap(): void;
@@ -0,0 +1,2 @@
1
+ export default function bootstrap() { }
2
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../client/bootstrap.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,SAAS,KAAI,CAAC","sourcesContent":["export default function bootstrap() {}\n"]}
File without changes
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"","sourcesContent":[""]}
@@ -0,0 +1,44 @@
1
+ import '@operato/app/filters-form.js';
2
+ import '@operato/spc/ox-chart-xbar-r.js';
3
+ import '@operato/spc/ox-chart-i-mr.js';
4
+ import '@operato/spc/ox-chart-u.js';
5
+ import '@operato/spc/ox-chart-c.js';
6
+ import '@operato/spc/ox-chart-p.js';
7
+ import '@operato/spc/ox-chart-np.js';
8
+ import { PageView } from '@operato/shell';
9
+ import { PropertyValues } from 'lit';
10
+ import { FilterValue, OxFiltersFormBase } from '@operato/form';
11
+ declare const SpcChartPage_base: (new (...args: any[]) => {
12
+ _storeUnsubscribe: import("redux").Unsubscribe;
13
+ connectedCallback(): void;
14
+ disconnectedCallback(): void;
15
+ stateChanged(_state: unknown): void;
16
+ readonly isConnected: boolean;
17
+ }) & (new (...args: any[]) => import("lit").LitElement) & typeof PageView;
18
+ export declare class SpcChartPage extends SpcChartPage_base {
19
+ static styles: import("lit").CSSResult[];
20
+ dataSetId?: string;
21
+ variable?: string;
22
+ chartType?: string;
23
+ spcChart: any;
24
+ filtersValue?: FilterValue[];
25
+ variables: {
26
+ display: string;
27
+ value: string;
28
+ }[];
29
+ formBase: OxFiltersFormBase;
30
+ private get filtersConfig();
31
+ get context(): {
32
+ title: string;
33
+ help: string;
34
+ };
35
+ render(): import("lit-html").TemplateResult<1>;
36
+ updated(changes: PropertyValues<this>): void;
37
+ pageUpdated(changes: any, lifecycle: any): Promise<void>;
38
+ fetchSpcChart(): Promise<void>;
39
+ fetchVariables(id: string): Promise<{
40
+ display: string;
41
+ value: string;
42
+ }[]>;
43
+ }
44
+ export {};