@operato/scene-scichart 9.1.1 → 10.0.0-beta.1
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/dist/charts/axis-synchronizer.js +3 -2
- package/dist/charts/axis-synchronizer.js.map +1 -1
- package/dist/charts/ox-scichart-multiple.d.ts +1 -1
- package/dist/charts/ox-scichart-multiple.js +73 -80
- package/dist/charts/ox-scichart-multiple.js.map +1 -1
- package/dist/charts/ox-scichart.d.ts +1 -1
- package/dist/charts/ox-scichart.js +46 -54
- package/dist/charts/ox-scichart.js.map +1 -1
- package/dist/charts/scichart-builder.js +13 -14
- package/dist/charts/scichart-builder.js.map +1 -1
- package/dist/scichart-multiple-timeseries.js +1 -2
- package/dist/scichart-multiple-timeseries.js.map +1 -1
- package/dist/scichart-timeseries.js +1 -2
- package/dist/scichart-timeseries.js.map +1 -1
- package/package.json +14 -14
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { EventHandler } from 'scichart';
|
|
2
2
|
export class AxisSynchroniser {
|
|
3
|
+
visibleRange;
|
|
4
|
+
axes = [];
|
|
5
|
+
visibleRangeChanged = new EventHandler();
|
|
3
6
|
constructor(initialRange, axes) {
|
|
4
|
-
this.axes = [];
|
|
5
|
-
this.visibleRangeChanged = new EventHandler();
|
|
6
7
|
this.visibleRange = initialRange;
|
|
7
8
|
this.publishChange = this.publishChange.bind(this);
|
|
8
9
|
if (axes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axis-synchronizer.js","sourceRoot":"","sources":["../../src/charts/axis-synchronizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAwC,MAAM,UAAU,CAAA;AAEzF,MAAM,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"axis-synchronizer.js","sourceRoot":"","sources":["../../src/charts/axis-synchronizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAwC,MAAM,UAAU,CAAA;AAEzF,MAAM,OAAO,gBAAgB;IACpB,YAAY,CAAa;IACxB,IAAI,GAAiB,EAAE,CAAA;IACxB,mBAAmB,GAA0C,IAAI,YAAY,EAA2B,CAAA;IAE/G,YAAmB,YAAyB,EAAE,IAAmB;QAC/D,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAEM,aAAa,CAAC,IAA8B;QACjD,IAAI,CAAC,YAAY,GAAG,IAAK,CAAC,YAAY,CAAA;QACtC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;QAC5D,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC;IAEM,OAAO,CAAC,IAAgB;QAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;YACrC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;IAEM,UAAU,CAAC,IAAgB;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;QAClD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC1B,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;CACF","sourcesContent":["import { AxisBase2D, EventHandler, NumberRange, VisibleRangeChangedArgs } from 'scichart'\n\nexport class AxisSynchroniser {\n public visibleRange: NumberRange\n private axes: AxisBase2D[] = []\n public visibleRangeChanged: EventHandler<VisibleRangeChangedArgs> = new EventHandler<VisibleRangeChangedArgs>()\n\n public constructor(initialRange: NumberRange, axes?: AxisBase2D[]) {\n this.visibleRange = initialRange\n this.publishChange = this.publishChange.bind(this)\n if (axes) {\n axes.forEach(a => this.addAxis(a))\n }\n }\n\n public publishChange(data?: VisibleRangeChangedArgs) {\n this.visibleRange = data!.visibleRange\n this.axes.forEach(a => (a.visibleRange = this.visibleRange))\n this.visibleRangeChanged.raiseEvent(data)\n }\n\n public addAxis(axis: AxisBase2D) {\n if (!this.axes.includes(axis)) {\n this.axes.push(axis)\n axis.visibleRange = this.visibleRange\n axis.visibleRangeChanged.subscribe(this.publishChange)\n }\n }\n\n public removeAxis(axis: AxisBase2D) {\n const index = this.axes.findIndex(a => a === axis)\n if (index >= 0) {\n this.axes.splice(index, 1)\n axis.visibleRangeChanged.unsubscribe(this.publishChange)\n }\n }\n}\n"]}
|
|
@@ -14,9 +14,9 @@ export declare class OxSciChartMultiple extends LitElement {
|
|
|
14
14
|
private overviewDataSeries;
|
|
15
15
|
private groupCharts;
|
|
16
16
|
private initializationQueue;
|
|
17
|
+
static idx: number;
|
|
17
18
|
private containerId;
|
|
18
19
|
overviewContainer: HTMLDivElement;
|
|
19
|
-
static idx: number;
|
|
20
20
|
static styles: import("lit").CSSResult[];
|
|
21
21
|
initializeSciChart(): Promise<void>;
|
|
22
22
|
dispose(): void;
|
|
@@ -8,28 +8,61 @@ import { calculatePrecision, buildSciChart, buildSciChartOverview, convertColor,
|
|
|
8
8
|
import { AxisSynchroniser } from './axis-synchronizer.js';
|
|
9
9
|
import { EAutoRange, FastLineRenderableSeries, NumberRange, NumericAxis, SciChartVerticalGroup, XyDataSeries } from 'scichart';
|
|
10
10
|
import { ScrollbarStyles } from '@operato/styles';
|
|
11
|
-
let OxSciChartMultiple =
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
11
|
+
let OxSciChartMultiple = class OxSciChartMultiple extends LitElement {
|
|
12
|
+
static { OxSciChartMultiple_1 = this; }
|
|
13
|
+
config = null;
|
|
14
|
+
data = [];
|
|
15
|
+
visibleSeries = [];
|
|
16
|
+
showOverview = true;
|
|
17
|
+
synchronizer = new AxisSynchroniser(new NumberRange(200, 500));
|
|
18
|
+
verticalGroup = new SciChartVerticalGroup();
|
|
19
|
+
overviewChart = null;
|
|
20
|
+
overviewDataSeries = [];
|
|
21
|
+
groupCharts = [];
|
|
22
|
+
initializationQueue = Promise.resolve();
|
|
23
|
+
/*
|
|
24
|
+
[주의]
|
|
25
|
+
ox-scichart container의 id를 글로벌 유니크하게 해야한다.
|
|
26
|
+
SciChart가 특별히 container의 id를 기반으로 하위 컴포넌트를 구성하고 있기 때문이다.
|
|
27
|
+
shadowDom 안에 있는 container 이더라도, 글로벌 유니크한 id를 제공해야 한다.
|
|
28
|
+
그렇지 않으면, 단 하나의 차트만 제대로 렌더링된다.
|
|
29
|
+
*/
|
|
30
|
+
static idx = 0;
|
|
31
|
+
containerId = 'ox-scichart-multiple' + ++OxSciChartMultiple_1.idx;
|
|
32
|
+
static styles = [
|
|
33
|
+
ScrollbarStyles,
|
|
34
|
+
css `
|
|
35
|
+
:host {
|
|
36
|
+
display: flex;
|
|
37
|
+
flex-direction: column;
|
|
38
|
+
|
|
39
|
+
width: 100%;
|
|
40
|
+
height: 100%;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.overview {
|
|
44
|
+
height: 80px;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
#chart-group {
|
|
48
|
+
flex: 1;
|
|
49
|
+
|
|
50
|
+
display: flex;
|
|
51
|
+
flex-direction: column;
|
|
52
|
+
overflow-y: auto;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.grouped-chart {
|
|
56
|
+
flex: 1;
|
|
57
|
+
|
|
58
|
+
min-height: 25%;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
[hidden] {
|
|
62
|
+
display: none;
|
|
63
|
+
}
|
|
64
|
+
`
|
|
65
|
+
];
|
|
33
66
|
async initializeSciChart() {
|
|
34
67
|
this.cleanup();
|
|
35
68
|
await this.createOverviewChart();
|
|
@@ -120,9 +153,9 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
120
153
|
}
|
|
121
154
|
async updateDataSeries() {
|
|
122
155
|
const { config, data } = this;
|
|
123
|
-
const { annotations = [] } =
|
|
156
|
+
const { annotations = [] } = config?.options || {};
|
|
124
157
|
const { data: chartData } = config || {};
|
|
125
|
-
const { datasets = [], labelDataKey: attrX } =
|
|
158
|
+
const { datasets = [], labelDataKey: attrX } = config?.data || {};
|
|
126
159
|
if (!(data instanceof Array) || !attrX) {
|
|
127
160
|
return [];
|
|
128
161
|
}
|
|
@@ -130,7 +163,7 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
130
163
|
this.groupCharts.forEach(({ dataKey, sciChartSurface, dataSeries }) => {
|
|
131
164
|
try {
|
|
132
165
|
// dataKey로 시작하는 모든 시리즈를 업데이트
|
|
133
|
-
const relatedDatasets = datasets.filter(dataset =>
|
|
166
|
+
const relatedDatasets = datasets.filter(dataset => dataset.dataKey?.startsWith(dataKey));
|
|
134
167
|
// 각 relatedDatasets에 대해 해당하는 dataSeries를 업데이트
|
|
135
168
|
dataSeries.forEach((ds, index) => {
|
|
136
169
|
ds.clear();
|
|
@@ -157,14 +190,13 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
157
190
|
try {
|
|
158
191
|
// Overview 차트 데이터 업데이트
|
|
159
192
|
this.overviewDataSeries.forEach((ds, index) => {
|
|
160
|
-
var _a;
|
|
161
193
|
const visibleKey = this.visibleSeries[index];
|
|
162
194
|
const dataset = datasets.find(dataset => dataset.dataKey === visibleKey);
|
|
163
195
|
if (!dataset) {
|
|
164
196
|
return;
|
|
165
197
|
}
|
|
166
198
|
const dataIndex = datasets.findIndex(ds => ds.dataKey === dataset.dataKey);
|
|
167
|
-
const filteredData =
|
|
199
|
+
const filteredData = newData[dataIndex]?.filter(d => typeof d.yValue === 'number') || [];
|
|
168
200
|
ds.clear();
|
|
169
201
|
if (filteredData.length > 0) {
|
|
170
202
|
ds.appendRange(filteredData.map(d => d.xValue), filteredData.map(d => d.yValue));
|
|
@@ -189,7 +221,7 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
189
221
|
}
|
|
190
222
|
get dataSet() {
|
|
191
223
|
const { config, data } = this;
|
|
192
|
-
const { datasets = [], labelDataKey: attrX } =
|
|
224
|
+
const { datasets = [], labelDataKey: attrX } = config?.data || {};
|
|
193
225
|
if (!(data instanceof Array) || !attrX) {
|
|
194
226
|
return [];
|
|
195
227
|
}
|
|
@@ -213,8 +245,7 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
213
245
|
});
|
|
214
246
|
}
|
|
215
247
|
render() {
|
|
216
|
-
|
|
217
|
-
const { datasets = [] } = ((_a = this.config) === null || _a === void 0 ? void 0 : _a.data) || {};
|
|
248
|
+
const { datasets = [] } = this.config?.data || {};
|
|
218
249
|
return html `
|
|
219
250
|
<div id=${this.containerId + '-overview'} class="overview" ?hidden=${!this.showOverview}></div>
|
|
220
251
|
<div id="chart-group">
|
|
@@ -231,7 +262,7 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
231
262
|
async buildChartGroup() {
|
|
232
263
|
this.cleanupGroup();
|
|
233
264
|
const { config } = this;
|
|
234
|
-
const { datasets = [] } =
|
|
265
|
+
const { datasets = [] } = config?.data || {};
|
|
235
266
|
await Promise.all(datasets
|
|
236
267
|
.filter(dataset => this.visibleSeries.includes(dataset.dataKey))
|
|
237
268
|
.map(async (dataset) => {
|
|
@@ -239,8 +270,8 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
239
270
|
}));
|
|
240
271
|
}
|
|
241
272
|
async updateSeries(after, before) {
|
|
242
|
-
const addSeries =
|
|
243
|
-
const removeSeries =
|
|
273
|
+
const addSeries = after?.filter(series => !before?.includes(series)) || [];
|
|
274
|
+
const removeSeries = before?.filter(series => !after?.includes(series)) || [];
|
|
244
275
|
for (const series of removeSeries) {
|
|
245
276
|
await this.removeChart(series);
|
|
246
277
|
}
|
|
@@ -277,7 +308,7 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
277
308
|
if (!appendum || !appendum.length)
|
|
278
309
|
return;
|
|
279
310
|
const { config } = this;
|
|
280
|
-
const { datasets = [], labelDataKey: attrX } =
|
|
311
|
+
const { datasets = [], labelDataKey: attrX } = config?.data || {};
|
|
281
312
|
if (!attrX)
|
|
282
313
|
return;
|
|
283
314
|
// 기존 데이터에 appendum 추가
|
|
@@ -344,17 +375,16 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
344
375
|
}, 200);
|
|
345
376
|
}
|
|
346
377
|
async createChart(dataKey) {
|
|
347
|
-
var _a, _b, _c, _d;
|
|
348
378
|
const { data = {}, options = {} } = this.config || {};
|
|
349
379
|
const { datasets = [] } = data;
|
|
350
380
|
const primaryDataset = datasets.find(dataset => dataset.dataKey == dataKey);
|
|
351
381
|
if (!primaryDataset) {
|
|
352
382
|
return null;
|
|
353
383
|
}
|
|
354
|
-
const relatedDatasets = datasets.filter(dataset =>
|
|
384
|
+
const relatedDatasets = datasets.filter(dataset => dataset.dataKey?.startsWith(dataKey));
|
|
355
385
|
const yAxis = {
|
|
356
|
-
...
|
|
357
|
-
axisTitle: primaryDataset
|
|
386
|
+
...options.scales?.yAxes?.[0],
|
|
387
|
+
axisTitle: primaryDataset?.label
|
|
358
388
|
};
|
|
359
389
|
const config = {
|
|
360
390
|
...this.config,
|
|
@@ -378,15 +408,14 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
378
408
|
// 각 시리즈에 대해 올바른 데이터를 추가
|
|
379
409
|
const newData = this.dataSet;
|
|
380
410
|
dataSeries.forEach((ds, seriesIndex) => {
|
|
381
|
-
var _a;
|
|
382
411
|
const dataset = relatedDatasets[seriesIndex];
|
|
383
|
-
const filteredData =
|
|
412
|
+
const filteredData = newData[seriesIndex]?.filter(d => typeof d.yValue === 'number') || [];
|
|
384
413
|
if (filteredData.length > 0) {
|
|
385
414
|
ds.appendRange(filteredData.map(d => d.xValue), filteredData.map(d => d.yValue));
|
|
386
415
|
}
|
|
387
416
|
});
|
|
388
|
-
const { annotations = [] } =
|
|
389
|
-
updateAnnotations(chart.sciChartSurface, annotations,
|
|
417
|
+
const { annotations = [] } = this.config?.options || {};
|
|
418
|
+
updateAnnotations(chart.sciChartSurface, annotations, this.config?.data, this.data);
|
|
390
419
|
return { chart, dataSeries, dataKey };
|
|
391
420
|
}
|
|
392
421
|
destroyChart(groupedChart) {
|
|
@@ -395,7 +424,6 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
395
424
|
groupedChart.sciChartSurface.delete();
|
|
396
425
|
}
|
|
397
426
|
async addSeriesToOverviewChart(dataKey) {
|
|
398
|
-
var _a;
|
|
399
427
|
if (!this.overviewChart || !this.overviewDataSeries) {
|
|
400
428
|
console.error('Overview chart is not initialized.');
|
|
401
429
|
return;
|
|
@@ -408,7 +436,7 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
408
436
|
console.warn(`Series for dataKey ${dataKey} already exists in the overview chart.`);
|
|
409
437
|
return; // Exit the function without adding the series again
|
|
410
438
|
}
|
|
411
|
-
const dataset =
|
|
439
|
+
const dataset = this.config?.data.datasets.find(dataset => dataset.dataKey === dataKey);
|
|
412
440
|
if (!dataset) {
|
|
413
441
|
console.error('Dataset not found for dataKey:', dataKey);
|
|
414
442
|
return;
|
|
@@ -474,7 +502,7 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
474
502
|
yAxisId
|
|
475
503
|
});
|
|
476
504
|
// 초기 데이터 추가
|
|
477
|
-
const newData = this.dataSet.find((data, index) =>
|
|
505
|
+
const newData = this.dataSet.find((data, index) => this.config?.data.datasets[index].dataKey === dataset.dataKey);
|
|
478
506
|
if (newData && newData.length > 0) {
|
|
479
507
|
const filteredData = newData.filter(d => typeof d.yValue === 'number');
|
|
480
508
|
if (filteredData.length > 0) {
|
|
@@ -487,41 +515,6 @@ let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends
|
|
|
487
515
|
return { series, dataSeries };
|
|
488
516
|
}
|
|
489
517
|
};
|
|
490
|
-
OxSciChartMultiple.idx = 0;
|
|
491
|
-
OxSciChartMultiple.styles = [
|
|
492
|
-
ScrollbarStyles,
|
|
493
|
-
css `
|
|
494
|
-
:host {
|
|
495
|
-
display: flex;
|
|
496
|
-
flex-direction: column;
|
|
497
|
-
|
|
498
|
-
width: 100%;
|
|
499
|
-
height: 100%;
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
.overview {
|
|
503
|
-
height: 80px;
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
#chart-group {
|
|
507
|
-
flex: 1;
|
|
508
|
-
|
|
509
|
-
display: flex;
|
|
510
|
-
flex-direction: column;
|
|
511
|
-
overflow-y: auto;
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
.grouped-chart {
|
|
515
|
-
flex: 1;
|
|
516
|
-
|
|
517
|
-
min-height: 25%;
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
[hidden] {
|
|
521
|
-
display: none;
|
|
522
|
-
}
|
|
523
|
-
`
|
|
524
|
-
];
|
|
525
518
|
__decorate([
|
|
526
519
|
property({ type: Object })
|
|
527
520
|
], OxSciChartMultiple.prototype, "config", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ox-scichart-multiple.js","sourceRoot":"","sources":["../../src/charts/ox-scichart-multiple.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, css } from 'lit'\nimport { property, query, customElement } from 'lit/decorators.js'\nimport { keyed } from 'lit/directives/keyed.js'\nimport '@operato/chart'\n\nimport {\n calculatePrecision,\n buildSciChart,\n buildSciChartOverview,\n convertColor,\n updateAnnotations,\n DEFAULT_COLOR\n} from './scichart-builder.js'\nimport { AxisSynchroniser } from './axis-synchronizer.js'\nimport {\n EAutoRange,\n FastLineRenderableSeries,\n NumberRange,\n NumericAxis,\n SciChartVerticalGroup,\n XyDataSeries\n} from 'scichart'\n\nimport { ScrollbarStyles } from '@operato/styles'\n\nimport type { OperatoChart } from '@operato/chart'\n\n@customElement('ox-scichart-multiple')\nexport class OxSciChartMultiple extends LitElement {\n @property({ type: Object }) config: OperatoChart.ChartConfig | null = null\n @property({ type: Array }) data: { [attr: string]: any }[] = []\n @property({ type: Array }) visibleSeries: string[] = []\n @property({ type: Boolean, attribute: 'show-overview' }) showOverview: boolean = true\n\n private synchronizer: AxisSynchroniser = new AxisSynchroniser(new NumberRange(200, 500))\n private verticalGroup: SciChartVerticalGroup = new SciChartVerticalGroup()\n\n private overviewChart: any = null\n private overviewDataSeries: any[] = []\n private groupCharts: {\n dataKey: string\n sciChartSurface: any\n dataSeries: any[]\n }[] = []\n\n private initializationQueue: Promise<void> = Promise.resolve()\n\n /*\n [주의]\n ox-scichart container의 id를 글로벌 유니크하게 해야한다. \n SciChart가 특별히 container의 id를 기반으로 하위 컴포넌트를 구성하고 있기 때문이다.\n shadowDom 안에 있는 container 이더라도, 글로벌 유니크한 id를 제공해야 한다.\n 그렇지 않으면, 단 하나의 차트만 제대로 렌더링된다.\n */\n private containerId: string = 'ox-scichart-multiple' + ++OxSciChartMultiple.idx\n\n @query('.overview') overviewContainer!: HTMLDivElement\n\n static idx: number = 0\n\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n width: 100%;\n height: 100%;\n }\n\n .overview {\n height: 80px;\n }\n\n #chart-group {\n flex: 1;\n\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n }\n\n .grouped-chart {\n flex: 1;\n\n min-height: 25%;\n }\n\n [hidden] {\n display: none;\n }\n `\n ]\n\n async initializeSciChart() {\n this.cleanup()\n await this.createOverviewChart()\n }\n\n dispose() {\n // 그룹 차트 자원 해제\n this.groupCharts.forEach(chart => {\n if (chart.sciChartSurface) {\n this.synchronizer.removeAxis(chart.sciChartSurface.xAxes.get(0))\n this.verticalGroup.removeSurface(chart.sciChartSurface)\n\n // 각 데이터 시리즈 명시적으로 해제\n chart.dataSeries.forEach(ds => ds.delete())\n\n // 차트 삭제\n chart.sciChartSurface.delete()\n }\n })\n\n // 오버뷰 차트 자원 해제\n if (this.overviewChart) {\n this.overviewChart.sciChartSurface.renderableSeries.clear()\n this.overviewDataSeries.forEach(ds => ds.delete())\n this.overviewChart.sciChartSurface.delete()\n this.overviewDataSeries.length = 0\n }\n\n // 사용된 그룹, 오버뷰 데이터 초기화\n this.groupCharts.length = 0\n this.overviewChart = null\n }\n\n async createOverviewChart() {\n const { chart, dataSeries } =\n (await buildSciChartOverview(\n {\n ...this.config,\n data: { datasets: [] }\n },\n this.overviewContainer,\n {},\n this.synchronizer\n )) || {}\n\n this.verticalGroup.addSurfaceToGroup(chart.sciChartSurface)\n\n this.overviewChart = chart\n this.overviewDataSeries = dataSeries!\n }\n\n async updated(changedProperties: Map<string | number | symbol, unknown>) {\n this.initializationQueue = this.initializationQueue\n .then(async () => {\n let needUpdateDataSeries = false\n let needBuildChartGroup = false\n\n if (changedProperties.has('config') && this.config) {\n await this.initializeSciChart()\n needBuildChartGroup = true\n needUpdateDataSeries = true\n }\n\n if (changedProperties.has('visibleSeries')) {\n await this.updateSeries(this.visibleSeries, changedProperties.get('visibleSeries') as string[])\n /* [중요] buildChartGroup 을 visibleSeries 수정때마다 하는 이유는, render() 의 캐시 컨트롤이 안되기 때문이다. 가급적 시도하지 말라. */\n needBuildChartGroup = true\n needUpdateDataSeries = true\n }\n\n if (changedProperties.has('data')) {\n needUpdateDataSeries = true\n }\n\n if (needBuildChartGroup) {\n await this.buildChartGroup()\n }\n\n if (needUpdateDataSeries) {\n await this.updateDataSeries()\n }\n })\n .catch((error: any) => {\n console.error('Error in updated queue:', error)\n })\n }\n\n cleanup() {\n this.cleanupGroup()\n this.cleanupOverview()\n }\n\n cleanupGroup() {\n this.groupCharts.forEach(chart => {\n if (chart.sciChartSurface) {\n this.synchronizer.removeAxis(chart.sciChartSurface.xAxes.get(0))\n this.verticalGroup.removeSurface(chart.sciChartSurface)\n chart.sciChartSurface.delete()\n }\n })\n\n this.groupCharts.length = 0\n }\n\n cleanupOverview() {\n if (this.overviewChart) {\n this.overviewChart.sciChartSurface.renderableSeries.clear()\n this.overviewDataSeries.forEach(ds => ds.delete())\n this.overviewDataSeries.length = 0\n }\n\n this.overviewChart = null\n }\n\n async updateDataSeries() {\n const { config, data } = this\n const { annotations = [] } = config?.options || {}\n const { data: chartData } = config || {}\n const { datasets = [], labelDataKey: attrX } = config?.data || {}\n\n if (!(data instanceof Array) || !attrX) {\n return []\n }\n\n const newData = this.dataSet\n\n this.groupCharts.forEach(({ dataKey, sciChartSurface, dataSeries }) => {\n try {\n // dataKey로 시작하는 모든 시리즈를 업데이트\n const relatedDatasets = datasets.filter(dataset => dataset.dataKey?.startsWith(dataKey))\n\n // 각 relatedDatasets에 대해 해당하는 dataSeries를 업데이트\n dataSeries.forEach((ds, index) => {\n ds.clear()\n\n const relatedDataset = relatedDatasets[index]\n if (relatedDataset) {\n const filteredData = newData[datasets.findIndex(ds => ds.dataKey === relatedDataset.dataKey)].filter(\n d => typeof d.yValue === 'number'\n )\n\n if (filteredData.length > 0) {\n ds.appendRange(\n filteredData.map(d => d.xValue),\n filteredData.map(d => d.yValue)\n )\n }\n }\n })\n\n updateAnnotations(\n sciChartSurface,\n annotations,\n chartData,\n data\n // config?.options?.fontSize,\n // config?.options?.fontFamily,\n // config?.options?.fontColor\n )\n\n sciChartSurface.zoomExtents()\n sciChartSurface.invalidateElement()\n } catch (error) {\n console.error('Error updating data series:', error)\n }\n })\n\n try {\n // Overview 차트 데이터 업데이트\n this.overviewDataSeries.forEach((ds, index) => {\n const visibleKey = this.visibleSeries[index]\n const dataset = datasets.find(dataset => dataset.dataKey === visibleKey)\n if (!dataset) {\n return\n }\n\n const dataIndex = datasets.findIndex(ds => ds.dataKey === dataset.dataKey)\n const filteredData = newData[dataIndex]?.filter(d => typeof d.yValue === 'number') || []\n\n ds.clear()\n if (filteredData.length > 0) {\n ds.appendRange(\n filteredData.map(d => d.xValue),\n filteredData.map(d => d.yValue)\n )\n }\n })\n\n // this.overviewDataSeries.forEach(ds => ds.clear())\n\n // newData.forEach((data, index) => {\n // if (this.visibleSeries.includes(datasets[index].dataKey!)) {\n // const filteredData = data.filter(d => typeof d.yValue === 'number')\n // if (filteredData.length > 0) {\n // this.overviewDataSeries[index].appendRange(\n // filteredData.map(d => d.xValue),\n // filteredData.map(d => d.yValue)\n // )\n // }\n // }\n // })\n } catch (error) {\n console.error('Error updating overview data series:', error)\n }\n }\n\n get dataSet(): { xValue: number; yValue: number }[][] {\n const { config, data } = this\n const { datasets = [], labelDataKey: attrX } = config?.data || {}\n\n if (!(data instanceof Array) || !attrX) {\n return []\n }\n\n return datasets.map(dataset => {\n return data\n .map(item => {\n if (!item || typeof item !== 'object') {\n return\n }\n\n const xValue = new Date(item[attrX])\n if (isNaN(xValue.getTime())) {\n console.error('Invalid date:', item[attrX])\n return\n }\n\n return {\n xValue: xValue.getTime() / 1000,\n yValue: item[dataset.dataKey!]\n }\n })\n .filter(Boolean) as { xValue: number; yValue: number }[]\n })\n }\n\n render() {\n const { datasets = [] } = this.config?.data || {}\n\n return html`\n <div id=${this.containerId + '-overview'} class=\"overview\" ?hidden=${!this.showOverview}></div>\n <div id=\"chart-group\">\n ${this.visibleSeries.map(dataKey =>\n keyed(\n dataKey,\n html`\n <div\n id=${this.containerId + '-' + dataKey}\n class=\"grouped-chart\"\n ?hidden=${!this.visibleSeries.includes(dataKey!)}\n ></div>\n `\n )\n )}\n </div>\n `\n }\n\n async buildChartGroup() {\n this.cleanupGroup()\n\n const { config } = this\n const { datasets = [] } = config?.data || {}\n\n await Promise.all(\n datasets\n .filter(dataset => this.visibleSeries.includes(dataset.dataKey!))\n .map(async dataset => {\n await this.addChart(dataset.dataKey!)\n })\n )\n }\n\n async updateSeries(after: string[], before: string[]) {\n const addSeries = after?.filter(series => !before?.includes(series)) || []\n const removeSeries = before?.filter(series => !after?.includes(series)) || []\n\n for (const series of removeSeries) {\n await this.removeChart(series)\n }\n\n for (const series of addSeries) {\n await this.addChart(series)\n }\n }\n\n async addChart(dataKey: string) {\n const chartData = await this.createChart(dataKey)\n\n if (chartData) {\n const { chart, dataSeries, dataKey } = chartData\n this.verticalGroup.addSurfaceToGroup(chart.sciChartSurface)\n\n this.groupCharts = this.groupSorter([\n ...this.groupCharts,\n { dataKey, sciChartSurface: chart.sciChartSurface, dataSeries }\n ])\n\n await this.addSeriesToOverviewChart(dataKey)\n }\n }\n\n async removeChart(dataKey: string) {\n const index = this.groupCharts.findIndex(chart => chart.dataKey == dataKey)\n if (index === -1) return\n\n const [groupedChart] = this.groupCharts.splice(index, 1)\n this.destroyChart(groupedChart)\n\n this.groupCharts = this.groupSorter(this.groupCharts)\n\n await this.removeSeriesFromOverviewChart(dataKey)\n }\n\n groupSorter(group: any[]) {\n return group.sort(\n (a, b) =>\n this.visibleSeries.findIndex((s: any) => s.dataKey == a.dataKey) -\n this.visibleSeries.findIndex((s: any) => s.dataKey == b.dataKey)\n )\n }\n\n async appendData(appendum: { [attr: string]: any }[]) {\n if (!appendum || !appendum.length) return\n const { config } = this\n const { datasets = [], labelDataKey: attrX } = config?.data || {}\n if (!attrX) return\n\n // 기존 데이터에 appendum 추가\n this.data = [...this.data, ...appendum]\n\n // 각 그룹 차트에 대해 appendum 데이터를 변환하여 dataSeries에 추가\n this.groupCharts.forEach(chart => {\n const dataset = datasets.find(ds => ds.dataKey === chart.dataKey)\n if (!dataset) return\n\n const newData = appendum\n .map(item => {\n if (!item || typeof item !== 'object') return null\n const xValue = new Date(item[attrX])\n if (isNaN(xValue.getTime())) {\n console.error('Invalid date:', item[attrX])\n return null\n }\n return {\n xValue: xValue.getTime() / 1000,\n yValue: item[dataset.dataKey!]\n }\n })\n .filter(Boolean) as { xValue: number; yValue: number }[]\n\n if (newData.length > 0) {\n chart.dataSeries.forEach(ds => {\n ds.appendRange(\n newData.map(d => d.xValue),\n newData.map(d => d.yValue)\n )\n })\n }\n })\n\n // 오버뷰 차트에도 appendum 데이터 추가\n if (this.overviewDataSeries.length > 0) {\n datasets.forEach((dataset, index) => {\n const newData = appendum\n .map(item => {\n if (!item || typeof item !== 'object') return null\n const xValue = new Date(item[attrX])\n if (isNaN(xValue.getTime())) {\n console.error('Invalid date:', item[attrX])\n return null\n }\n return {\n xValue: xValue.getTime() / 1000,\n yValue: item[dataset.dataKey!]\n }\n })\n .filter(Boolean) as { xValue: number; yValue: number }[]\n\n if (newData.length > 0) {\n this.overviewDataSeries[index].appendRange(\n newData.map(d => d.xValue),\n newData.map(d => d.yValue)\n )\n }\n })\n }\n\n // 차트 갱신\n setTimeout(() => {\n this.groupCharts.forEach(chart => {\n chart.sciChartSurface.zoomExtents()\n chart.sciChartSurface.invalidateElement()\n })\n if (this.overviewChart) {\n this.overviewChart.sciChartSurface.zoomExtents()\n this.overviewChart.sciChartSurface.invalidateElement()\n }\n }, 200)\n }\n\n private async createChart(dataKey: string) {\n const { data = {}, options = {} } = this.config || {}\n const { datasets = [] } = data as OperatoChart.ChartData\n const primaryDataset = datasets.find(dataset => dataset.dataKey == dataKey)\n\n if (!primaryDataset) {\n return null\n }\n\n const relatedDatasets = datasets.filter(dataset => dataset.dataKey?.startsWith(dataKey))\n\n const yAxis = {\n ...options.scales?.yAxes?.[0],\n axisTitle: primaryDataset?.label\n }\n\n const config = {\n ...this.config,\n data: {\n datasets: relatedDatasets\n },\n options: {\n ...options,\n scales: {\n ...options.scales,\n yAxes: [yAxis]\n }\n }\n }\n\n const container = this.renderRoot.querySelector(`#${this.containerId + '-' + dataKey}`)\n const { chart, dataSeries } = (await buildSciChart(\n config,\n container,\n { fontSize: 14, fontFamily: 'Roboto', fontColor: undefined },\n {\n precision: primaryDataset.valueFormat ? calculatePrecision(primaryDataset.valueFormat) : undefined,\n grouped: this.containerId\n }\n ))!\n\n this.synchronizer.addAxis(chart.sciChartSurface.xAxes.get(0))\n\n // 각 시리즈에 대해 올바른 데이터를 추가\n const newData = this.dataSet\n dataSeries.forEach((ds, seriesIndex) => {\n const dataset = relatedDatasets[seriesIndex]\n const filteredData = newData[seriesIndex]?.filter(d => typeof d.yValue === 'number') || []\n if (filteredData.length > 0) {\n ds.appendRange(\n filteredData.map(d => d.xValue),\n filteredData.map(d => d.yValue)\n )\n }\n })\n\n const { annotations = [] } = this.config?.options || {}\n updateAnnotations(chart.sciChartSurface, annotations, this.config?.data, this.data)\n\n return { chart, dataSeries, dataKey }\n }\n\n private destroyChart(groupedChart: { dataKey: string; sciChartSurface: any; dataSeries: any[] }) {\n this.verticalGroup.removeSurface(groupedChart.sciChartSurface)\n this.synchronizer.removeAxis(groupedChart.sciChartSurface.xAxes.get(0))\n groupedChart.sciChartSurface.delete()\n }\n\n private async addSeriesToOverviewChart(dataKey: string) {\n if (!this.overviewChart || !this.overviewDataSeries) {\n console.error('Overview chart is not initialized.')\n return\n }\n\n // Check if the series already exists in the overview chart\n const existingSeries = this.overviewChart.sciChartSurface.renderableSeries.asArray().find((series: any) => {\n return series.dataSeries.dataSeriesName === dataKey\n })\n\n if (existingSeries) {\n console.warn(`Series for dataKey ${dataKey} already exists in the overview chart.`)\n return // Exit the function without adding the series again\n }\n\n const dataset = this.config?.data.datasets.find(dataset => dataset.dataKey === dataKey)\n if (!dataset) {\n console.error('Dataset not found for dataKey:', dataKey)\n return\n }\n\n const newSeries = await this.createSeriesForOverview(dataset)\n\n if (newSeries) {\n this.overviewChart.sciChartSurface.renderableSeries.add(newSeries.series)\n this.overviewDataSeries.push(newSeries.dataSeries)\n }\n }\n\n private async removeSeriesFromOverviewChart(dataKey: string) {\n if (!this.overviewChart || !this.overviewDataSeries) {\n console.error('Overview chart is not initialized.')\n return\n }\n\n const { sciChartSurface } = this.overviewChart\n\n // 오버뷰 차트의 renderableSeries에서 해당 시리즈 제거\n const seriesIndex = sciChartSurface.renderableSeries.asArray().findIndex((series: any) => {\n return series.dataSeries.dataSeriesName === dataKey\n })\n\n if (seriesIndex !== -1) {\n const series = sciChartSurface.renderableSeries.get(seriesIndex)\n const yAxisId = series.yAxisId\n\n // 시리즈 제거\n sciChartSurface.renderableSeries.removeAt(seriesIndex)\n this.overviewDataSeries.splice(seriesIndex, 1) // 데이터 시리즈도 제거\n\n // 고유 Y축 제거\n if (yAxisId) {\n const yAxisIndex = sciChartSurface.yAxes.asArray().findIndex((axis: any) => axis.id === yAxisId)\n if (yAxisIndex !== -1) {\n sciChartSurface.yAxes.removeAt(yAxisIndex)\n }\n }\n } else {\n console.error('Series not found in overview chart for dataKey:', dataKey)\n }\n }\n\n private async createSeriesForOverview(dataset: any) {\n if (!this.overviewChart) return null\n\n const { sciChartSurface, wasmContext } = this.overviewChart\n const dataSeries = new XyDataSeries(wasmContext, {\n dataSeriesName: dataset.dataKey,\n containsNaN: false\n })\n\n // 새로운 Y축을 추가하여 노멀라이즈 효과를 제공\n const yAxisId = `yAxis_${dataset.dataKey}`\n const yAxis = new NumericAxis(wasmContext, {\n id: yAxisId,\n autoRange: EAutoRange.Always,\n drawLabels: false,\n drawMajorTickLines: false,\n drawMinorTickLines: false,\n drawMajorGridLines: false,\n drawMinorGridLines: false\n })\n\n sciChartSurface.yAxes.add(yAxis)\n\n const series = new FastLineRenderableSeries(wasmContext, {\n dataSeries,\n strokeThickness: 1,\n stroke: convertColor(dataset.color, DEFAULT_COLOR),\n yAxisId\n })\n\n // 초기 데이터 추가\n const newData = this.dataSet.find((data, index) => this.config?.data.datasets[index].dataKey === dataset.dataKey)\n if (newData && newData.length > 0) {\n const filteredData = newData.filter(d => typeof d.yValue === 'number')\n if (filteredData.length > 0) {\n dataSeries.appendRange(\n filteredData.map(d => d.xValue),\n filteredData.map(d => d.yValue)\n )\n } else {\n console.warn('No valid yValues found for dataset:', dataset.dataKey)\n }\n }\n\n return { series, dataSeries }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ox-scichart-multiple.js","sourceRoot":"","sources":["../../src/charts/ox-scichart-multiple.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, css } from 'lit'\nimport { property, query, customElement } from 'lit/decorators.js'\nimport { keyed } from 'lit/directives/keyed.js'\nimport '@operato/chart'\n\nimport {\n calculatePrecision,\n buildSciChart,\n buildSciChartOverview,\n convertColor,\n updateAnnotations,\n DEFAULT_COLOR\n} from './scichart-builder.js'\nimport { AxisSynchroniser } from './axis-synchronizer.js'\nimport {\n EAutoRange,\n FastLineRenderableSeries,\n NumberRange,\n NumericAxis,\n SciChartVerticalGroup,\n XyDataSeries\n} from 'scichart'\n\nimport { ScrollbarStyles } from '@operato/styles'\n\nimport type { OperatoChart } from '@operato/chart'\n\n@customElement('ox-scichart-multiple')\nexport class OxSciChartMultiple extends LitElement {\n @property({ type: Object }) config: OperatoChart.ChartConfig | null = null\n @property({ type: Array }) data: { [attr: string]: any }[] = []\n @property({ type: Array }) visibleSeries: string[] = []\n @property({ type: Boolean, attribute: 'show-overview' }) showOverview: boolean = true\n\n private synchronizer: AxisSynchroniser = new AxisSynchroniser(new NumberRange(200, 500))\n private verticalGroup: SciChartVerticalGroup = new SciChartVerticalGroup()\n\n private overviewChart: any = null\n private overviewDataSeries: any[] = []\n private groupCharts: {\n dataKey: string\n sciChartSurface: any\n dataSeries: any[]\n }[] = []\n\n private initializationQueue: Promise<void> = Promise.resolve()\n\n /*\n [주의]\n ox-scichart container의 id를 글로벌 유니크하게 해야한다. \n SciChart가 특별히 container의 id를 기반으로 하위 컴포넌트를 구성하고 있기 때문이다.\n shadowDom 안에 있는 container 이더라도, 글로벌 유니크한 id를 제공해야 한다.\n 그렇지 않으면, 단 하나의 차트만 제대로 렌더링된다.\n */\n static idx: number = 0\n\n private containerId: string = 'ox-scichart-multiple' + ++OxSciChartMultiple.idx\n\n @query('.overview') declare overviewContainer: HTMLDivElement\n\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n width: 100%;\n height: 100%;\n }\n\n .overview {\n height: 80px;\n }\n\n #chart-group {\n flex: 1;\n\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n }\n\n .grouped-chart {\n flex: 1;\n\n min-height: 25%;\n }\n\n [hidden] {\n display: none;\n }\n `\n ]\n\n async initializeSciChart() {\n this.cleanup()\n await this.createOverviewChart()\n }\n\n dispose() {\n // 그룹 차트 자원 해제\n this.groupCharts.forEach(chart => {\n if (chart.sciChartSurface) {\n this.synchronizer.removeAxis(chart.sciChartSurface.xAxes.get(0))\n this.verticalGroup.removeSurface(chart.sciChartSurface)\n\n // 각 데이터 시리즈 명시적으로 해제\n chart.dataSeries.forEach(ds => ds.delete())\n\n // 차트 삭제\n chart.sciChartSurface.delete()\n }\n })\n\n // 오버뷰 차트 자원 해제\n if (this.overviewChart) {\n this.overviewChart.sciChartSurface.renderableSeries.clear()\n this.overviewDataSeries.forEach(ds => ds.delete())\n this.overviewChart.sciChartSurface.delete()\n this.overviewDataSeries.length = 0\n }\n\n // 사용된 그룹, 오버뷰 데이터 초기화\n this.groupCharts.length = 0\n this.overviewChart = null\n }\n\n async createOverviewChart() {\n const { chart, dataSeries } =\n (await buildSciChartOverview(\n {\n ...this.config,\n data: { datasets: [] }\n },\n this.overviewContainer,\n {},\n this.synchronizer\n )) || {}\n\n this.verticalGroup.addSurfaceToGroup(chart.sciChartSurface)\n\n this.overviewChart = chart\n this.overviewDataSeries = dataSeries!\n }\n\n async updated(changedProperties: Map<string | number | symbol, unknown>) {\n this.initializationQueue = this.initializationQueue\n .then(async () => {\n let needUpdateDataSeries = false\n let needBuildChartGroup = false\n\n if (changedProperties.has('config') && this.config) {\n await this.initializeSciChart()\n needBuildChartGroup = true\n needUpdateDataSeries = true\n }\n\n if (changedProperties.has('visibleSeries')) {\n await this.updateSeries(this.visibleSeries, changedProperties.get('visibleSeries') as string[])\n /* [중요] buildChartGroup 을 visibleSeries 수정때마다 하는 이유는, render() 의 캐시 컨트롤이 안되기 때문이다. 가급적 시도하지 말라. */\n needBuildChartGroup = true\n needUpdateDataSeries = true\n }\n\n if (changedProperties.has('data')) {\n needUpdateDataSeries = true\n }\n\n if (needBuildChartGroup) {\n await this.buildChartGroup()\n }\n\n if (needUpdateDataSeries) {\n await this.updateDataSeries()\n }\n })\n .catch((error: any) => {\n console.error('Error in updated queue:', error)\n })\n }\n\n cleanup() {\n this.cleanupGroup()\n this.cleanupOverview()\n }\n\n cleanupGroup() {\n this.groupCharts.forEach(chart => {\n if (chart.sciChartSurface) {\n this.synchronizer.removeAxis(chart.sciChartSurface.xAxes.get(0))\n this.verticalGroup.removeSurface(chart.sciChartSurface)\n chart.sciChartSurface.delete()\n }\n })\n\n this.groupCharts.length = 0\n }\n\n cleanupOverview() {\n if (this.overviewChart) {\n this.overviewChart.sciChartSurface.renderableSeries.clear()\n this.overviewDataSeries.forEach(ds => ds.delete())\n this.overviewDataSeries.length = 0\n }\n\n this.overviewChart = null\n }\n\n async updateDataSeries() {\n const { config, data } = this\n const { annotations = [] } = config?.options || {}\n const { data: chartData } = config || {}\n const { datasets = [], labelDataKey: attrX } = config?.data || {}\n\n if (!(data instanceof Array) || !attrX) {\n return []\n }\n\n const newData = this.dataSet\n\n this.groupCharts.forEach(({ dataKey, sciChartSurface, dataSeries }) => {\n try {\n // dataKey로 시작하는 모든 시리즈를 업데이트\n const relatedDatasets = datasets.filter(dataset => dataset.dataKey?.startsWith(dataKey))\n\n // 각 relatedDatasets에 대해 해당하는 dataSeries를 업데이트\n dataSeries.forEach((ds, index) => {\n ds.clear()\n\n const relatedDataset = relatedDatasets[index]\n if (relatedDataset) {\n const filteredData = newData[datasets.findIndex(ds => ds.dataKey === relatedDataset.dataKey)].filter(\n d => typeof d.yValue === 'number'\n )\n\n if (filteredData.length > 0) {\n ds.appendRange(\n filteredData.map(d => d.xValue),\n filteredData.map(d => d.yValue)\n )\n }\n }\n })\n\n updateAnnotations(\n sciChartSurface,\n annotations,\n chartData,\n data\n // config?.options?.fontSize,\n // config?.options?.fontFamily,\n // config?.options?.fontColor\n )\n\n sciChartSurface.zoomExtents()\n sciChartSurface.invalidateElement()\n } catch (error) {\n console.error('Error updating data series:', error)\n }\n })\n\n try {\n // Overview 차트 데이터 업데이트\n this.overviewDataSeries.forEach((ds, index) => {\n const visibleKey = this.visibleSeries[index]\n const dataset = datasets.find(dataset => dataset.dataKey === visibleKey)\n if (!dataset) {\n return\n }\n\n const dataIndex = datasets.findIndex(ds => ds.dataKey === dataset.dataKey)\n const filteredData = newData[dataIndex]?.filter(d => typeof d.yValue === 'number') || []\n\n ds.clear()\n if (filteredData.length > 0) {\n ds.appendRange(\n filteredData.map(d => d.xValue),\n filteredData.map(d => d.yValue)\n )\n }\n })\n\n // this.overviewDataSeries.forEach(ds => ds.clear())\n\n // newData.forEach((data, index) => {\n // if (this.visibleSeries.includes(datasets[index].dataKey!)) {\n // const filteredData = data.filter(d => typeof d.yValue === 'number')\n // if (filteredData.length > 0) {\n // this.overviewDataSeries[index].appendRange(\n // filteredData.map(d => d.xValue),\n // filteredData.map(d => d.yValue)\n // )\n // }\n // }\n // })\n } catch (error) {\n console.error('Error updating overview data series:', error)\n }\n }\n\n get dataSet(): { xValue: number; yValue: number }[][] {\n const { config, data } = this\n const { datasets = [], labelDataKey: attrX } = config?.data || {}\n\n if (!(data instanceof Array) || !attrX) {\n return []\n }\n\n return datasets.map(dataset => {\n return data\n .map(item => {\n if (!item || typeof item !== 'object') {\n return\n }\n\n const xValue = new Date(item[attrX])\n if (isNaN(xValue.getTime())) {\n console.error('Invalid date:', item[attrX])\n return\n }\n\n return {\n xValue: xValue.getTime() / 1000,\n yValue: item[dataset.dataKey!]\n }\n })\n .filter(Boolean) as { xValue: number; yValue: number }[]\n })\n }\n\n render() {\n const { datasets = [] } = this.config?.data || {}\n\n return html`\n <div id=${this.containerId + '-overview'} class=\"overview\" ?hidden=${!this.showOverview}></div>\n <div id=\"chart-group\">\n ${this.visibleSeries.map(dataKey =>\n keyed(\n dataKey,\n html`\n <div\n id=${this.containerId + '-' + dataKey}\n class=\"grouped-chart\"\n ?hidden=${!this.visibleSeries.includes(dataKey!)}\n ></div>\n `\n )\n )}\n </div>\n `\n }\n\n async buildChartGroup() {\n this.cleanupGroup()\n\n const { config } = this\n const { datasets = [] } = config?.data || {}\n\n await Promise.all(\n datasets\n .filter(dataset => this.visibleSeries.includes(dataset.dataKey!))\n .map(async dataset => {\n await this.addChart(dataset.dataKey!)\n })\n )\n }\n\n async updateSeries(after: string[], before: string[]) {\n const addSeries = after?.filter(series => !before?.includes(series)) || []\n const removeSeries = before?.filter(series => !after?.includes(series)) || []\n\n for (const series of removeSeries) {\n await this.removeChart(series)\n }\n\n for (const series of addSeries) {\n await this.addChart(series)\n }\n }\n\n async addChart(dataKey: string) {\n const chartData = await this.createChart(dataKey)\n\n if (chartData) {\n const { chart, dataSeries, dataKey } = chartData\n this.verticalGroup.addSurfaceToGroup(chart.sciChartSurface)\n\n this.groupCharts = this.groupSorter([\n ...this.groupCharts,\n { dataKey, sciChartSurface: chart.sciChartSurface, dataSeries }\n ])\n\n await this.addSeriesToOverviewChart(dataKey)\n }\n }\n\n async removeChart(dataKey: string) {\n const index = this.groupCharts.findIndex(chart => chart.dataKey == dataKey)\n if (index === -1) return\n\n const [groupedChart] = this.groupCharts.splice(index, 1)\n this.destroyChart(groupedChart)\n\n this.groupCharts = this.groupSorter(this.groupCharts)\n\n await this.removeSeriesFromOverviewChart(dataKey)\n }\n\n groupSorter(group: any[]) {\n return group.sort(\n (a, b) =>\n this.visibleSeries.findIndex((s: any) => s.dataKey == a.dataKey) -\n this.visibleSeries.findIndex((s: any) => s.dataKey == b.dataKey)\n )\n }\n\n async appendData(appendum: { [attr: string]: any }[]) {\n if (!appendum || !appendum.length) return\n const { config } = this\n const { datasets = [], labelDataKey: attrX } = config?.data || {}\n if (!attrX) return\n\n // 기존 데이터에 appendum 추가\n this.data = [...this.data, ...appendum]\n\n // 각 그룹 차트에 대해 appendum 데이터를 변환하여 dataSeries에 추가\n this.groupCharts.forEach(chart => {\n const dataset = datasets.find(ds => ds.dataKey === chart.dataKey)\n if (!dataset) return\n\n const newData = appendum\n .map(item => {\n if (!item || typeof item !== 'object') return null\n const xValue = new Date(item[attrX])\n if (isNaN(xValue.getTime())) {\n console.error('Invalid date:', item[attrX])\n return null\n }\n return {\n xValue: xValue.getTime() / 1000,\n yValue: item[dataset.dataKey!]\n }\n })\n .filter(Boolean) as { xValue: number; yValue: number }[]\n\n if (newData.length > 0) {\n chart.dataSeries.forEach(ds => {\n ds.appendRange(\n newData.map(d => d.xValue),\n newData.map(d => d.yValue)\n )\n })\n }\n })\n\n // 오버뷰 차트에도 appendum 데이터 추가\n if (this.overviewDataSeries.length > 0) {\n datasets.forEach((dataset, index) => {\n const newData = appendum\n .map(item => {\n if (!item || typeof item !== 'object') return null\n const xValue = new Date(item[attrX])\n if (isNaN(xValue.getTime())) {\n console.error('Invalid date:', item[attrX])\n return null\n }\n return {\n xValue: xValue.getTime() / 1000,\n yValue: item[dataset.dataKey!]\n }\n })\n .filter(Boolean) as { xValue: number; yValue: number }[]\n\n if (newData.length > 0) {\n this.overviewDataSeries[index].appendRange(\n newData.map(d => d.xValue),\n newData.map(d => d.yValue)\n )\n }\n })\n }\n\n // 차트 갱신\n setTimeout(() => {\n this.groupCharts.forEach(chart => {\n chart.sciChartSurface.zoomExtents()\n chart.sciChartSurface.invalidateElement()\n })\n if (this.overviewChart) {\n this.overviewChart.sciChartSurface.zoomExtents()\n this.overviewChart.sciChartSurface.invalidateElement()\n }\n }, 200)\n }\n\n private async createChart(dataKey: string) {\n const { data = {}, options = {} } = this.config || {}\n const { datasets = [] } = data as OperatoChart.ChartData\n const primaryDataset = datasets.find(dataset => dataset.dataKey == dataKey)\n\n if (!primaryDataset) {\n return null\n }\n\n const relatedDatasets = datasets.filter(dataset => dataset.dataKey?.startsWith(dataKey))\n\n const yAxis = {\n ...options.scales?.yAxes?.[0],\n axisTitle: primaryDataset?.label\n }\n\n const config = {\n ...this.config,\n data: {\n datasets: relatedDatasets\n },\n options: {\n ...options,\n scales: {\n ...options.scales,\n yAxes: [yAxis]\n }\n }\n }\n\n const container = this.renderRoot.querySelector(`#${this.containerId + '-' + dataKey}`)\n const { chart, dataSeries } = (await buildSciChart(\n config,\n container,\n { fontSize: 14, fontFamily: 'Roboto', fontColor: undefined },\n {\n precision: primaryDataset.valueFormat ? calculatePrecision(primaryDataset.valueFormat) : undefined,\n grouped: this.containerId\n }\n ))!\n\n this.synchronizer.addAxis(chart.sciChartSurface.xAxes.get(0))\n\n // 각 시리즈에 대해 올바른 데이터를 추가\n const newData = this.dataSet\n dataSeries.forEach((ds, seriesIndex) => {\n const dataset = relatedDatasets[seriesIndex]\n const filteredData = newData[seriesIndex]?.filter(d => typeof d.yValue === 'number') || []\n if (filteredData.length > 0) {\n ds.appendRange(\n filteredData.map(d => d.xValue),\n filteredData.map(d => d.yValue)\n )\n }\n })\n\n const { annotations = [] } = this.config?.options || {}\n updateAnnotations(chart.sciChartSurface, annotations, this.config?.data, this.data)\n\n return { chart, dataSeries, dataKey }\n }\n\n private destroyChart(groupedChart: { dataKey: string; sciChartSurface: any; dataSeries: any[] }) {\n this.verticalGroup.removeSurface(groupedChart.sciChartSurface)\n this.synchronizer.removeAxis(groupedChart.sciChartSurface.xAxes.get(0))\n groupedChart.sciChartSurface.delete()\n }\n\n private async addSeriesToOverviewChart(dataKey: string) {\n if (!this.overviewChart || !this.overviewDataSeries) {\n console.error('Overview chart is not initialized.')\n return\n }\n\n // Check if the series already exists in the overview chart\n const existingSeries = this.overviewChart.sciChartSurface.renderableSeries.asArray().find((series: any) => {\n return series.dataSeries.dataSeriesName === dataKey\n })\n\n if (existingSeries) {\n console.warn(`Series for dataKey ${dataKey} already exists in the overview chart.`)\n return // Exit the function without adding the series again\n }\n\n const dataset = this.config?.data.datasets.find(dataset => dataset.dataKey === dataKey)\n if (!dataset) {\n console.error('Dataset not found for dataKey:', dataKey)\n return\n }\n\n const newSeries = await this.createSeriesForOverview(dataset)\n\n if (newSeries) {\n this.overviewChart.sciChartSurface.renderableSeries.add(newSeries.series)\n this.overviewDataSeries.push(newSeries.dataSeries)\n }\n }\n\n private async removeSeriesFromOverviewChart(dataKey: string) {\n if (!this.overviewChart || !this.overviewDataSeries) {\n console.error('Overview chart is not initialized.')\n return\n }\n\n const { sciChartSurface } = this.overviewChart\n\n // 오버뷰 차트의 renderableSeries에서 해당 시리즈 제거\n const seriesIndex = sciChartSurface.renderableSeries.asArray().findIndex((series: any) => {\n return series.dataSeries.dataSeriesName === dataKey\n })\n\n if (seriesIndex !== -1) {\n const series = sciChartSurface.renderableSeries.get(seriesIndex)\n const yAxisId = series.yAxisId\n\n // 시리즈 제거\n sciChartSurface.renderableSeries.removeAt(seriesIndex)\n this.overviewDataSeries.splice(seriesIndex, 1) // 데이터 시리즈도 제거\n\n // 고유 Y축 제거\n if (yAxisId) {\n const yAxisIndex = sciChartSurface.yAxes.asArray().findIndex((axis: any) => axis.id === yAxisId)\n if (yAxisIndex !== -1) {\n sciChartSurface.yAxes.removeAt(yAxisIndex)\n }\n }\n } else {\n console.error('Series not found in overview chart for dataKey:', dataKey)\n }\n }\n\n private async createSeriesForOverview(dataset: any) {\n if (!this.overviewChart) return null\n\n const { sciChartSurface, wasmContext } = this.overviewChart\n const dataSeries = new XyDataSeries(wasmContext, {\n dataSeriesName: dataset.dataKey,\n containsNaN: false\n })\n\n // 새로운 Y축을 추가하여 노멀라이즈 효과를 제공\n const yAxisId = `yAxis_${dataset.dataKey}`\n const yAxis = new NumericAxis(wasmContext, {\n id: yAxisId,\n autoRange: EAutoRange.Always,\n drawLabels: false,\n drawMajorTickLines: false,\n drawMinorTickLines: false,\n drawMajorGridLines: false,\n drawMinorGridLines: false\n })\n\n sciChartSurface.yAxes.add(yAxis)\n\n const series = new FastLineRenderableSeries(wasmContext, {\n dataSeries,\n strokeThickness: 1,\n stroke: convertColor(dataset.color, DEFAULT_COLOR),\n yAxisId\n })\n\n // 초기 데이터 추가\n const newData = this.dataSet.find((data, index) => this.config?.data.datasets[index].dataKey === dataset.dataKey)\n if (newData && newData.length > 0) {\n const filteredData = newData.filter(d => typeof d.yValue === 'number')\n if (filteredData.length > 0) {\n dataSeries.appendRange(\n filteredData.map(d => d.xValue),\n filteredData.map(d => d.yValue)\n )\n } else {\n console.warn('No valid yValues found for dataset:', dataset.dataKey)\n }\n }\n\n return { series, dataSeries }\n }\n}\n"]}
|
|
@@ -8,9 +8,9 @@ export declare class OxSciChart extends LitElement {
|
|
|
8
8
|
}[];
|
|
9
9
|
chart: any;
|
|
10
10
|
private dataSeries;
|
|
11
|
+
static idx: number;
|
|
11
12
|
private containerId;
|
|
12
13
|
container: HTMLDivElement;
|
|
13
|
-
static idx: number;
|
|
14
14
|
static styles: import("lit").CSSResult;
|
|
15
15
|
initializeSciChart(): Promise<void>;
|
|
16
16
|
dispose(): void;
|