@things-factory/spc 7.0.0-alpha.6 → 7.0.0-alpha.7

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 (81) hide show
  1. package/client/pages/spc-chart-page.ts +251 -47
  2. package/dist-client/pages/spc-chart-page.d.ts +21 -3
  3. package/dist-client/pages/spc-chart-page.js +234 -46
  4. package/dist-client/pages/spc-chart-page.js.map +1 -1
  5. package/dist-client/tsconfig.tsbuildinfo +1 -1
  6. package/dist-server/controllers/rules/cp-cpk.js +21 -0
  7. package/dist-server/controllers/rules/cp-cpk.js.map +1 -0
  8. package/dist-server/controllers/spc-chart/c.js +26 -0
  9. package/dist-server/controllers/spc-chart/c.js.map +1 -0
  10. package/dist-server/controllers/{spc-/bchart → spc-chart}/histogram.js +1 -2
  11. package/dist-server/controllers/spc-chart/histogram.js.map +1 -0
  12. package/dist-server/controllers/spc-chart/i.js +26 -0
  13. package/dist-server/controllers/spc-chart/i.js.map +1 -0
  14. package/dist-server/controllers/{spc-/bchart → spc-chart}/index.js +17 -17
  15. package/dist-server/controllers/spc-chart/index.js.map +1 -0
  16. package/dist-server/controllers/{spc-/bchart → spc-chart}/mr.js +12 -11
  17. package/dist-server/controllers/spc-chart/mr.js.map +1 -0
  18. package/dist-server/controllers/spc-chart/np.js +26 -0
  19. package/dist-server/controllers/spc-chart/np.js.map +1 -0
  20. package/dist-server/controllers/spc-chart/p.js +25 -0
  21. package/dist-server/controllers/spc-chart/p.js.map +1 -0
  22. package/dist-server/controllers/{spc-/bchart → spc-chart}/pareto.js +1 -2
  23. package/dist-server/controllers/spc-chart/pareto.js.map +1 -0
  24. package/dist-server/controllers/{spc-/bchart → spc-chart}/r.js +15 -11
  25. package/dist-server/controllers/spc-chart/r.js.map +1 -0
  26. package/dist-server/controllers/{spc-/bchart → spc-chart}/u.js +14 -11
  27. package/dist-server/controllers/spc-chart/u.js.map +1 -0
  28. package/dist-server/controllers/spc-chart/x-bar-r.js +45 -0
  29. package/dist-server/controllers/spc-chart/x-bar-r.js.map +1 -0
  30. package/dist-server/controllers/spc-chart/x-bar.js +45 -0
  31. package/dist-server/controllers/spc-chart/x-bar.js.map +1 -0
  32. package/dist-server/service/spc-chart/spc-chart-query.js +76 -175
  33. package/dist-server/service/spc-chart/spc-chart-query.js.map +1 -1
  34. package/dist-server/service/spc-chart/spc-chart-type.js +71 -85
  35. package/dist-server/service/spc-chart/spc-chart-type.js.map +1 -1
  36. package/dist-server/tsconfig.tsbuildinfo +1 -1
  37. package/package.json +5 -4
  38. package/server/controllers/rules/cp-cpk.ts +29 -0
  39. package/server/controllers/spc-chart/c.ts +31 -0
  40. package/server/controllers/{spc-/bchart → spc-chart}/histogram.ts +1 -3
  41. package/server/controllers/spc-chart/i.ts +31 -0
  42. package/server/controllers/{spc-/bchart → spc-chart}/index.ts +17 -17
  43. package/server/controllers/spc-chart/mr.ts +30 -0
  44. package/server/controllers/spc-chart/np.ts +30 -0
  45. package/server/controllers/spc-chart/p.ts +29 -0
  46. package/server/controllers/{spc-/bchart → spc-chart}/pareto.ts +1 -3
  47. package/server/controllers/spc-chart/r.ts +34 -0
  48. package/server/controllers/spc-chart/u.ts +31 -0
  49. package/server/controllers/spc-chart/x-bar-r.ts +53 -0
  50. package/server/controllers/spc-chart/x-bar.ts +53 -0
  51. package/server/service/spc-chart/spc-chart-query.ts +87 -177
  52. package/server/service/spc-chart/spc-chart-type.ts +57 -55
  53. package/translations/en.json +3 -1
  54. package/translations/ja.json +3 -1
  55. package/translations/ko.json +3 -1
  56. package/translations/ms.json +3 -1
  57. package/translations/zh.json +3 -1
  58. package/dist-server/controllers/spc-/bchart/c.js +0 -21
  59. package/dist-server/controllers/spc-/bchart/c.js.map +0 -1
  60. package/dist-server/controllers/spc-/bchart/histogram.js.map +0 -1
  61. package/dist-server/controllers/spc-/bchart/i.js +0 -23
  62. package/dist-server/controllers/spc-/bchart/i.js.map +0 -1
  63. package/dist-server/controllers/spc-/bchart/index.js.map +0 -1
  64. package/dist-server/controllers/spc-/bchart/mr.js.map +0 -1
  65. package/dist-server/controllers/spc-/bchart/np.js +0 -23
  66. package/dist-server/controllers/spc-/bchart/np.js.map +0 -1
  67. package/dist-server/controllers/spc-/bchart/p.js +0 -22
  68. package/dist-server/controllers/spc-/bchart/p.js.map +0 -1
  69. package/dist-server/controllers/spc-/bchart/pareto.js.map +0 -1
  70. package/dist-server/controllers/spc-/bchart/r.js.map +0 -1
  71. package/dist-server/controllers/spc-/bchart/u.js.map +0 -1
  72. package/dist-server/controllers/spc-/bchart/x-bar.js +0 -50
  73. package/dist-server/controllers/spc-/bchart/x-bar.js.map +0 -1
  74. package/server/controllers/spc-/bchart/c.ts +0 -31
  75. package/server/controllers/spc-/bchart/i.ts +0 -35
  76. package/server/controllers/spc-/bchart/mr.ts +0 -37
  77. package/server/controllers/spc-/bchart/np.ts +0 -35
  78. package/server/controllers/spc-/bchart/p.ts +0 -34
  79. package/server/controllers/spc-/bchart/r.ts +0 -40
  80. package/server/controllers/spc-/bchart/u.ts +0 -36
  81. package/server/controllers/spc-/bchart/x-bar.ts +0 -70
@@ -1,15 +1,102 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import '@operato/spc/ox-chart-xbar.js';
3
- import '@operato/spc/ox-chart-r.js';
4
- import { ScrollbarStyles } from '@operato/styles';
2
+ import '@operato/app/filters-form.js';
3
+ import '@operato/spc/ox-chart-xbar-r.js';
4
+ import '@operato/spc/ox-chart-i-mr.js';
5
+ import '@operato/spc/ox-chart-u.js';
6
+ import '@operato/spc/ox-chart-c.js';
7
+ import '@operato/spc/ox-chart-p.js';
8
+ import '@operato/spc/ox-chart-np.js';
9
+ import { ScrollbarStyles, CommonHeaderStyles } from '@operato/styles';
5
10
  import { PageView, store } from '@operato/shell';
6
- import { css, html } from 'lit';
7
- import { customElement, state } from 'lit/decorators.js';
11
+ import { css, html, nothing } from 'lit';
12
+ import { customElement, query, state } from 'lit/decorators.js';
8
13
  import { client } from '@operato/graphql';
9
14
  import { i18next, localize } from '@operato/i18n';
15
+ import { OxFiltersFormBase } from '@operato/form';
10
16
  import { connect } from 'pwa-helpers/connect-mixin';
11
17
  import gql from 'graphql-tag';
18
+ function formatDate(timestamp) {
19
+ const date = new Date(timestamp);
20
+ const year = date.getFullYear();
21
+ const month = String(date.getMonth() + 1).padStart(2, '0'); // 월은 0부터 시작하므로 1을 더함
22
+ const day = String(date.getDate()).padStart(2, '0');
23
+ const hours = String(date.getHours()).padStart(2, '0');
24
+ const minutes = String(date.getMinutes()).padStart(2, '0');
25
+ const seconds = String(date.getSeconds()).padStart(2, '0');
26
+ return `${month}-${day} ${hours}:${minutes}`;
27
+ }
12
28
  let SpcChartPage = class SpcChartPage extends connect(store)(localize(i18next)(PageView)) {
29
+ constructor() {
30
+ super(...arguments);
31
+ this.dataSetId = '';
32
+ this.variable = '';
33
+ this.chartType = '';
34
+ this.variables = [];
35
+ }
36
+ get filtersConfig() {
37
+ return [
38
+ {
39
+ name: 'dataSetId',
40
+ type: 'resource-id',
41
+ label: 'dataset',
42
+ operator: 'eq',
43
+ options: {
44
+ queryName: 'dataSets'
45
+ },
46
+ onchange: (value, formBase) => {
47
+ requestAnimationFrame(async () => {
48
+ const variableFilter = formBase.getFieldByName('variable');
49
+ variableFilter.value = '';
50
+ this.variables = [
51
+ {
52
+ display: '',
53
+ value: ''
54
+ },
55
+ ...(await this.fetchVariables(value))
56
+ ];
57
+ });
58
+ this.dataSetId = value;
59
+ return false; /* whether filters-change event triggered or not */
60
+ }
61
+ },
62
+ {
63
+ name: 'variable',
64
+ type: 'select',
65
+ label: 'variable',
66
+ operator: 'eq',
67
+ options: () => this.variables,
68
+ onchange: value => (this.variable = value)
69
+ },
70
+ {
71
+ name: 'chartType',
72
+ type: 'select',
73
+ label: 'chart',
74
+ operator: 'eq',
75
+ options: ['Xbar-R', 'I-MR', 'C', 'U', 'P', 'NP'],
76
+ onchange: value => (this.chartType = value)
77
+ },
78
+ {
79
+ name: 'dateRange',
80
+ type: 'date',
81
+ label: 'date',
82
+ operator: 'between',
83
+ value: [
84
+ {
85
+ name: 'today',
86
+ params: {
87
+ relativeDays: -30
88
+ }
89
+ },
90
+ {
91
+ name: 'today',
92
+ params: {
93
+ relativeDays: -1
94
+ }
95
+ }
96
+ ]
97
+ }
98
+ ];
99
+ }
13
100
  get context() {
14
101
  return {
15
102
  title: i18next.t('title.spc-chart'),
@@ -17,14 +104,75 @@ let SpcChartPage = class SpcChartPage extends connect(store)(localize(i18next)(P
17
104
  };
18
105
  }
19
106
  render() {
107
+ var _a, _b, _c, _d, _e, _f;
108
+ const { dataSet = {}, variable, charts = [] } = this.spcChart || {};
109
+ var plotters = [];
110
+ switch (this.chartType) {
111
+ case 'Xbar-R':
112
+ const xbar = charts.find(r => r.chartType == 'Xbar');
113
+ const r = charts.find(r => r.chartType == 'R');
114
+ plotters.push({ chart: 'xbar-r', data: (_a = xbar === null || xbar === void 0 ? void 0 : xbar.plots) !== null && _a !== void 0 ? _a : [] });
115
+ break;
116
+ case 'I-MR':
117
+ const i = charts.find(r => r.chartType == 'I');
118
+ const mr = charts.find(r => r.chartType == 'MR');
119
+ plotters.push({ chart: 'i-mr', data: (_b = i === null || i === void 0 ? void 0 : i.plots) !== null && _b !== void 0 ? _b : [] });
120
+ break;
121
+ case 'P':
122
+ const p = charts.find(r => r.chartType == 'P');
123
+ plotters.push({ chart: 'p', data: (_c = p === null || p === void 0 ? void 0 : p.plots) !== null && _c !== void 0 ? _c : [] });
124
+ break;
125
+ case 'NP':
126
+ const np = charts.find(r => r.chartType == 'NP');
127
+ plotters.push({ chart: 'np', data: (_d = np === null || np === void 0 ? void 0 : np.plots) !== null && _d !== void 0 ? _d : [] });
128
+ break;
129
+ case 'C':
130
+ const c = charts.find(r => r.chartType == 'C');
131
+ plotters.push({ chart: 'c', data: (_e = c === null || c === void 0 ? void 0 : c.plots) !== null && _e !== void 0 ? _e : [] });
132
+ break;
133
+ case 'U':
134
+ const u = charts.find(r => r.chartType == 'U');
135
+ plotters.push({ chart: 'u', data: (_f = u === null || u === void 0 ? void 0 : u.plots) !== null && _f !== void 0 ? _f : [] });
136
+ default:
137
+ }
138
+ plotters = plotters.map(plotter => {
139
+ return Object.assign(Object.assign({}, plotter), { data: plotter.data.map(plot => {
140
+ return Object.assign(Object.assign({}, plot), { x: formatDate(Number(plot.x)) });
141
+ }) });
142
+ });
20
143
  return html `
21
- <ox-chart-xbar class="chart"></ox-chart-xbar>
22
- <ox-chart-r class="chart"></ox-chart-r>
144
+ <div class="header">
145
+ <div class="title"><mwc-icon>summarize</mwc-icon>${i18next.t('title.spc-chart')}</div>
146
+ <ox-filters-form-base
147
+ class="filters"
148
+ .value=${this.filtersValue}
149
+ .filters=${this.filtersConfig}
150
+ ?url-params-sensitive=${false}
151
+ @filters-change=${(e) => {
152
+ this.fetchSpcChart();
153
+ }}
154
+ >
155
+ </ox-filters-form-base>
156
+ </div>
157
+
158
+ ${plotters.map(({ chart, data }) => chart == 'xbar-r'
159
+ ? html ` <ox-chart-xbar-r class="chart" .plots=${data}></ox-chart-xbar-r> `
160
+ : chart == 'i-mr'
161
+ ? html ` <ox-chart-i-mr class="chart" .plots=${data}></ox-chart-i-mr> `
162
+ : chart == 'u'
163
+ ? html ` <ox-chart-u class="chart" .plots=${data}></ox-chart-u> `
164
+ : chart == 'c'
165
+ ? html ` <ox-chart-c class="chart" .plots=${data}></ox-chart-c> `
166
+ : chart == 'p'
167
+ ? html ` <ox-chart-p class="chart" .plots=${data}></ox-chart-p> `
168
+ : chart == 'np'
169
+ ? html ` <ox-chart-np class="chart" .plots=${data}></ox-chart-np> `
170
+ : nothing)}
23
171
  `;
24
172
  }
25
173
  updated(changes) {
26
- if (changes.has('dataSetId')) {
27
- this.fetchSpcChart(this.dataSetId, this.variable);
174
+ if (!changes.has('spcChart')) {
175
+ this.fetchSpcChart();
28
176
  }
29
177
  }
30
178
  async pageUpdated(changes, lifecycle) {
@@ -32,44 +180,44 @@ let SpcChartPage = class SpcChartPage extends connect(store)(localize(i18next)(P
32
180
  this.dataSetId = lifecycle.resourceId;
33
181
  }
34
182
  }
35
- async fetchSpcChart(dataSetId, variable, startDate, endDate) {
183
+ async fetchSpcChart() {
184
+ const { dataSetId, dateRange: [fromDate, toDate], variable, chartType } = (await this.formBase.getQueryFilters()).reduce((sum, field) => {
185
+ sum[field.name] = field.value;
186
+ return sum;
187
+ }, {});
188
+ if (!(dataSetId && fromDate && toDate && variable && chartType)) {
189
+ return;
190
+ }
36
191
  const response = await client.query({
37
192
  query: gql `
38
- query spcChart($dataSetId: String!, $startDate: String, $endDate: String, $variable: String) {
39
- spcChart(dataSetId: $dataSetId, startDate: $startDate, endDate: $endDate, variable: $variable) {
193
+ query spcChart($dataSetId: String!, $variable: String!, $chartType: String!, $fromDate: String!, $toDate: String!) {
194
+ spcChart(dataSetId: $dataSetId, variable: $variable, chartType: $chartType, fromDate: $fromDate, toDate: $toDate) {
40
195
  dataSet {
41
196
  id
42
197
  name
43
198
  }
44
- analysisResults {
199
+ variable
200
+ charts {
45
201
  chartType
46
- variables {
47
- name
48
- stats {
49
- mean
50
- UCL
51
- LCL
52
- CL
53
- range
54
- proportion
55
- nonconforming
56
- count
57
- defectsPerUnit
58
- individualValue
59
- movingRange
60
- }
61
- samples {
62
- sampleId
63
- value
64
- }
65
- bins {
66
- binRange
67
- count
68
- }
69
- categories {
70
- category
71
- count
72
- }
202
+ controlLimits {
203
+ ucl
204
+ lcl
205
+ cl
206
+ }
207
+ specLimits {
208
+ usl
209
+ lsl
210
+ target
211
+ }
212
+ plots {
213
+ x
214
+ values
215
+ xbar
216
+ r
217
+ i
218
+ mr
219
+ n
220
+ defects
73
221
  }
74
222
  }
75
223
  }
@@ -77,28 +225,52 @@ let SpcChartPage = class SpcChartPage extends connect(store)(localize(i18next)(P
77
225
  `,
78
226
  variables: {
79
227
  dataSetId,
80
- startDate,
81
- endDate,
82
- variable
228
+ variable,
229
+ chartType,
230
+ fromDate,
231
+ toDate
83
232
  }
84
233
  });
85
234
  this.spcChart = response.data.spcChart;
86
235
  }
236
+ async fetchVariables(id) {
237
+ const response = await client.query({
238
+ query: gql `
239
+ query dataSet($id: String!) {
240
+ dataSet(id: $id) {
241
+ dataItems {
242
+ name
243
+ tag
244
+ }
245
+ }
246
+ }
247
+ `,
248
+ variables: {
249
+ id
250
+ }
251
+ });
252
+ return response.data.dataSet.dataItems.map(dataItem => {
253
+ return {
254
+ display: dataItem.name,
255
+ value: dataItem.name
256
+ };
257
+ });
258
+ }
87
259
  };
88
260
  SpcChartPage.styles = [
89
261
  ScrollbarStyles,
262
+ CommonHeaderStyles,
90
263
  css `
91
264
  :host {
92
265
  display: flex;
266
+ flex-direction: column;
93
267
 
94
268
  width: 100%;
95
-
96
- --grid-record-emphasized-background-color: #8b0000;
97
- --grid-record-emphasized-color: #ff6b6b;
98
269
  }
99
270
 
100
271
  .chart {
101
272
  flex: 1;
273
+ padding: var(--padding-default);
102
274
  }
103
275
  `
104
276
  ];
@@ -110,10 +282,26 @@ __decorate([
110
282
  state(),
111
283
  __metadata("design:type", String)
112
284
  ], SpcChartPage.prototype, "variable", void 0);
285
+ __decorate([
286
+ state(),
287
+ __metadata("design:type", String)
288
+ ], SpcChartPage.prototype, "chartType", void 0);
113
289
  __decorate([
114
290
  state(),
115
291
  __metadata("design:type", Object)
116
292
  ], SpcChartPage.prototype, "spcChart", void 0);
293
+ __decorate([
294
+ state(),
295
+ __metadata("design:type", Array)
296
+ ], SpcChartPage.prototype, "filtersValue", void 0);
297
+ __decorate([
298
+ state(),
299
+ __metadata("design:type", Array)
300
+ ], SpcChartPage.prototype, "variables", void 0);
301
+ __decorate([
302
+ query('ox-filters-form-base'),
303
+ __metadata("design:type", OxFiltersFormBase)
304
+ ], SpcChartPage.prototype, "formBase", void 0);
117
305
  SpcChartPage = __decorate([
118
306
  customElement('spc-chart-page')
119
307
  ], SpcChartPage);
@@ -1 +1 @@
1
- {"version":3,"file":"spc-chart-page.js","sourceRoot":"","sources":["../../client/pages/spc-chart-page.ts"],"names":[],"mappings":";AAAA,OAAO,+BAA+B,CAAA;AACtC,OAAO,4BAA4B,CAAA;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAmB,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGjD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnD,OAAO,GAAG,MAAM,aAAa,CAAA;AAGtB,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;IAuB3E,IAAI,OAAO;QACT,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC;YACnC,IAAI,EAAE,eAAe;SACtB,CAAA;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;KAGV,CAAA;IACH,CAAC;IAED,OAAO,CAAC,OAA6B;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAU,EAAE,IAAI,CAAC,QAAS,CAAC,CAAA;SACpD;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAY,EAAE,SAAc;QAC5C,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,UAAU,CAAA;SACtC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,QAAgB,EAAE,SAAkB,EAAE,OAAgB;QAC3F,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCT;YACD,SAAS,EAAE;gBACT,SAAS;gBACT,SAAS;gBACT,OAAO;gBACP,QAAQ;aACT;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAA;IACxC,CAAC;;AApGM,mBAAM,GAAG;IACd,eAAe;IACf,GAAG,CAAA;;;;;;;;;;;;;KAaF;CACF,CAAA;AAED;IAAC,KAAK,EAAE;;+CAAmB;AAC3B;IAAC,KAAK,EAAE;;8CAAkB;AAC1B;IAAC,KAAK,EAAE;;8CAAc;AArBX,YAAY;IADxB,aAAa,CAAC,gBAAgB,CAAC;GACnB,YAAY,CAsGxB;SAtGY,YAAY","sourcesContent":["import '@operato/spc/ox-chart-xbar.js'\nimport '@operato/spc/ox-chart-r.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\nimport { PageView, store } from '@operato/shell'\nimport { css, html, PropertyValues } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { isMobileDevice } from '@operato/utils'\n\nimport { connect } from 'pwa-helpers/connect-mixin'\nimport gql from 'graphql-tag'\n\n@customElement('spc-chart-page')\nexport class SpcChartPage extends connect(store)(localize(i18next)(PageView)) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n\n width: 100%;\n\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n .chart {\n flex: 1;\n }\n `\n ]\n\n @state() dataSetId?: string\n @state() variable?: string\n @state() spcChart: any\n\n get context() {\n return {\n title: i18next.t('title.spc-chart'),\n help: 'spc/spc-chart'\n }\n }\n\n render() {\n return html`\n <ox-chart-xbar class=\"chart\"></ox-chart-xbar>\n <ox-chart-r class=\"chart\"></ox-chart-r>\n `\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('dataSetId')) {\n this.fetchSpcChart(this.dataSetId!, this.variable!)\n }\n }\n\n async pageUpdated(changes: any, lifecycle: any) {\n if (this.active) {\n this.dataSetId = lifecycle.resourceId\n }\n }\n\n async fetchSpcChart(dataSetId: string, variable: string, startDate?: string, endDate?: string) {\n const response = await client.query({\n query: gql`\n query spcChart($dataSetId: String!, $startDate: String, $endDate: String, $variable: String) {\n spcChart(dataSetId: $dataSetId, startDate: $startDate, endDate: $endDate, variable: $variable) {\n dataSet {\n id\n name\n }\n analysisResults {\n chartType\n variables {\n name\n stats {\n mean\n UCL\n LCL\n CL\n range\n proportion\n nonconforming\n count\n defectsPerUnit\n individualValue\n movingRange\n }\n samples {\n sampleId\n value\n }\n bins {\n binRange\n count\n }\n categories {\n category\n count\n }\n }\n }\n }\n }\n `,\n variables: {\n dataSetId,\n startDate,\n endDate,\n variable\n }\n })\n\n this.spcChart = response.data.spcChart\n }\n}\n"]}
1
+ {"version":3,"file":"spc-chart-page.js","sourceRoot":"","sources":["../../client/pages/spc-chart-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/app/filters-form.js'\nimport '@operato/spc/ox-chart-xbar-r.js'\nimport '@operato/spc/ox-chart-i-mr.js'\nimport '@operato/spc/ox-chart-u.js'\nimport '@operato/spc/ox-chart-c.js'\nimport '@operato/spc/ox-chart-p.js'\nimport '@operato/spc/ox-chart-np.js'\n\nimport { ScrollbarStyles, CommonHeaderStyles } from '@operato/styles'\nimport { PageView, store } from '@operato/shell'\nimport { css, html, PropertyValues, nothing } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { isMobileDevice } from '@operato/utils'\nimport { FilterConfig, FilterValue, OxFiltersFormBase } from '@operato/form'\n\nimport { connect } from 'pwa-helpers/connect-mixin'\nimport gql from 'graphql-tag'\n\nfunction formatDate(timestamp: number) {\n const date = new Date(timestamp)\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0') // 월은 0부터 시작하므로 1을 더함\n const day = String(date.getDate()).padStart(2, '0')\n const hours = String(date.getHours()).padStart(2, '0')\n const minutes = String(date.getMinutes()).padStart(2, '0')\n const seconds = String(date.getSeconds()).padStart(2, '0')\n\n return `${month}-${day} ${hours}:${minutes}`\n}\n\n@customElement('spc-chart-page')\nexport class SpcChartPage extends connect(store)(localize(i18next)(PageView)) {\n static styles = [\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n width: 100%;\n }\n\n .chart {\n flex: 1;\n padding: var(--padding-default);\n }\n `\n ]\n\n @state() dataSetId?: string = ''\n @state() variable?: string = ''\n @state() chartType?: string = ''\n @state() spcChart: any\n @state() filtersValue?: FilterValue[]\n @state() variables: { display: string; value: string }[] = []\n\n @query('ox-filters-form-base') formBase!: OxFiltersFormBase\n\n private get filtersConfig(): FilterConfig[] {\n return [\n {\n name: 'dataSetId',\n type: 'resource-id',\n label: 'dataset',\n operator: 'eq',\n options: {\n queryName: 'dataSets'\n },\n onchange: (value, formBase) => {\n requestAnimationFrame(async () => {\n const variableFilter = formBase.getFieldByName('variable') as HTMLInputElement\n variableFilter.value = ''\n\n this.variables = [\n {\n display: '',\n value: ''\n },\n ...(await this.fetchVariables(value as string))\n ]\n })\n\n this.dataSetId = value\n\n return false /* whether filters-change event triggered or not */\n }\n },\n {\n name: 'variable',\n type: 'select',\n label: 'variable',\n operator: 'eq',\n options: () => this.variables,\n onchange: value => (this.variable = value)\n },\n {\n name: 'chartType',\n type: 'select',\n label: 'chart',\n operator: 'eq',\n options: ['Xbar-R', 'I-MR', 'C', 'U', 'P', 'NP'],\n onchange: value => (this.chartType = value)\n },\n {\n name: 'dateRange',\n type: 'date',\n label: 'date',\n operator: 'between',\n value: [\n {\n name: 'today',\n params: {\n relativeDays: -30\n }\n },\n {\n name: 'today',\n params: {\n relativeDays: -1\n }\n }\n ]\n }\n ]\n }\n\n get context() {\n return {\n title: i18next.t('title.spc-chart'),\n help: 'spc/spc-chart'\n }\n }\n\n render() {\n const { dataSet = {}, variable, charts = [] } = this.spcChart || {}\n\n var plotters: { chart: string; data: any[] }[] = []\n\n switch (this.chartType) {\n case 'Xbar-R':\n const xbar = charts.find(r => r.chartType == 'Xbar')\n const r = charts.find(r => r.chartType == 'R')\n\n plotters.push({ chart: 'xbar-r', data: xbar?.plots ?? [] })\n break\n\n case 'I-MR':\n const i = charts.find(r => r.chartType == 'I')\n const mr = charts.find(r => r.chartType == 'MR')\n\n plotters.push({ chart: 'i-mr', data: i?.plots ?? [] })\n break\n\n case 'P':\n const p = charts.find(r => r.chartType == 'P')\n plotters.push({ chart: 'p', data: p?.plots ?? [] })\n break\n\n case 'NP':\n const np = charts.find(r => r.chartType == 'NP')\n plotters.push({ chart: 'np', data: np?.plots ?? [] })\n break\n\n case 'C':\n const c = charts.find(r => r.chartType == 'C')\n plotters.push({ chart: 'c', data: c?.plots ?? [] })\n break\n\n case 'U':\n const u = charts.find(r => r.chartType == 'U')\n plotters.push({ chart: 'u', data: u?.plots ?? [] })\n\n default:\n }\n\n plotters = plotters.map(plotter => {\n return {\n ...plotter,\n data: plotter.data.map(plot => {\n return {\n ...plot,\n x: formatDate(Number(plot.x))\n }\n })\n }\n })\n\n return html`\n <div class=\"header\">\n <div class=\"title\"><mwc-icon>summarize</mwc-icon>${i18next.t('title.spc-chart')}</div>\n <ox-filters-form-base\n class=\"filters\"\n .value=${this.filtersValue}\n .filters=${this.filtersConfig}\n ?url-params-sensitive=${false}\n @filters-change=${(e: CustomEvent) => {\n this.fetchSpcChart()\n }}\n >\n </ox-filters-form-base>\n </div>\n\n ${plotters.map(({ chart, data }) =>\n chart == 'xbar-r'\n ? html` <ox-chart-xbar-r class=\"chart\" .plots=${data}></ox-chart-xbar-r> `\n : chart == 'i-mr'\n ? html` <ox-chart-i-mr class=\"chart\" .plots=${data}></ox-chart-i-mr> `\n : chart == 'u'\n ? html` <ox-chart-u class=\"chart\" .plots=${data}></ox-chart-u> `\n : chart == 'c'\n ? html` <ox-chart-c class=\"chart\" .plots=${data}></ox-chart-c> `\n : chart == 'p'\n ? html` <ox-chart-p class=\"chart\" .plots=${data}></ox-chart-p> `\n : chart == 'np'\n ? html` <ox-chart-np class=\"chart\" .plots=${data}></ox-chart-np> `\n : nothing\n )}\n `\n }\n\n updated(changes: PropertyValues<this>) {\n if (!changes.has('spcChart')) {\n this.fetchSpcChart()\n }\n }\n\n async pageUpdated(changes: any, lifecycle: any) {\n if (this.active) {\n this.dataSetId = lifecycle.resourceId\n }\n }\n\n async fetchSpcChart() {\n const {\n dataSetId,\n dateRange: [fromDate, toDate],\n variable,\n chartType\n } = (await this.formBase.getQueryFilters()).reduce((sum, field) => {\n sum[field.name] = field.value\n return sum\n }, {} as any)\n\n if (!(dataSetId && fromDate && toDate && variable && chartType)) {\n return\n }\n\n const response = await client.query({\n query: gql`\n query spcChart($dataSetId: String!, $variable: String!, $chartType: String!, $fromDate: String!, $toDate: String!) {\n spcChart(dataSetId: $dataSetId, variable: $variable, chartType: $chartType, fromDate: $fromDate, toDate: $toDate) {\n dataSet {\n id\n name\n }\n variable\n charts {\n chartType\n controlLimits {\n ucl\n lcl\n cl\n }\n specLimits {\n usl\n lsl\n target\n }\n plots {\n x\n values\n xbar\n r\n i\n mr\n n\n defects\n }\n }\n }\n }\n `,\n variables: {\n dataSetId,\n variable,\n chartType,\n fromDate,\n toDate\n }\n })\n\n this.spcChart = response.data.spcChart\n }\n\n async fetchVariables(id: string): Promise<{ display: string; value: string }[]> {\n const response = await client.query({\n query: gql`\n query dataSet($id: String!) {\n dataSet(id: $id) {\n dataItems {\n name\n tag\n }\n }\n }\n `,\n variables: {\n id\n }\n })\n\n return response.data.dataSet.dataItems.map(dataItem => {\n return {\n display: dataItem.name,\n value: dataItem.name\n }\n })\n }\n}\n"]}