@operato/scene-scichart 8.0.0-beta.1 → 9.0.0-beta.0

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.
@@ -1,155 +0,0 @@
1
- import { LitElement, html, css } from 'lit'
2
- import { property, query, customElement } from 'lit/decorators.js'
3
- import { buildSciChart } from './scichart-builder'
4
-
5
- @customElement('ox-scichart')
6
- export class OxSciChart extends LitElement {
7
- @property({ type: Object }) config: OperatoChart.ChartConfig | null = null
8
- @property({ type: Array }) data: { [attr: string]: any }[] = []
9
-
10
- public chart: any = null
11
- private dataSeries: any[] = []
12
- /*
13
- [주의]
14
- ox-scichart container의 id를 글로벌 유니크하게 해야한다.
15
- SciChart가 특별히 container의 id를 기반으로 하위 컴포넌트를 구성하고 있기 때문이다.
16
- shadowDom 안에 있는 container 이더라도, 글로벌 유니크한 id를 제공해야 한다.
17
- 그렇지 않으면, 단 하나의 차트만 제대로 렌더링된다.
18
- */
19
- private containerId: string = 'ox-sci-chart' + ++OxSciChart.idx
20
-
21
- @query('.chart-container') container!: HTMLDivElement
22
-
23
- static idx: number = 0
24
-
25
- static styles = css`
26
- :host {
27
- display: block;
28
- width: 100%;
29
- height: 100%;
30
- }
31
-
32
- .chart-container {
33
- display: flex;
34
- width: 100%;
35
- height: 100%;
36
- }
37
-
38
- .chart-content {
39
- flex: 1;
40
- position: relative;
41
- }
42
- `
43
-
44
- async initializeSciChart() {
45
- if (this.chart) {
46
- this.chart.sciChartSurface?.delete()
47
- this.chart = null
48
- }
49
-
50
- const { chart, dataSeries } = (await buildSciChart(this.config, this.container, {}, {})) || {}
51
-
52
- this.chart = chart
53
- this.dataSeries = dataSeries!
54
- }
55
-
56
- dispose() {
57
- // 데이터 시리즈 해제
58
- this.dataSeries.forEach(ds => ds.delete())
59
- this.dataSeries = []
60
-
61
- // SciChartSurface 해제
62
- if (this.chart?.sciChartSurface) {
63
- this.chart.sciChartSurface.renderableSeries.clear() // 렌더러 시리즈 제거
64
- this.chart.sciChartSurface.xAxes.clear() // X축 제거
65
- this.chart.sciChartSurface.yAxes.clear() // Y축 제거
66
- this.chart.sciChartSurface.delete() // SciChartSurface 삭제
67
- }
68
-
69
- this.chart = null // chart 객체 초기화
70
- }
71
-
72
- async updated(changedProperties: Map<string | number | symbol, unknown>) {
73
- var needDataUpdate = false
74
-
75
- if (changedProperties.has('config') && this.config) {
76
- await this.initializeSciChart()
77
- needDataUpdate = true
78
- }
79
-
80
- if (changedProperties.has('data')) {
81
- needDataUpdate = true
82
- }
83
-
84
- if (needDataUpdate) {
85
- await this.updateDataSeries()
86
- }
87
- }
88
-
89
- updateDataSeries() {
90
- if (!this.dataSeries?.length) {
91
- return
92
- }
93
-
94
- this.dataSeries.forEach(ds => ds.clear())
95
- const newData = this.dataSet
96
-
97
- newData.forEach((data, index) => {
98
- const filteredData = data.filter(d => typeof d.yValue === 'number')
99
-
100
- if (filteredData.length > 0) {
101
- this.dataSeries[index].appendRange(
102
- filteredData.map(d => d.xValue),
103
- filteredData.map(d => d.yValue)
104
- )
105
- }
106
- })
107
-
108
- setTimeout(() => {
109
- this.chart?.sciChartSurface.zoomExtents()
110
- this.chart?.sciChartSurface.invalidateElement()
111
- }, 200)
112
- }
113
-
114
- get dataSet(): { xValue: number; yValue: number }[][] {
115
- const { config, data } = this
116
- const { datasets = [], labelDataKey: attrX } = config?.data || {}
117
-
118
- if (!(data instanceof Array) || !attrX) {
119
- return []
120
- }
121
-
122
- return datasets.map(dataset => {
123
- return data
124
- .map(item => {
125
- if (!item || typeof item !== 'object') {
126
- return
127
- }
128
-
129
- const xValue = new Date(item[attrX])
130
- if (isNaN(xValue.getTime())) {
131
- console.error('Invalid date:', item[attrX])
132
- return
133
- }
134
-
135
- return {
136
- xValue: xValue.getTime() / 1000,
137
- yValue: item[dataset.dataKey!]
138
- }
139
- })
140
- .filter(Boolean) as { xValue: number; yValue: number }[]
141
- })
142
- }
143
-
144
- async appendData(appendum: { [attr: string]: any }[]) {}
145
-
146
- render() {
147
- return html` <div id=${this.containerId} class="chart-container"></div> `
148
- }
149
- }
150
-
151
- declare global {
152
- interface HTMLElementTagNameMap {
153
- 'ox-scichart': OxSciChart
154
- }
155
- }