@orbcharts/core 3.0.0-alpha.47 → 3.0.0-alpha.48
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/orbcharts-core.es.js +1728 -1679
- package/dist/orbcharts-core.umd.js +2 -2
- package/dist/src/grid/gridObservables.d.ts +5 -1
- package/dist/src/types/ContextObserverGrid.d.ts +2 -0
- package/package.json +1 -1
- package/src/grid/createGridContextObserver.ts +17 -9
- package/src/grid/gridObservables.ts +43 -17
- package/src/multiGrid/multiGridObservables.ts +18 -4
- package/src/types/ContextObserverGrid.ts +2 -1
@@ -7,6 +7,7 @@ export interface ContextObserverGrid<PluginParams> extends ContextObserverBase<'
|
|
7
7
|
textSizePx$: Observable<number>;
|
8
8
|
}
|
9
9
|
export interface ContextObserverGridDetail {
|
10
|
+
isSeriesSeprate$: Observable<boolean>;
|
10
11
|
gridContainerPosition$: Observable<GridContainerPosition[]>;
|
11
12
|
gridAxesTransform$: Observable<TransformData>;
|
12
13
|
gridAxesReverseTransform$: Observable<TransformData>;
|
@@ -23,6 +24,7 @@ export interface ContextObserverGridDetail {
|
|
23
24
|
computedLayoutData$: Observable<ComputedLayoutDataGrid>;
|
24
25
|
visibleComputedData$: Observable<ComputedDataGrid>;
|
25
26
|
visibleComputedLayoutData$: Observable<ComputedLayoutDataGrid>;
|
27
|
+
computedStackedData$: Observable<ComputedDataGrid>;
|
26
28
|
}
|
27
29
|
export type ComputedLayoutDataGrid = ComputedLayoutDatumGrid[][];
|
28
30
|
export interface ComputedLayoutDatumGrid extends ComputedDatumGrid {
|
package/package.json
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { map, shareReplay } from 'rxjs'
|
1
|
+
import { map, shareReplay, distinctUntilChanged } from 'rxjs'
|
2
2
|
import type { ContextObserverFn } from '../types'
|
3
3
|
import {
|
4
4
|
highlightObservable,
|
@@ -16,7 +16,8 @@ import {
|
|
16
16
|
gridVisibleComputedDataObservable,
|
17
17
|
gridVisibleComputedLayoutDataObservable,
|
18
18
|
// isSeriesSeprateObservable,
|
19
|
-
gridContainerPositionObservable
|
19
|
+
gridContainerPositionObservable,
|
20
|
+
computedStackedDataObservables } from './gridObservables'
|
20
21
|
|
21
22
|
export const createGridContextObserver: ContextObserverFn<'grid'> = ({ subject, observer }) => {
|
22
23
|
|
@@ -24,12 +25,11 @@ export const createGridContextObserver: ContextObserverFn<'grid'> = ({ subject,
|
|
24
25
|
shareReplay(1)
|
25
26
|
)
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
// )
|
28
|
+
const isSeriesSeprate$ = observer.fullDataFormatter$.pipe(
|
29
|
+
map(d => d.grid.separateSeries),
|
30
|
+
distinctUntilChanged(),
|
31
|
+
shareReplay(1)
|
32
|
+
)
|
33
33
|
|
34
34
|
const gridContainerPosition$ = gridContainerPositionObservable({
|
35
35
|
computedData$: observer.computedData$,
|
@@ -121,6 +121,13 @@ export const createGridContextObserver: ContextObserverFn<'grid'> = ({ subject,
|
|
121
121
|
shareReplay(1)
|
122
122
|
)
|
123
123
|
|
124
|
+
const computedStackedData$ = computedStackedDataObservables({
|
125
|
+
computedData$: observer.computedData$,
|
126
|
+
isSeriesSeprate$: isSeriesSeprate$
|
127
|
+
}).pipe(
|
128
|
+
shareReplay(1)
|
129
|
+
)
|
130
|
+
|
124
131
|
|
125
132
|
return {
|
126
133
|
fullParams$: observer.fullParams$,
|
@@ -129,7 +136,7 @@ export const createGridContextObserver: ContextObserverFn<'grid'> = ({ subject,
|
|
129
136
|
computedData$: observer.computedData$,
|
130
137
|
layout$: observer.layout$,
|
131
138
|
textSizePx$,
|
132
|
-
|
139
|
+
isSeriesSeprate$,
|
133
140
|
gridContainerPosition$,
|
134
141
|
gridAxesTransform$,
|
135
142
|
gridAxesReverseTransform$,
|
@@ -143,5 +150,6 @@ export const createGridContextObserver: ContextObserverFn<'grid'> = ({ subject,
|
|
143
150
|
computedLayoutData$,
|
144
151
|
visibleComputedData$,
|
145
152
|
visibleComputedLayoutData$,
|
153
|
+
computedStackedData$,
|
146
154
|
}
|
147
155
|
}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import {
|
2
2
|
combineLatest,
|
3
3
|
distinctUntilChanged,
|
4
|
+
iif,
|
4
5
|
filter,
|
5
6
|
map,
|
6
7
|
merge,
|
@@ -15,6 +16,7 @@ import type {
|
|
15
16
|
ChartParams,
|
16
17
|
ComputedDataTypeMap,
|
17
18
|
ComputedDatumTypeMap,
|
19
|
+
ComputedDataGrid,
|
18
20
|
ContextObserverFn,
|
19
21
|
DataTypeMap,
|
20
22
|
DataGridDatum,
|
@@ -504,23 +506,6 @@ export const gridVisibleComputedLayoutDataObservable = ({ computedLayoutData$ }:
|
|
504
506
|
)
|
505
507
|
}
|
506
508
|
|
507
|
-
// export const isSeriesSeprateObservable = ({ computedData$, fullDataFormatter$ }: {
|
508
|
-
// computedData$: Observable<ComputedDataTypeMap<'grid'>>
|
509
|
-
// fullDataFormatter$: Observable<DataFormatterTypeMap<'grid'>>
|
510
|
-
// }) => {
|
511
|
-
// return combineLatest({
|
512
|
-
// computedData: computedData$,
|
513
|
-
// fullDataFormatter: fullDataFormatter$
|
514
|
-
// }).pipe(
|
515
|
-
// map(data => {
|
516
|
-
// return data.fullDataFormatter.grid.seriesSlotIndexes && data.fullDataFormatter.grid.seriesSlotIndexes.length === data.computedData.length
|
517
|
-
// ? true
|
518
|
-
// : false
|
519
|
-
// }),
|
520
|
-
// distinctUntilChanged()
|
521
|
-
// )
|
522
|
-
// }
|
523
|
-
|
524
509
|
// 所有container位置(對應series)
|
525
510
|
export const gridContainerPositionObservable = ({ computedData$, fullDataFormatter$, layout$ }: {
|
526
511
|
computedData$: Observable<ComputedDataTypeMap<'grid'>>
|
@@ -572,4 +557,45 @@ export const gridContainerPositionObservable = ({ computedData$, fullDataFormatt
|
|
572
557
|
)
|
573
558
|
|
574
559
|
return gridContainerPosition$
|
560
|
+
}
|
561
|
+
|
562
|
+
// 將原本的value全部替換成加總後的value
|
563
|
+
export const computedStackedDataObservables = ({ isSeriesSeprate$, computedData$ }: {
|
564
|
+
isSeriesSeprate$: Observable<boolean>
|
565
|
+
computedData$: Observable<ComputedDataGrid>
|
566
|
+
}): Observable<ComputedDataGrid> => {
|
567
|
+
const stackedData$: Observable<ComputedDataGrid> = computedData$.pipe(
|
568
|
+
map(data => {
|
569
|
+
// 將同一group的value加總起來
|
570
|
+
const stackedValue = new Array(data[0] ? data[0].length : 0)
|
571
|
+
.fill(null)
|
572
|
+
.map((_, i) => {
|
573
|
+
return data.reduce((prev, current) => {
|
574
|
+
if (current && current[i]) {
|
575
|
+
const currentValue = current[i].value == null || current[i].visible == false
|
576
|
+
? 0
|
577
|
+
: current[i].value!
|
578
|
+
return prev + currentValue
|
579
|
+
}
|
580
|
+
return prev
|
581
|
+
}, 0)
|
582
|
+
})
|
583
|
+
// 將原本的value全部替換成加總後的value
|
584
|
+
const computedData = data.map((series, seriesIndex) => {
|
585
|
+
return series.map((d, i) => {
|
586
|
+
return {
|
587
|
+
...d,
|
588
|
+
value: stackedValue[i],
|
589
|
+
}
|
590
|
+
})
|
591
|
+
})
|
592
|
+
return computedData
|
593
|
+
}),
|
594
|
+
)
|
595
|
+
|
596
|
+
return isSeriesSeprate$.pipe(
|
597
|
+
switchMap(isSeriesSeprate => {
|
598
|
+
return iif(() => isSeriesSeprate, computedData$, stackedData$)
|
599
|
+
})
|
600
|
+
)
|
575
601
|
}
|
@@ -41,7 +41,7 @@ import {
|
|
41
41
|
gridVisibleComputedDataObservable,
|
42
42
|
gridVisibleComputedLayoutDataObservable,
|
43
43
|
// isSeriesSeprateObservable,
|
44
|
-
|
44
|
+
computedStackedDataObservables } from '../grid/gridObservables'
|
45
45
|
import { DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT } from '../defaults'
|
46
46
|
import { calcGridContainerLayout } from '../utils/orbchartsUtils'
|
47
47
|
|
@@ -131,6 +131,12 @@ export const multiGridEachDetailObservable = ({ fullDataFormatter$, computedData
|
|
131
131
|
// shareReplay(1)
|
132
132
|
// )
|
133
133
|
|
134
|
+
const isSeriesSeprate$ = gridDataFormatter$.pipe(
|
135
|
+
map(d => d.grid.separateSeries),
|
136
|
+
distinctUntilChanged(),
|
137
|
+
shareReplay(1)
|
138
|
+
)
|
139
|
+
|
134
140
|
const gridContainerPosition$ = of(data.multiGridContainer[gridIndex]).pipe(
|
135
141
|
takeUntil(destroy$),
|
136
142
|
shareReplay(1)
|
@@ -217,7 +223,7 @@ export const multiGridEachDetailObservable = ({ fullDataFormatter$, computedData
|
|
217
223
|
takeUntil(destroy$),
|
218
224
|
shareReplay(1)
|
219
225
|
)
|
220
|
-
|
226
|
+
|
221
227
|
const computedLayoutData$ = gridComputedLayoutDataObservable({
|
222
228
|
computedData$: gridComputedData$,
|
223
229
|
fullDataFormatter$: gridDataFormatter$,
|
@@ -234,7 +240,15 @@ export const multiGridEachDetailObservable = ({ fullDataFormatter$, computedData
|
|
234
240
|
shareReplay(1)
|
235
241
|
)
|
236
242
|
|
237
|
-
|
243
|
+
const computedStackedData$ = computedStackedDataObservables({
|
244
|
+
computedData$: gridComputedData$,
|
245
|
+
isSeriesSeprate$: isSeriesSeprate$
|
246
|
+
}).pipe(
|
247
|
+
shareReplay(1)
|
248
|
+
)
|
249
|
+
|
250
|
+
return {
|
251
|
+
isSeriesSeprate$,
|
238
252
|
gridContainerPosition$,
|
239
253
|
gridAxesTransform$,
|
240
254
|
gridAxesReverseTransform$,
|
@@ -250,7 +264,7 @@ export const multiGridEachDetailObservable = ({ fullDataFormatter$, computedData
|
|
250
264
|
computedLayoutData$,
|
251
265
|
visibleComputedData$,
|
252
266
|
visibleComputedLayoutData$,
|
253
|
-
|
267
|
+
computedStackedData$
|
254
268
|
}
|
255
269
|
})
|
256
270
|
})
|
@@ -9,6 +9,7 @@ ContextObserverBase<'grid', PluginParams>, ContextObserverGridDetail {
|
|
9
9
|
}
|
10
10
|
|
11
11
|
export interface ContextObserverGridDetail {
|
12
|
+
isSeriesSeprate$: Observable<boolean>
|
12
13
|
gridContainerPosition$: Observable<GridContainerPosition[]>
|
13
14
|
gridAxesTransform$: Observable<TransformData>
|
14
15
|
gridAxesReverseTransform$: Observable<TransformData>
|
@@ -22,7 +23,7 @@ export interface ContextObserverGridDetail {
|
|
22
23
|
computedLayoutData$: Observable<ComputedLayoutDataGrid>
|
23
24
|
visibleComputedData$: Observable<ComputedDataGrid>
|
24
25
|
visibleComputedLayoutData$: Observable<ComputedLayoutDataGrid>
|
25
|
-
|
26
|
+
computedStackedData$: Observable<ComputedDataGrid>
|
26
27
|
}
|
27
28
|
|
28
29
|
export type ComputedLayoutDataGrid = ComputedLayoutDatumGrid[][]
|