@operato/scene-scichart 7.0.5 → 7.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +19 -0
- package/db.sqlite +0 -0
- package/dist/charts/axis-synchronizer.d.ts +10 -0
- package/dist/charts/axis-synchronizer.js +32 -0
- package/dist/charts/axis-synchronizer.js.map +1 -0
- package/dist/charts/ox-scichart-multiple.d.ts +40 -0
- package/dist/charts/ox-scichart-multiple.js +272 -0
- package/dist/charts/ox-scichart-multiple.js.map +1 -0
- package/dist/charts/ox-scichart.d.ts +1 -1
- package/dist/charts/ox-scichart.js.map +1 -1
- package/dist/charts/scichart-builder.d.ts +10 -1
- package/dist/charts/scichart-builder.js +154 -12
- package/dist/charts/scichart-builder.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/scichart-multiple-timeseries.d.ts +14 -0
- package/dist/scichart-multiple-timeseries.js +60 -0
- package/dist/scichart-multiple-timeseries.js.map +1 -0
- package/dist/scichart-timeseries.d.ts +2 -11
- package/dist/scichart-timeseries.js +2 -42
- package/dist/scichart-timeseries.js.map +1 -1
- package/dist/templates/index.d.ts +2 -19
- package/dist/templates/index.js +2 -1
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/scichart-multiple-timeseries.d.ts +53 -0
- package/dist/templates/scichart-multiple-timeseries.js +81 -0
- package/dist/templates/scichart-multiple-timeseries.js.map +1 -0
- package/dist/templates/scichart-timeseries.d.ts +2 -19
- package/dist/templates/scichart-timeseries.js +2 -19
- package/dist/templates/scichart-timeseries.js.map +1 -1
- package/helps/scene/component/scichart-multiple-timeseries.md +23 -0
- package/helps/scene/component/scichart-timeseries.md +18 -0
- package/icons/scichart-multiple-timeseries.png +0 -0
- package/logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json +9 -9
- package/logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json +24 -9
- package/logs/{application-2024-07-08-22.log → application-2024-07-28-03.log} +9 -9
- package/logs/{application-2024-07-08-23.log → application-2024-07-28-17.log} +140 -43
- package/logs/{application-2024-07-09-15.log → application-2024-07-28-18.log} +18 -18
- package/logs/connections-2024-07-23-14.log +50 -0
- package/logs/connections-2024-07-25-23.log +50 -0
- package/logs/connections-2024-07-26-18.log +50 -0
- package/logs/connections-2024-07-28-03.log +50 -0
- package/logs/connections-2024-07-28-17.log +200 -0
- package/logs/connections-2024-07-28-18.log +100 -0
- package/package.json +2 -2
- package/schema.graphql +211 -0
- package/src/charts/axis-synchronizer.ts +37 -0
- package/src/charts/ox-scichart-multiple.ts +334 -0
- package/src/charts/ox-scichart.ts +1 -1
- package/src/charts/scichart-builder.ts +197 -11
- package/src/index.ts +1 -0
- package/src/scichart-multiple-timeseries.ts +74 -0
- package/src/scichart-timeseries.ts +3 -54
- package/src/templates/index.ts +2 -1
- package/src/templates/scichart-multiple-timeseries.ts +87 -0
- package/src/templates/scichart-timeseries.ts +2 -19
- package/things-scene.config.js +0 -2
- package/translations/en.json +3 -1
- package/translations/ja.json +3 -1
- package/translations/ko.json +3 -1
- package/translations/ms.json +3 -1
- package/translations/zh.json +3 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/cache/translations/system/en.json +0 -1
- package/cache/translations/system/ko.json +0 -1
- package/logs/connections-2024-07-08-22.log +0 -50
- package/logs/connections-2024-07-08-23.log +0 -100
- package/logs/connections-2024-07-09-15.log +0 -100
package/CHANGELOG.md
CHANGED
@@ -3,6 +3,25 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
5
5
|
|
6
|
+
## [7.1.0](https://github.com/things-scene/operato-scene/compare/v7.0.12...v7.1.0) (2024-07-28)
|
7
|
+
|
8
|
+
|
9
|
+
### :rocket: New Features
|
10
|
+
|
11
|
+
* scichart-multiple-timeseries ([d8c6f99](https://github.com/things-scene/operato-scene/commit/d8c6f997bb7118f0400c0f114a42fa1040ebe0d5))
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
## [7.0.7](https://github.com/things-scene/operato-scene/compare/v7.0.6...v7.0.7) (2024-07-13)
|
16
|
+
|
17
|
+
|
18
|
+
### :bug: Bug Fix
|
19
|
+
|
20
|
+
* annotations for scichart-builder ([527abe4](https://github.com/things-scene/operato-scene/commit/527abe4c8cabcce6e321470dc9b2121717aa6a89))
|
21
|
+
* multiAxis for scichart-builder ([e750ad8](https://github.com/things-scene/operato-scene/commit/e750ad8131c1389e89186071b032187b594fbf43))
|
22
|
+
|
23
|
+
|
24
|
+
|
6
25
|
## [7.0.5](https://github.com/things-scene/operato-scene/compare/v7.0.4...v7.0.5) (2024-07-09)
|
7
26
|
|
8
27
|
|
package/db.sqlite
CHANGED
Binary file
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { AxisBase2D, EventHandler, NumberRange, VisibleRangeChangedArgs } from 'scichart';
|
2
|
+
export declare class AxisSynchroniser {
|
3
|
+
visibleRange: NumberRange;
|
4
|
+
private axes;
|
5
|
+
visibleRangeChanged: EventHandler<VisibleRangeChangedArgs>;
|
6
|
+
constructor(initialRange: NumberRange, axes?: AxisBase2D[]);
|
7
|
+
publishChange(data?: VisibleRangeChangedArgs): void;
|
8
|
+
addAxis(axis: AxisBase2D): void;
|
9
|
+
removeAxis(axis: AxisBase2D): void;
|
10
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import { EventHandler } from 'scichart';
|
2
|
+
export class AxisSynchroniser {
|
3
|
+
constructor(initialRange, axes) {
|
4
|
+
this.axes = [];
|
5
|
+
this.visibleRangeChanged = new EventHandler();
|
6
|
+
this.visibleRange = initialRange;
|
7
|
+
this.publishChange = this.publishChange.bind(this);
|
8
|
+
if (axes) {
|
9
|
+
axes.forEach(a => this.addAxis(a));
|
10
|
+
}
|
11
|
+
}
|
12
|
+
publishChange(data) {
|
13
|
+
this.visibleRange = data.visibleRange;
|
14
|
+
this.axes.forEach(a => (a.visibleRange = this.visibleRange));
|
15
|
+
this.visibleRangeChanged.raiseEvent(data);
|
16
|
+
}
|
17
|
+
addAxis(axis) {
|
18
|
+
if (!this.axes.includes(axis)) {
|
19
|
+
this.axes.push(axis);
|
20
|
+
axis.visibleRange = this.visibleRange;
|
21
|
+
axis.visibleRangeChanged.subscribe(this.publishChange);
|
22
|
+
}
|
23
|
+
}
|
24
|
+
removeAxis(axis) {
|
25
|
+
const index = this.axes.findIndex(a => a === axis);
|
26
|
+
if (index >= 0) {
|
27
|
+
this.axes.splice(index, 1);
|
28
|
+
axis.visibleRangeChanged.unsubscribe(this.publishChange);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
//# sourceMappingURL=axis-synchronizer.js.map
|
@@ -0,0 +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;IAK3B,YAAmB,YAAyB,EAAE,IAAmB;QAHzD,SAAI,GAAiB,EAAE,CAAA;QACxB,wBAAmB,GAA0C,IAAI,YAAY,EAA2B,CAAA;QAG7G,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"]}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import { LitElement } from 'lit';
|
2
|
+
export declare class OxSciChartMultiple extends LitElement {
|
3
|
+
config: OperatoChart.ChartConfig | null;
|
4
|
+
data: {
|
5
|
+
[attr: string]: any;
|
6
|
+
}[];
|
7
|
+
visibleSeries: string[];
|
8
|
+
showOverview: boolean;
|
9
|
+
private synchronizer;
|
10
|
+
private verticalGroup;
|
11
|
+
private isInitializing;
|
12
|
+
private overviewChart;
|
13
|
+
private overviewDataSeries;
|
14
|
+
private groupCharts;
|
15
|
+
private containerId;
|
16
|
+
overviewContainer: HTMLDivElement;
|
17
|
+
static idx: number;
|
18
|
+
static styles: import("lit").CSSResult[];
|
19
|
+
initializeSciChart(): Promise<void>;
|
20
|
+
updated(changedProperties: Map<string | number | symbol, unknown>): Promise<void>;
|
21
|
+
private ensureInitialization;
|
22
|
+
cleanup(): void;
|
23
|
+
cleanupGroup(): void;
|
24
|
+
updateDataSeries(): Promise<never[] | undefined>;
|
25
|
+
get dataSet(): {
|
26
|
+
xValue: number;
|
27
|
+
yValue: number;
|
28
|
+
}[][];
|
29
|
+
render(): import("lit-html").TemplateResult<1>;
|
30
|
+
buildChartGroup(): Promise<void>;
|
31
|
+
updateSeries(after: string[], before: string[]): Promise<void>;
|
32
|
+
addChart(dataKey: string): Promise<void>;
|
33
|
+
removeChart(dataKey: string): void;
|
34
|
+
groupSorter(group: any[]): any[];
|
35
|
+
}
|
36
|
+
declare global {
|
37
|
+
interface HTMLElementTagNameMap {
|
38
|
+
'ox-scichart-multiple': OxSciChartMultiple;
|
39
|
+
}
|
40
|
+
}
|
@@ -0,0 +1,272 @@
|
|
1
|
+
var OxSciChartMultiple_1;
|
2
|
+
import { __decorate } from "tslib";
|
3
|
+
import { LitElement, html, css } from 'lit';
|
4
|
+
import { property, query, customElement } from 'lit/decorators.js';
|
5
|
+
import { keyed } from 'lit/directives/keyed.js';
|
6
|
+
import { buildSciChart, buildSciChartOverview } from './scichart-builder';
|
7
|
+
import { AxisSynchroniser } from './axis-synchronizer';
|
8
|
+
import { NumberRange, SciChartVerticalGroup } from 'scichart';
|
9
|
+
import { ScrollbarStyles } from '@operato/styles';
|
10
|
+
let OxSciChartMultiple = OxSciChartMultiple_1 = class OxSciChartMultiple extends LitElement {
|
11
|
+
constructor() {
|
12
|
+
super(...arguments);
|
13
|
+
this.config = null;
|
14
|
+
this.data = [];
|
15
|
+
this.visibleSeries = [];
|
16
|
+
this.showOverview = true;
|
17
|
+
this.synchronizer = new AxisSynchroniser(new NumberRange(200, 500));
|
18
|
+
this.verticalGroup = new SciChartVerticalGroup();
|
19
|
+
this.isInitializing = false;
|
20
|
+
this.overviewChart = null;
|
21
|
+
this.overviewDataSeries = [];
|
22
|
+
this.groupCharts = [];
|
23
|
+
/*
|
24
|
+
[주의]
|
25
|
+
ox-scichart container의 id를 글로벌 유니크하게 해야한다.
|
26
|
+
SciChart가 특별히 container의 id를 기반으로 하위 컴포넌트를 구성하고 있기 때문이다.
|
27
|
+
shadowDom 안에 있는 container 이더라도, 글로벌 유니크한 id를 제공해야 한다.
|
28
|
+
그렇지 않으면, 단 하나의 차트만 제대로 렌더링된다.
|
29
|
+
*/
|
30
|
+
this.containerId = 'ox-scichart-multiple' + ++OxSciChartMultiple_1.idx;
|
31
|
+
}
|
32
|
+
async initializeSciChart() {
|
33
|
+
this.cleanup();
|
34
|
+
const { chart, dataSeries } = (await buildSciChartOverview(this.config, this.overviewContainer, {}, this.synchronizer)) || {};
|
35
|
+
this.verticalGroup.addSurfaceToGroup(chart.sciChartSurface);
|
36
|
+
this.overviewChart = chart;
|
37
|
+
this.overviewDataSeries = dataSeries;
|
38
|
+
}
|
39
|
+
async updated(changedProperties) {
|
40
|
+
var needDataUpdate = false;
|
41
|
+
if (changedProperties.has('config') && this.config) {
|
42
|
+
this.isInitializing = true;
|
43
|
+
await this.initializeSciChart();
|
44
|
+
this.isInitializing = false;
|
45
|
+
needDataUpdate = true;
|
46
|
+
}
|
47
|
+
if (changedProperties.has('visibleSeries')) {
|
48
|
+
if (this.isInitializing) {
|
49
|
+
await this.ensureInitialization();
|
50
|
+
}
|
51
|
+
await this.updateSeries(this.visibleSeries, changedProperties.get('visibleSeries'));
|
52
|
+
needDataUpdate = true;
|
53
|
+
}
|
54
|
+
if (changedProperties.has('data')) {
|
55
|
+
needDataUpdate = true;
|
56
|
+
}
|
57
|
+
if (needDataUpdate) {
|
58
|
+
await this.updateDataSeries();
|
59
|
+
}
|
60
|
+
}
|
61
|
+
async ensureInitialization() {
|
62
|
+
while (this.isInitializing) {
|
63
|
+
await new Promise(resolve => setTimeout(resolve, 100)); // Check every 100ms
|
64
|
+
}
|
65
|
+
}
|
66
|
+
cleanup() {
|
67
|
+
var _a;
|
68
|
+
this.cleanupGroup();
|
69
|
+
if (this.overviewChart) {
|
70
|
+
(_a = this.overviewChart.sciChartSurface) === null || _a === void 0 ? void 0 : _a.delete();
|
71
|
+
this.overviewChart = null;
|
72
|
+
}
|
73
|
+
}
|
74
|
+
cleanupGroup() {
|
75
|
+
this.groupCharts.forEach(chart => {
|
76
|
+
if (chart.sciChartSurface) {
|
77
|
+
this.synchronizer.removeAxis(chart.sciChartSurface.xAxes.get(0));
|
78
|
+
this.verticalGroup.removeSurface(chart.sciChartSurface);
|
79
|
+
chart.sciChartSurface.delete();
|
80
|
+
}
|
81
|
+
});
|
82
|
+
this.groupCharts.length = 0;
|
83
|
+
}
|
84
|
+
async updateDataSeries() {
|
85
|
+
var _a, _b;
|
86
|
+
const { config, data } = this;
|
87
|
+
const { datasets = [], labelDataKey: attrX } = (config === null || config === void 0 ? void 0 : config.data) || {};
|
88
|
+
if (!(data instanceof Array) || !attrX) {
|
89
|
+
return [];
|
90
|
+
}
|
91
|
+
const newData = this.dataSet;
|
92
|
+
(this.groupCharts || []).forEach(({ dataKey, sciChartSurface, dataSeries }) => {
|
93
|
+
dataSeries.forEach(ds => ds.clear());
|
94
|
+
const dataSet = newData.filter((data, index) => dataKey == datasets[index].dataKey);
|
95
|
+
dataSet.forEach((data, index) => {
|
96
|
+
dataSeries[index].appendRange(data.map(d => d.xValue), data.map(d => d.yValue));
|
97
|
+
});
|
98
|
+
sciChartSurface.zoomExtents();
|
99
|
+
sciChartSurface.invalidateElement();
|
100
|
+
});
|
101
|
+
this.overviewDataSeries.forEach(ds => ds.clear());
|
102
|
+
newData.forEach((data, index) => {
|
103
|
+
if (this.visibleSeries.includes(datasets[index].dataKey)) {
|
104
|
+
this.overviewDataSeries[index].appendRange(data.map(d => d.xValue), data.map(d => d.yValue));
|
105
|
+
}
|
106
|
+
});
|
107
|
+
(_a = this.overviewChart) === null || _a === void 0 ? void 0 : _a.sciChartSurface.zoomExtents();
|
108
|
+
(_b = this.overviewChart) === null || _b === void 0 ? void 0 : _b.sciChartSurface.invalidateElement();
|
109
|
+
}
|
110
|
+
get dataSet() {
|
111
|
+
const { config, data } = this;
|
112
|
+
const { datasets = [], labelDataKey: attrX } = (config === null || config === void 0 ? void 0 : config.data) || {};
|
113
|
+
if (!(data instanceof Array) || !attrX) {
|
114
|
+
return [];
|
115
|
+
}
|
116
|
+
return datasets.map(dataset => {
|
117
|
+
return data
|
118
|
+
.map(item => {
|
119
|
+
if (!item || typeof item !== 'object') {
|
120
|
+
return;
|
121
|
+
}
|
122
|
+
const xValue = new Date(item[attrX]);
|
123
|
+
if (isNaN(xValue.getTime())) {
|
124
|
+
console.error('Invalid date:', item[attrX]);
|
125
|
+
return;
|
126
|
+
}
|
127
|
+
return {
|
128
|
+
xValue: xValue.getTime() / 1000,
|
129
|
+
yValue: item[dataset.dataKey]
|
130
|
+
};
|
131
|
+
})
|
132
|
+
.filter(Boolean);
|
133
|
+
});
|
134
|
+
}
|
135
|
+
render() {
|
136
|
+
var _a;
|
137
|
+
const { datasets = [] } = ((_a = this.config) === null || _a === void 0 ? void 0 : _a.data) || {};
|
138
|
+
return html `
|
139
|
+
<div id=${this.containerId + '-overview'} class="overview" ?hidden=${!this.showOverview}></div>
|
140
|
+
<div id="chart-group">
|
141
|
+
${datasets.map(({ dataKey }) => keyed(dataKey, html `
|
142
|
+
<div
|
143
|
+
id=${this.containerId + '-' + dataKey}
|
144
|
+
class="grouped-chart"
|
145
|
+
?hidden=${!this.visibleSeries.includes(dataKey)}
|
146
|
+
></div>
|
147
|
+
`))}
|
148
|
+
</div>
|
149
|
+
`;
|
150
|
+
}
|
151
|
+
async buildChartGroup() {
|
152
|
+
this.cleanupGroup();
|
153
|
+
const { config } = this;
|
154
|
+
const { datasets = [] } = (config === null || config === void 0 ? void 0 : config.data) || {};
|
155
|
+
await Promise.all(datasets
|
156
|
+
.filter(dataset => this.visibleSeries.includes(dataset.dataKey))
|
157
|
+
.map(async (dataset) => {
|
158
|
+
await this.addChart(dataset.dataKey);
|
159
|
+
}));
|
160
|
+
}
|
161
|
+
async updateSeries(after, before) {
|
162
|
+
/* 기존 시리즈와 새로운 시리즈의 차이를 비교해서, before에는 있는데, after에는 없으면 await removeChart(string)를 호출하고, after에는 있는데, before에는 없으면, addChart(string) 한다. */
|
163
|
+
// before에는 있는데 after에는 없는 시리즈를 제거합니다.
|
164
|
+
for (const series of before || []) {
|
165
|
+
if (!after.includes(series)) {
|
166
|
+
await this.removeChart(series);
|
167
|
+
}
|
168
|
+
}
|
169
|
+
// after에는 있는데 before에는 없는 시리즈를 추가합니다.
|
170
|
+
for (const series of after || []) {
|
171
|
+
if (!before || !before.includes(series)) {
|
172
|
+
await this.addChart(series);
|
173
|
+
}
|
174
|
+
}
|
175
|
+
}
|
176
|
+
async addChart(dataKey) {
|
177
|
+
var _a;
|
178
|
+
const groupedChart = {
|
179
|
+
dataKey: '',
|
180
|
+
sciChartSurface: undefined,
|
181
|
+
dataSeries: []
|
182
|
+
};
|
183
|
+
const { data } = this;
|
184
|
+
const { datasets = [] } = ((_a = this.config) === null || _a === void 0 ? void 0 : _a.data) || {};
|
185
|
+
const config = {
|
186
|
+
...this.config,
|
187
|
+
data: {
|
188
|
+
...data,
|
189
|
+
datasets: datasets.filter(dataset => dataset.dataKey == dataKey)
|
190
|
+
}
|
191
|
+
};
|
192
|
+
const container = this.renderRoot.querySelector(`#${this.containerId + '-' + dataKey}`);
|
193
|
+
var { chart, dataSeries } = (await buildSciChart(config, container, { fontSize: undefined, fontFamily: undefined, fontColor: undefined }, this.containerId));
|
194
|
+
this.verticalGroup.addSurfaceToGroup(chart.sciChartSurface);
|
195
|
+
this.synchronizer.addAxis(chart.sciChartSurface.xAxes.get(0));
|
196
|
+
groupedChart.dataKey = config.data.datasets[0].dataKey;
|
197
|
+
groupedChart.sciChartSurface = chart.sciChartSurface;
|
198
|
+
groupedChart.dataSeries = dataSeries;
|
199
|
+
this.groupCharts = this.groupSorter([...this.groupCharts, groupedChart]);
|
200
|
+
}
|
201
|
+
removeChart(dataKey) {
|
202
|
+
const index = this.groupCharts.findIndex((chart) => chart.dataKey == dataKey);
|
203
|
+
const [groupedChart] = this.groupCharts.splice(index, 1);
|
204
|
+
if (!groupedChart) {
|
205
|
+
return;
|
206
|
+
}
|
207
|
+
this.verticalGroup.removeSurface(groupedChart.sciChartSurface);
|
208
|
+
this.synchronizer.removeAxis(groupedChart.sciChartSurface.xAxes.get(0));
|
209
|
+
groupedChart.sciChartSurface.delete();
|
210
|
+
groupedChart.sciChartSurface = undefined;
|
211
|
+
this.groupCharts = this.groupSorter(this.groupCharts);
|
212
|
+
}
|
213
|
+
groupSorter(group) {
|
214
|
+
return group.sort((a, b) => this.visibleSeries.findIndex((s) => s.dataKey == a.dataKey) -
|
215
|
+
this.visibleSeries.findIndex((s) => s.dataKey == b.dataKey));
|
216
|
+
}
|
217
|
+
};
|
218
|
+
OxSciChartMultiple.idx = 0;
|
219
|
+
OxSciChartMultiple.styles = [
|
220
|
+
ScrollbarStyles,
|
221
|
+
css `
|
222
|
+
:host {
|
223
|
+
display: flex;
|
224
|
+
flex-direction: column;
|
225
|
+
|
226
|
+
width: 100%;
|
227
|
+
height: 100%;
|
228
|
+
}
|
229
|
+
|
230
|
+
.overview {
|
231
|
+
height: 80px;
|
232
|
+
}
|
233
|
+
|
234
|
+
#chart-group {
|
235
|
+
flex: 1;
|
236
|
+
|
237
|
+
display: flex;
|
238
|
+
flex-direction: column;
|
239
|
+
overflow-y: auto;
|
240
|
+
}
|
241
|
+
|
242
|
+
.grouped-chart {
|
243
|
+
flex: 1;
|
244
|
+
|
245
|
+
min-height: 25%;
|
246
|
+
}
|
247
|
+
|
248
|
+
[hidden] {
|
249
|
+
display: none;
|
250
|
+
}
|
251
|
+
`
|
252
|
+
];
|
253
|
+
__decorate([
|
254
|
+
property({ type: Object })
|
255
|
+
], OxSciChartMultiple.prototype, "config", void 0);
|
256
|
+
__decorate([
|
257
|
+
property({ type: Array })
|
258
|
+
], OxSciChartMultiple.prototype, "data", void 0);
|
259
|
+
__decorate([
|
260
|
+
property({ type: Array })
|
261
|
+
], OxSciChartMultiple.prototype, "visibleSeries", void 0);
|
262
|
+
__decorate([
|
263
|
+
property({ type: Boolean, attribute: 'show-overview' })
|
264
|
+
], OxSciChartMultiple.prototype, "showOverview", void 0);
|
265
|
+
__decorate([
|
266
|
+
query('.overview')
|
267
|
+
], OxSciChartMultiple.prototype, "overviewContainer", void 0);
|
268
|
+
OxSciChartMultiple = OxSciChartMultiple_1 = __decorate([
|
269
|
+
customElement('ox-scichart-multiple')
|
270
|
+
], OxSciChartMultiple);
|
271
|
+
export { OxSciChartMultiple };
|
272
|
+
//# sourceMappingURL=ox-scichart-multiple.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ox-scichart-multiple.js","sourceRoot":"","sources":["../../src/charts/ox-scichart-multiple.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAE/C,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAG1C,IAAM,kBAAkB,0BAAxB,MAAM,kBAAmB,SAAQ,UAAU;IAA3C;;QACuB,WAAM,GAAoC,IAAI,CAAA;QAC/C,SAAI,GAA8B,EAAE,CAAA;QACpC,kBAAa,GAAa,EAAE,CAAA;QACE,iBAAY,GAAY,IAAI,CAAA;QAE7E,iBAAY,GAAqB,IAAI,gBAAgB,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;QAChF,kBAAa,GAA0B,IAAI,qBAAqB,EAAE,CAAA;QAElE,mBAAc,GAAY,KAAK,CAAA;QAC/B,kBAAa,GAAQ,IAAI,CAAA;QACzB,uBAAkB,GAAU,EAAE,CAAA;QAC9B,gBAAW,GAIb,EAAE,CAAA;QAER;;;;;;WAMG;QACK,gBAAW,GAAW,sBAAsB,GAAG,EAAE,oBAAkB,CAAC,GAAG,CAAA;IAmSjF,CAAC;IA1PC,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC,OAAO,EAAE,CAAA;QAEd,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GACzB,CAAC,MAAM,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAA;QAEjG,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QAE3D,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;QAC1B,IAAI,CAAC,kBAAkB,GAAG,UAAW,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,iBAAyD;QACrE,IAAI,cAAc,GAAG,KAAK,CAAA;QAE1B,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACnD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;YAC1B,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;YAC/B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;YAC3B,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAA;YACnC,CAAC;YACD,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,GAAG,CAAC,eAAe,CAAa,CAAC,CAAA;YAC/F,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAC/B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA,CAAC,oBAAoB;QAC7E,CAAC;IACH,CAAC;IAED,OAAO;;QACL,IAAI,CAAC,YAAY,EAAE,CAAA;QAEnB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAA,IAAI,CAAC,aAAa,CAAC,eAAe,0CAAE,MAAM,EAAE,CAAA;YAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,YAAY;QACV,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC/B,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC1B,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBAChE,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;gBACvD,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,CAAA;YAChC,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,gBAAgB;;QACpB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;QAC7B,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,EAAE,CAAA;QAEjE,IAAI,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAE3B;QAAA,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,EAAE;YAC7E,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;YACpC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAQ,CAAC,CAAA;YAEpF,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC9B,UAAU,CAAC,KAAK,CAAC,CAAC,WAAW,CAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EACvB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CACxB,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,eAAe,CAAC,WAAW,EAAE,CAAA;YAC7B,eAAe,CAAC,iBAAiB,EAAE,CAAA;QACrC,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;QAEjD,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC9B,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAQ,CAAC,EAAE,CAAC;gBAC1D,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,WAAW,CACxC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EACvB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CACxB,CAAA;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,MAAA,IAAI,CAAC,aAAa,0CAAE,eAAe,CAAC,WAAW,EAAE,CAAA;QACjD,MAAA,IAAI,CAAC,aAAa,0CAAE,eAAe,CAAC,iBAAiB,EAAE,CAAA;IACzD,CAAC;IAED,IAAI,OAAO;QACT,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;QAC7B,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,EAAE,CAAA;QAEjE,IAAI,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,OAAO,EAAE,CAAA;QACX,CAAC;QAED,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAC5B,OAAO,IAAI;iBACR,GAAG,CAAC,IAAI,CAAC,EAAE;gBACV,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtC,OAAM;gBACR,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;gBACpC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;oBAC5B,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;oBAC3C,OAAM;gBACR,CAAC;gBAED,OAAO;oBACL,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI;oBAC/B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC;iBAC/B,CAAA;YACH,CAAC,CAAC;iBACD,MAAM,CAAC,OAAO,CAAyC,CAAA;QAC5D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM;;QACJ,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,KAAI,EAAE,CAAA;QAEjD,OAAO,IAAI,CAAA;gBACC,IAAI,CAAC,WAAW,GAAG,WAAW,6BAA6B,CAAC,IAAI,CAAC,YAAY;;UAEnF,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAC7B,KAAK,CACH,OAAO,EACP,IAAI,CAAA;;qBAEK,IAAI,CAAC,WAAW,GAAG,GAAG,GAAG,OAAO;;0BAE3B,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAQ,CAAC;;aAEnD,CACF,CACF;;KAEJ,CAAA;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,YAAY,EAAE,CAAA;QAEnB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QACvB,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,EAAE,CAAA;QAE5C,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ;aACL,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAQ,CAAC,CAAC;aAChE,GAAG,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;YACnB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAQ,CAAC,CAAA;QACvC,CAAC,CAAC,CACL,CAAA;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAe,EAAE,MAAgB;QAClD,2IAA2I;QAC3I,sCAAsC;QACtC,KAAK,MAAM,MAAM,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,KAAK,MAAM,MAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;;QAC5B,MAAM,YAAY,GAAG;YACnB,OAAO,EAAE,EAAE;YACX,eAAe,EAAE,SAAS;YAC1B,UAAU,EAAE,EAAW;SACxB,CAAA;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;QACrB,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,KAAI,EAAE,CAAA;QAEjD,MAAM,MAAM,GAAG;YACb,GAAG,IAAI,CAAC,MAAM;YACd,IAAI,EAAE;gBACJ,GAAG,IAAI;gBACP,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;aACjE;SACF,CAAA;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG,GAAG,OAAO,EAAE,CAAC,CAAA;QACvF,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,aAAa,CAC9C,MAAM,EACN,SAAS,EACT,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,EACpE,IAAI,CAAC,WAAW,CACjB,CAAE,CAAA;QAEH,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QAC3D,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAE7D,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAQ,CAAA;QACxD,YAAY,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAA;QACpD,YAAY,CAAC,UAAU,GAAG,UAAU,CAAA;QAEpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;IAC1E,CAAC;IAED,WAAW,CAAC,OAAe;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,CAAA;QAClF,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAExD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAM;QACR,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;QAC9D,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAEvE,YAAY,CAAC,eAAe,CAAC,MAAM,EAAE,CAAA;QACrC,YAAY,CAAC,eAAe,GAAG,SAAS,CAAA;QAExC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACvD,CAAC;IAED,WAAW,CAAC,KAAY;QACtB,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;YAChE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CACnE,CAAA;IACH,CAAC;;AA9RM,sBAAG,GAAW,CAAC,AAAZ,CAAY;AAEf,yBAAM,GAAG;IACd,eAAe;IACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA8BF;CACF,AAjCY,CAiCZ;AA/D2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kDAA+C;AAC/C;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gDAAqC;AACpC;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;yDAA6B;AACE;IAAxD,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;wDAA6B;AAuBjE;IAAnB,KAAK,CAAC,WAAW,CAAC;6DAAmC;AA3B3C,kBAAkB;IAD9B,aAAa,CAAC,sBAAsB,CAAC;GACzB,kBAAkB,CA4T9B","sourcesContent":["import { LitElement, html, css } from 'lit'\nimport { property, query, customElement } from 'lit/decorators.js'\nimport { keyed } from 'lit/directives/keyed.js'\n\nimport { buildSciChart, buildSciChartOverview } from './scichart-builder'\nimport { AxisSynchroniser } from './axis-synchronizer'\nimport { NumberRange, SciChartVerticalGroup } from 'scichart'\n\nimport { ScrollbarStyles } from '@operato/styles'\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 isInitializing: boolean = false\n private overviewChart: any = null\n private overviewDataSeries: any[] = []\n private groupCharts: {\n dataKey: string\n sciChartSurface: any\n dataSeries: any[]\n }[] = []\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\n const { chart, dataSeries } =\n (await buildSciChartOverview(this.config, this.overviewContainer, {}, this.synchronizer)) || {}\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 var needDataUpdate = false\n\n if (changedProperties.has('config') && this.config) {\n this.isInitializing = true\n await this.initializeSciChart()\n this.isInitializing = false\n needDataUpdate = true\n }\n\n if (changedProperties.has('visibleSeries')) {\n if (this.isInitializing) {\n await this.ensureInitialization()\n }\n await this.updateSeries(this.visibleSeries, changedProperties.get('visibleSeries') as string[])\n needDataUpdate = true\n }\n\n if (changedProperties.has('data')) {\n needDataUpdate = true\n }\n\n if (needDataUpdate) {\n await this.updateDataSeries()\n }\n }\n\n private async ensureInitialization() {\n while (this.isInitializing) {\n await new Promise(resolve => setTimeout(resolve, 100)) // Check every 100ms\n }\n }\n\n cleanup() {\n this.cleanupGroup()\n\n if (this.overviewChart) {\n this.overviewChart.sciChartSurface?.delete()\n this.overviewChart = null\n }\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 async updateDataSeries() {\n const { config, data } = this\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 dataSeries.forEach(ds => ds.clear())\n const dataSet = newData.filter((data, index) => dataKey == datasets[index].dataKey!)\n\n dataSet.forEach((data, index) => {\n dataSeries[index].appendRange(\n data.map(d => d.xValue),\n data.map(d => d.yValue)\n )\n })\n\n sciChartSurface.zoomExtents()\n sciChartSurface.invalidateElement()\n })\n\n this.overviewDataSeries.forEach(ds => ds.clear())\n\n newData.forEach((data, index) => {\n if (this.visibleSeries.includes(datasets[index].dataKey!)) {\n this.overviewDataSeries[index].appendRange(\n data.map(d => d.xValue),\n data.map(d => d.yValue)\n )\n }\n })\n\n this.overviewChart?.sciChartSurface.zoomExtents()\n this.overviewChart?.sciChartSurface.invalidateElement()\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 ${datasets.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 /* 기존 시리즈와 새로운 시리즈의 차이를 비교해서, before에는 있는데, after에는 없으면 await removeChart(string)를 호출하고, after에는 있는데, before에는 없으면, addChart(string) 한다. */\n // before에는 있는데 after에는 없는 시리즈를 제거합니다.\n for (const series of before || []) {\n if (!after.includes(series)) {\n await this.removeChart(series)\n }\n }\n\n // after에는 있는데 before에는 없는 시리즈를 추가합니다.\n for (const series of after || []) {\n if (!before || !before.includes(series)) {\n await this.addChart(series)\n }\n }\n }\n\n async addChart(dataKey: string) {\n const groupedChart = {\n dataKey: '',\n sciChartSurface: undefined,\n dataSeries: [] as any[]\n }\n\n const { data } = this\n const { datasets = [] } = this.config?.data || {}\n\n const config = {\n ...this.config,\n data: {\n ...data,\n datasets: datasets.filter(dataset => dataset.dataKey == dataKey)\n }\n }\n\n const container = this.renderRoot.querySelector(`#${this.containerId + '-' + dataKey}`)\n var { chart, dataSeries } = (await buildSciChart(\n config,\n container,\n { fontSize: undefined, fontFamily: undefined, fontColor: undefined },\n this.containerId\n ))!\n\n this.verticalGroup.addSurfaceToGroup(chart.sciChartSurface)\n this.synchronizer.addAxis(chart.sciChartSurface.xAxes.get(0))\n\n groupedChart.dataKey = config.data.datasets[0]!.dataKey!\n groupedChart.sciChartSurface = chart.sciChartSurface\n groupedChart.dataSeries = dataSeries\n\n this.groupCharts = this.groupSorter([...this.groupCharts, groupedChart])\n }\n\n removeChart(dataKey: string) {\n const index = this.groupCharts.findIndex((chart: any) => chart.dataKey == dataKey)\n const [groupedChart] = this.groupCharts.splice(index, 1)\n\n if (!groupedChart) {\n return\n }\n\n this.verticalGroup.removeSurface(groupedChart.sciChartSurface)\n this.synchronizer.removeAxis(groupedChart.sciChartSurface.xAxes.get(0))\n\n groupedChart.sciChartSurface.delete()\n groupedChart.sciChartSurface = undefined\n\n this.groupCharts = this.groupSorter(this.groupCharts)\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\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ox-scichart-multiple': OxSciChartMultiple\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ox-scichart.js","sourceRoot":"","sources":["../../src/charts/ox-scichart.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAG3C,IAAM,UAAU,kBAAhB,MAAM,UAAW,SAAQ,UAAU;IAAnC;;QACuB,WAAM,GAAoC,IAAI,CAAA;QAC/C,SAAI,GAA8B,EAAE,CAAA;
|
1
|
+
{"version":3,"file":"ox-scichart.js","sourceRoot":"","sources":["../../src/charts/ox-scichart.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAG3C,IAAM,UAAU,kBAAhB,MAAM,UAAW,SAAQ,UAAU;IAAnC;;QACuB,WAAM,GAAoC,IAAI,CAAA;QAC/C,SAAI,GAA8B,EAAE,CAAA;QAExD,UAAK,GAAQ,IAAI,CAAA;QAChB,eAAU,GAAU,EAAE,CAAA;QAC9B;;;;;;WAMG;QACK,gBAAW,GAAW,cAAc,GAAG,EAAE,YAAU,CAAC,GAAG,CAAA;IAwGjE,CAAC;IA/EC,KAAK,CAAC,kBAAkB;;QACtB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAA,IAAI,CAAC,KAAK,CAAC,eAAe,0CAAE,MAAM,EAAE,CAAA;YACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACnB,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QAE1F,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,UAAU,GAAG,UAAW,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,iBAAyD;QACrE,IAAI,cAAc,GAAG,KAAK,CAAA;QAE1B,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACnD,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;YAC/B,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,gBAAgB;;QACd,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,MAAM,CAAA;YAAE,OAAM;QAEpC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAE5B,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,WAAW,CAChC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EACvB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CACxB,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,MAAA,IAAI,CAAC,KAAK,0CAAE,eAAe,CAAC,WAAW,EAAE,CAAA;QACzC,MAAA,IAAI,CAAC,KAAK,0CAAE,eAAe,CAAC,iBAAiB,EAAE,CAAA;IACjD,CAAC;IAED,IAAI,OAAO;QACT,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;QAC7B,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,EAAE,CAAA;QAEjE,IAAI,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,OAAO,EAAE,CAAA;QACX,CAAC;QAED,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAC5B,OAAO,IAAI;iBACR,GAAG,CAAC,IAAI,CAAC,EAAE;gBACV,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtC,OAAM;gBACR,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;gBACpC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;oBAC5B,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;oBAC3C,OAAM;gBACR,CAAC;gBAED,OAAO;oBACL,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI;oBAC/B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC;iBAC/B,CAAA;YACH,CAAC,CAAC;iBACD,MAAM,CAAC,OAAO,CAAyC,CAAA;QAC5D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA,YAAY,IAAI,CAAC,WAAW,kCAAkC,CAAA;IAC3E,CAAC;;AAnGM,cAAG,GAAW,CAAC,AAAZ,CAAY;AAEf,iBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;GAiBlB,AAjBY,CAiBZ;AAnC2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CAA+C;AAC/C;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;wCAAqC;AAapC;IAA1B,KAAK,CAAC,kBAAkB,CAAC;6CAA2B;AAf1C,UAAU;IADtB,aAAa,CAAC,aAAa,CAAC;GAChB,UAAU,CAqHtB","sourcesContent":["import { LitElement, html, css } from 'lit'\nimport { property, query, customElement } from 'lit/decorators.js'\nimport { buildSciChart } from './scichart-builder'\n\n@customElement('ox-scichart')\nexport class OxSciChart extends LitElement {\n @property({ type: Object }) config: OperatoChart.ChartConfig | null = null\n @property({ type: Array }) data: { [attr: string]: any }[] = []\n\n public chart: any = null\n private dataSeries: any[] = []\n /*\n [주의]\n ox-scichart container의 id를 글로벌 유니크하게 해야한다. \n SciChart가 특별히 container의 id를 기반으로 하위 컴포넌트를 구성하고 있기 때문이다.\n shadowDom 안에 있는 container 이더라도, 글로벌 유니크한 id를 제공해야 한다.\n 그렇지 않으면, 단 하나의 차트만 제대로 렌더링된다.\n */\n private containerId: string = 'ox-sci-chart' + ++OxSciChart.idx\n\n @query('.chart-container') container!: HTMLDivElement\n\n static idx: number = 0\n\n static styles = css`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .chart-container {\n display: flex;\n width: 100%;\n height: 100%;\n }\n\n .chart-content {\n flex: 1;\n position: relative;\n }\n `\n\n async initializeSciChart() {\n if (this.chart) {\n this.chart.sciChartSurface?.delete()\n this.chart = null\n }\n\n const { chart, dataSeries } = (await buildSciChart(this.config, this.container, {})) || {}\n\n this.chart = chart\n this.dataSeries = dataSeries!\n }\n\n async updated(changedProperties: Map<string | number | symbol, unknown>) {\n var needDataUpdate = false\n\n if (changedProperties.has('config') && this.config) {\n await this.initializeSciChart()\n needDataUpdate = true\n }\n\n if (changedProperties.has('data')) {\n needDataUpdate = true\n }\n\n if (needDataUpdate) {\n await this.updateDataSeries()\n }\n }\n\n updateDataSeries() {\n if (!this.dataSeries?.length) return\n\n this.dataSeries.forEach(ds => ds.clear())\n const newData = this.dataSet\n\n newData.forEach((data, index) => {\n this.dataSeries[index].appendRange(\n data.map(d => d.xValue),\n data.map(d => d.yValue)\n )\n })\n\n this.chart?.sciChartSurface.zoomExtents()\n this.chart?.sciChartSurface.invalidateElement()\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 return html` <div id=${this.containerId} class=\"chart-container\"></div> `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ox-scichart': OxSciChart\n }\n}\n"]}
|
@@ -1,8 +1,17 @@
|
|
1
|
+
import { AxisSynchroniser } from './axis-synchronizer';
|
1
2
|
export declare function buildSciChart(config: OperatoChart.ChartConfig | undefined | null, container: any, { fontSize, fontFamily, fontColor }: {
|
2
3
|
fontSize?: number;
|
3
4
|
fontFamily?: string;
|
4
5
|
fontColor?: string;
|
5
|
-
}): Promise<{
|
6
|
+
}, grouped?: string): Promise<{
|
7
|
+
chart: any;
|
8
|
+
dataSeries: any[];
|
9
|
+
} | undefined>;
|
10
|
+
export declare function buildSciChartOverview(config: OperatoChart.ChartConfig | undefined | null, container: any, { fontSize, fontFamily, fontColor }: {
|
11
|
+
fontSize?: number;
|
12
|
+
fontFamily?: string;
|
13
|
+
fontColor?: string;
|
14
|
+
}, axisSynchroniser: AxisSynchroniser): Promise<{
|
6
15
|
chart: any;
|
7
16
|
dataSeries: any[];
|
8
17
|
} | undefined>;
|