@orbcharts/plugins-basic 3.0.0-beta.7 → 3.0.0-beta.9
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/LICENSE +200 -200
- package/dist/orbcharts-plugins-basic/lib/plugins-basic-types.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/base/{BaseBarStack.d.ts → BaseStackedBar.d.ts} +4 -4
- package/dist/orbcharts-plugins-basic/src/grid/defaults.d.ts +3 -3
- package/dist/orbcharts-plugins-basic/src/grid/index.d.ts +2 -2
- package/dist/orbcharts-plugins-basic/src/grid/plugins/Bars.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/grid/plugins/BarsPN.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/grid/plugins/BarsTriangle.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/grid/plugins/Dots.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/grid/plugins/GridLegend.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/grid/plugins/GridTooltip.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/grid/plugins/GridZoom.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/grid/plugins/GroupAux.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/grid/plugins/GroupAxis.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/grid/plugins/LineAreas.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/grid/plugins/Lines.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/grid/plugins/StackedBar.d.ts +1 -0
- package/dist/orbcharts-plugins-basic/src/grid/plugins/StackedValueAxis.d.ts +1 -0
- package/dist/orbcharts-plugins-basic/src/grid/plugins/ValueAxis.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/index.d.ts +1 -0
- package/dist/orbcharts-plugins-basic/src/multiGrid/defaults.d.ts +4 -4
- package/dist/orbcharts-plugins-basic/src/multiGrid/index.d.ts +3 -3
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiBars.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiBarsTriangle.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiDots.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiGridLegend.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiGridTooltip.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiGroupAxis.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiLineAreas.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiLines.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiStackedBar.d.ts +1 -0
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiStackedValueAxis.d.ts +1 -0
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiValueAxis.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/OverlappingStackedValueAxes.d.ts +1 -0
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/OverlappingValueAxes.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiValue/plugins/MultiValueLegend.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiValue/plugins/MultiValueTooltip.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiValue/plugins/Scatter.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiValue/plugins/ScatterBubbles.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYAux.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYAxes.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYZoom.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/noneData/plugins/Container.d.ts +0 -1
- package/dist/orbcharts-plugins-basic/src/noneData/plugins/Tooltip.d.ts +0 -3
- package/dist/orbcharts-plugins-basic/src/relationship/defaults.d.ts +6 -0
- package/dist/orbcharts-plugins-basic/src/relationship/index.d.ts +5 -0
- package/dist/orbcharts-plugins-basic/src/relationship/plugins/ForceDirected.d.ts +3 -0
- package/dist/orbcharts-plugins-basic/src/relationship/plugins/ForceDirectedBubbles.d.ts +3 -0
- package/dist/orbcharts-plugins-basic/src/relationship/plugins/RelationshipLegend.d.ts +1 -0
- package/dist/orbcharts-plugins-basic/src/relationship/plugins/RelationshipTooltip.d.ts +1 -0
- package/dist/orbcharts-plugins-basic/src/relationship/relationshipObservables.d.ts +1 -0
- package/dist/orbcharts-plugins-basic/src/series/plugins/Bubbles.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/series/plugins/Pie.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/series/plugins/PieEventTexts.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/series/plugins/PieLabels.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/series/plugins/Rose.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/series/plugins/RoseLabels.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/series/plugins/SeriesLegend.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/series/plugins/SeriesTooltip.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/tree/plugins/TreeLegend.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/tree/plugins/TreeMap.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/tree/plugins/TreeTooltip.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/utils/commonUtils.d.ts +1 -1
- package/dist/orbcharts-plugins-basic/src/utils/orbchartsUtils.d.ts +1 -1
- package/dist/orbcharts-plugins-basic.es.js +9421 -8102
- package/dist/orbcharts-plugins-basic.umd.js +69 -51
- package/lib/core-types.ts +7 -7
- package/lib/core.ts +6 -6
- package/lib/plugins-basic-types.ts +6 -6
- package/package.json +44 -44
- package/src/base/BaseBars.ts +765 -765
- package/src/base/BaseBarsTriangle.ts +676 -676
- package/src/base/BaseDots.ts +464 -464
- package/src/base/BaseGroupAxis.ts +679 -679
- package/src/base/BaseLegend.ts +684 -684
- package/src/base/BaseLineAreas.ts +629 -629
- package/src/base/BaseLines.ts +706 -706
- package/src/base/{BaseBarStack.ts → BaseStackedBar.ts} +782 -782
- package/src/base/BaseTooltip.ts +385 -385
- package/src/base/BaseValueAxis.ts +583 -583
- package/src/base/types.ts +2 -2
- package/src/const.ts +30 -30
- package/src/grid/defaults.ts +246 -246
- package/src/grid/gridObservables.ts +554 -554
- package/src/grid/index.ts +16 -16
- package/src/grid/plugins/Bars.ts +69 -69
- package/src/grid/plugins/BarsPN.ts +66 -66
- package/src/grid/plugins/BarsTriangle.ts +73 -73
- package/src/grid/plugins/Dots.ts +68 -68
- package/src/grid/plugins/GridLegend.ts +107 -107
- package/src/grid/plugins/GridTooltip.ts +66 -66
- package/src/grid/plugins/GridZoom.ts +218 -218
- package/src/grid/plugins/GroupAux.ts +1103 -1103
- package/src/grid/plugins/GroupAxis.ts +97 -97
- package/src/grid/plugins/LineAreas.ts +65 -65
- package/src/grid/plugins/Lines.ts +59 -59
- package/src/grid/plugins/{BarStack.ts → StackedBar.ts} +64 -64
- package/src/grid/plugins/{ValueStackAxis.ts → StackedValueAxis.ts} +96 -96
- package/src/grid/plugins/ValueAxis.ts +94 -94
- package/src/index.ts +6 -10
- package/src/multiGrid/defaults.ts +224 -224
- package/src/multiGrid/index.ts +15 -15
- package/src/multiGrid/multiGridObservables.ts +49 -49
- package/src/multiGrid/plugins/MultiBars.ts +108 -108
- package/src/multiGrid/plugins/MultiBarsTriangle.ts +114 -114
- package/src/multiGrid/plugins/MultiDots.ts +102 -102
- package/src/multiGrid/plugins/MultiGridLegend.ts +159 -159
- package/src/multiGrid/plugins/MultiGridTooltip.ts +66 -66
- package/src/multiGrid/plugins/MultiGroupAxis.ts +137 -137
- package/src/multiGrid/plugins/MultiLineAreas.ts +107 -107
- package/src/multiGrid/plugins/MultiLines.ts +101 -101
- package/src/multiGrid/plugins/{MultiBarStack.ts → MultiStackedBar.ts} +106 -106
- package/src/multiGrid/plugins/{MultiValueStackAxis.ts → MultiStackedValueAxis.ts} +134 -134
- package/src/multiGrid/plugins/MultiValueAxis.ts +134 -134
- package/src/multiGrid/plugins/{OverlappingValueStackAxes.ts → OverlappingStackedValueAxes.ts} +299 -299
- package/src/multiGrid/plugins/OverlappingValueAxes.ts +300 -300
- package/src/multiValue/defaults.ts +166 -166
- package/src/multiValue/index.ts +8 -8
- package/src/multiValue/multiValueObservables.ts +297 -297
- package/src/multiValue/plugins/MultiValueLegend.ts +107 -107
- package/src/multiValue/plugins/MultiValueTooltip.ts +66 -66
- package/src/multiValue/plugins/Scatter.ts +426 -426
- package/src/multiValue/plugins/ScatterBubbles.ts +554 -554
- package/src/multiValue/plugins/XYAux.ts +681 -681
- package/src/multiValue/plugins/XYAxes.ts +684 -684
- package/src/multiValue/plugins/XYZoom.ts +299 -299
- package/src/noneData/defaults.ts +102 -102
- package/src/noneData/index.ts +3 -3
- package/src/noneData/plugins/Container.ts +28 -28
- package/src/noneData/plugins/Tooltip.ts +374 -374
- package/src/relationship/defaults.ts +196 -0
- package/src/relationship/index.ts +5 -0
- package/src/relationship/plugins/ForceDirected.ts +1167 -0
- package/src/relationship/plugins/ForceDirectedBubbles.ts +1391 -0
- package/src/relationship/plugins/RelationshipLegend.ts +100 -0
- package/src/relationship/plugins/RelationshipTooltip.ts +66 -0
- package/src/relationship/relationshipObservables.ts +50 -0
- package/src/series/defaults.ts +206 -206
- package/src/series/index.ts +9 -9
- package/src/series/plugins/Bubbles.ts +606 -603
- package/src/series/plugins/Pie.ts +623 -623
- package/src/series/plugins/PieEventTexts.ts +284 -283
- package/src/series/plugins/PieLabels.ts +640 -640
- package/src/series/plugins/Rose.ts +516 -516
- package/src/series/plugins/RoseLabels.ts +600 -600
- package/src/series/plugins/SeriesLegend.ts +107 -107
- package/src/series/plugins/SeriesTooltip.ts +66 -66
- package/src/series/seriesObservables.ts +145 -145
- package/src/series/seriesUtils.ts +51 -51
- package/src/tree/defaults.ts +78 -78
- package/src/tree/index.ts +4 -4
- package/src/tree/plugins/TreeLegend.ts +100 -100
- package/src/tree/plugins/TreeMap.ts +333 -333
- package/src/tree/plugins/TreeTooltip.ts +66 -66
- package/src/utils/commonUtils.ts +21 -21
- package/src/utils/d3Graphics.ts +174 -174
- package/src/utils/d3Utils.ts +74 -74
- package/src/utils/observables.ts +14 -14
- package/src/utils/orbchartsUtils.ts +115 -115
- package/tsconfig.base.json +13 -13
- package/tsconfig.json +2 -2
- package/vite.config.js +22 -22
- package/dist/orbcharts-plugins-basic/src/grid/plugins/BarStack.d.ts +0 -1
- package/dist/orbcharts-plugins-basic/src/grid/plugins/ValueStackAxis.d.ts +0 -1
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiBarStack.d.ts +0 -1
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiValueStackAxis.d.ts +0 -1
- package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/OverlappingValueStackAxes.d.ts +0 -1
- package/dist/orbcharts-plugins-basic/src/relationship/plugins/Relationship.d.ts +0 -0
- package/src/relationship/plugins/Relationship.ts +0 -0
@@ -1,134 +1,134 @@
|
|
1
|
-
import * as d3 from 'd3'
|
2
|
-
import {
|
3
|
-
Subject,
|
4
|
-
map,
|
5
|
-
distinctUntilChanged,
|
6
|
-
shareReplay,
|
7
|
-
takeUntil
|
8
|
-
} from 'rxjs'
|
9
|
-
import type { DefinePluginConfig } from '../../../lib/core-types'
|
10
|
-
import {
|
11
|
-
defineMultiGridPlugin } from '../../../lib/core'
|
12
|
-
import { DEFAULT_MULTI_VALUE_AXIS_PARAMS } from '../defaults'
|
13
|
-
import { createBaseValueAxis } from '../../base/BaseValueAxis'
|
14
|
-
import { multiGridPluginDetailObservables } from '../multiGridObservables'
|
15
|
-
import { getClassName, getUniID } from '../../utils/orbchartsUtils'
|
16
|
-
import { LAYER_INDEX_OF_AXIS } from '../../const'
|
17
|
-
|
18
|
-
const pluginName = '
|
19
|
-
|
20
|
-
const gridClassName = getClassName(pluginName, 'grid')
|
21
|
-
|
22
|
-
const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_MULTI_VALUE_AXIS_PARAMS> = {
|
23
|
-
name: pluginName,
|
24
|
-
defaultParams: DEFAULT_MULTI_VALUE_AXIS_PARAMS,
|
25
|
-
layerIndex: LAYER_INDEX_OF_AXIS,
|
26
|
-
validator: (params, { validateColumns }) => {
|
27
|
-
const result = validateColumns(params, {
|
28
|
-
gridIndexes: {
|
29
|
-
toBe: 'number[] | "all"',
|
30
|
-
test: (value: any) => {
|
31
|
-
return value === 'all' || (Array.isArray(value) && value.every((v: any) => typeof v === 'number'))
|
32
|
-
}
|
33
|
-
},
|
34
|
-
labelOffset: {
|
35
|
-
toBe: '[number, number]',
|
36
|
-
test: (value: any) => {
|
37
|
-
return Array.isArray(value)
|
38
|
-
&& value.length === 2
|
39
|
-
&& typeof value[0] === 'number'
|
40
|
-
&& typeof value[1] === 'number'
|
41
|
-
}
|
42
|
-
},
|
43
|
-
labelColorType: {
|
44
|
-
toBeOption: 'ColorType',
|
45
|
-
},
|
46
|
-
axisLineVisible: {
|
47
|
-
toBeTypes: ['boolean']
|
48
|
-
},
|
49
|
-
axisLineColorType: {
|
50
|
-
toBeOption: 'ColorType',
|
51
|
-
},
|
52
|
-
ticks: {
|
53
|
-
toBeTypes: ['number', 'null']
|
54
|
-
},
|
55
|
-
tickFormat: {
|
56
|
-
toBeTypes: ['string', 'Function']
|
57
|
-
},
|
58
|
-
tickLineVisible: {
|
59
|
-
toBeTypes: ['boolean']
|
60
|
-
},
|
61
|
-
tickPadding: {
|
62
|
-
toBeTypes: ['number']
|
63
|
-
},
|
64
|
-
tickFullLine: {
|
65
|
-
toBeTypes: ['boolean']
|
66
|
-
},
|
67
|
-
tickFullLineDasharray: {
|
68
|
-
toBeTypes: ['string']
|
69
|
-
},
|
70
|
-
tickColorType: {
|
71
|
-
toBeOption: 'ColorType',
|
72
|
-
},
|
73
|
-
tickTextRotate: {
|
74
|
-
toBeTypes: ['number']
|
75
|
-
},
|
76
|
-
tickTextColorType: {
|
77
|
-
toBeOption: 'ColorType',
|
78
|
-
}
|
79
|
-
})
|
80
|
-
return result
|
81
|
-
}
|
82
|
-
}
|
83
|
-
|
84
|
-
export const
|
85
|
-
const destroy$ = new Subject()
|
86
|
-
|
87
|
-
const unsubscribeFnArr: (() => void)[] = []
|
88
|
-
|
89
|
-
const multiGridPluginDetail$ = multiGridPluginDetailObservables(observer)
|
90
|
-
|
91
|
-
multiGridPluginDetail$
|
92
|
-
.pipe(
|
93
|
-
takeUntil(destroy$)
|
94
|
-
)
|
95
|
-
.subscribe(data => {
|
96
|
-
// 每次重新計算時,清除之前的訂閱
|
97
|
-
unsubscribeFnArr.forEach(fn => fn())
|
98
|
-
|
99
|
-
selection.selectAll(`g.${gridClassName}`)
|
100
|
-
.data(data)
|
101
|
-
.join('g')
|
102
|
-
.attr('class', gridClassName)
|
103
|
-
.each((d, i, g) => {
|
104
|
-
|
105
|
-
const gridSelection = d3.select(g[i])
|
106
|
-
|
107
|
-
const isSeriesSeprate$ = d.dataFormatter$.pipe(
|
108
|
-
takeUntil(destroy$),
|
109
|
-
map(d => d.
|
110
|
-
distinctUntilChanged(),
|
111
|
-
shareReplay(1)
|
112
|
-
)
|
113
|
-
|
114
|
-
unsubscribeFnArr[i] = createBaseValueAxis(pluginName, {
|
115
|
-
selection: gridSelection,
|
116
|
-
computedData$: d.computedStackedData$, // 計算疊加value的資料
|
117
|
-
filteredMinMaxValue$: d.filteredMinMaxValue$,
|
118
|
-
fullParams$: observer.fullParams$,
|
119
|
-
fullDataFormatter$: d.dataFormatter$,
|
120
|
-
fullChartParams$: observer.fullChartParams$,
|
121
|
-
gridAxesTransform$: d.gridAxesTransform$,
|
122
|
-
gridAxesReverseTransform$: d.gridAxesReverseTransform$,
|
123
|
-
gridAxesSize$: d.gridAxesSize$,
|
124
|
-
gridContainerPosition$: d.gridContainerPosition$,
|
125
|
-
isSeriesSeprate$,
|
126
|
-
})
|
127
|
-
})
|
128
|
-
})
|
129
|
-
|
130
|
-
return () => {
|
131
|
-
destroy$.next(undefined)
|
132
|
-
unsubscribeFnArr.forEach(fn => fn())
|
133
|
-
}
|
134
|
-
})
|
1
|
+
import * as d3 from 'd3'
|
2
|
+
import {
|
3
|
+
Subject,
|
4
|
+
map,
|
5
|
+
distinctUntilChanged,
|
6
|
+
shareReplay,
|
7
|
+
takeUntil
|
8
|
+
} from 'rxjs'
|
9
|
+
import type { DefinePluginConfig } from '../../../lib/core-types'
|
10
|
+
import {
|
11
|
+
defineMultiGridPlugin } from '../../../lib/core'
|
12
|
+
import { DEFAULT_MULTI_VALUE_AXIS_PARAMS } from '../defaults'
|
13
|
+
import { createBaseValueAxis } from '../../base/BaseValueAxis'
|
14
|
+
import { multiGridPluginDetailObservables } from '../multiGridObservables'
|
15
|
+
import { getClassName, getUniID } from '../../utils/orbchartsUtils'
|
16
|
+
import { LAYER_INDEX_OF_AXIS } from '../../const'
|
17
|
+
|
18
|
+
const pluginName = 'MultiStackedValueAxis'
|
19
|
+
|
20
|
+
const gridClassName = getClassName(pluginName, 'grid')
|
21
|
+
|
22
|
+
const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_MULTI_VALUE_AXIS_PARAMS> = {
|
23
|
+
name: pluginName,
|
24
|
+
defaultParams: DEFAULT_MULTI_VALUE_AXIS_PARAMS,
|
25
|
+
layerIndex: LAYER_INDEX_OF_AXIS,
|
26
|
+
validator: (params, { validateColumns }) => {
|
27
|
+
const result = validateColumns(params, {
|
28
|
+
gridIndexes: {
|
29
|
+
toBe: 'number[] | "all"',
|
30
|
+
test: (value: any) => {
|
31
|
+
return value === 'all' || (Array.isArray(value) && value.every((v: any) => typeof v === 'number'))
|
32
|
+
}
|
33
|
+
},
|
34
|
+
labelOffset: {
|
35
|
+
toBe: '[number, number]',
|
36
|
+
test: (value: any) => {
|
37
|
+
return Array.isArray(value)
|
38
|
+
&& value.length === 2
|
39
|
+
&& typeof value[0] === 'number'
|
40
|
+
&& typeof value[1] === 'number'
|
41
|
+
}
|
42
|
+
},
|
43
|
+
labelColorType: {
|
44
|
+
toBeOption: 'ColorType',
|
45
|
+
},
|
46
|
+
axisLineVisible: {
|
47
|
+
toBeTypes: ['boolean']
|
48
|
+
},
|
49
|
+
axisLineColorType: {
|
50
|
+
toBeOption: 'ColorType',
|
51
|
+
},
|
52
|
+
ticks: {
|
53
|
+
toBeTypes: ['number', 'null']
|
54
|
+
},
|
55
|
+
tickFormat: {
|
56
|
+
toBeTypes: ['string', 'Function']
|
57
|
+
},
|
58
|
+
tickLineVisible: {
|
59
|
+
toBeTypes: ['boolean']
|
60
|
+
},
|
61
|
+
tickPadding: {
|
62
|
+
toBeTypes: ['number']
|
63
|
+
},
|
64
|
+
tickFullLine: {
|
65
|
+
toBeTypes: ['boolean']
|
66
|
+
},
|
67
|
+
tickFullLineDasharray: {
|
68
|
+
toBeTypes: ['string']
|
69
|
+
},
|
70
|
+
tickColorType: {
|
71
|
+
toBeOption: 'ColorType',
|
72
|
+
},
|
73
|
+
tickTextRotate: {
|
74
|
+
toBeTypes: ['number']
|
75
|
+
},
|
76
|
+
tickTextColorType: {
|
77
|
+
toBeOption: 'ColorType',
|
78
|
+
}
|
79
|
+
})
|
80
|
+
return result
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
export const MultiStackedValueAxis = defineMultiGridPlugin(pluginConfig)(({ selection, name, subject, observer }) => {
|
85
|
+
const destroy$ = new Subject()
|
86
|
+
|
87
|
+
const unsubscribeFnArr: (() => void)[] = []
|
88
|
+
|
89
|
+
const multiGridPluginDetail$ = multiGridPluginDetailObservables(observer)
|
90
|
+
|
91
|
+
multiGridPluginDetail$
|
92
|
+
.pipe(
|
93
|
+
takeUntil(destroy$)
|
94
|
+
)
|
95
|
+
.subscribe(data => {
|
96
|
+
// 每次重新計算時,清除之前的訂閱
|
97
|
+
unsubscribeFnArr.forEach(fn => fn())
|
98
|
+
|
99
|
+
selection.selectAll(`g.${gridClassName}`)
|
100
|
+
.data(data)
|
101
|
+
.join('g')
|
102
|
+
.attr('class', gridClassName)
|
103
|
+
.each((d, i, g) => {
|
104
|
+
|
105
|
+
const gridSelection = d3.select(g[i])
|
106
|
+
|
107
|
+
const isSeriesSeprate$ = d.dataFormatter$.pipe(
|
108
|
+
takeUntil(destroy$),
|
109
|
+
map(d => d.separateSeries),
|
110
|
+
distinctUntilChanged(),
|
111
|
+
shareReplay(1)
|
112
|
+
)
|
113
|
+
|
114
|
+
unsubscribeFnArr[i] = createBaseValueAxis(pluginName, {
|
115
|
+
selection: gridSelection,
|
116
|
+
computedData$: d.computedStackedData$, // 計算疊加value的資料
|
117
|
+
filteredMinMaxValue$: d.filteredMinMaxValue$,
|
118
|
+
fullParams$: observer.fullParams$,
|
119
|
+
fullDataFormatter$: d.dataFormatter$,
|
120
|
+
fullChartParams$: observer.fullChartParams$,
|
121
|
+
gridAxesTransform$: d.gridAxesTransform$,
|
122
|
+
gridAxesReverseTransform$: d.gridAxesReverseTransform$,
|
123
|
+
gridAxesSize$: d.gridAxesSize$,
|
124
|
+
gridContainerPosition$: d.gridContainerPosition$,
|
125
|
+
isSeriesSeprate$,
|
126
|
+
})
|
127
|
+
})
|
128
|
+
})
|
129
|
+
|
130
|
+
return () => {
|
131
|
+
destroy$.next(undefined)
|
132
|
+
unsubscribeFnArr.forEach(fn => fn())
|
133
|
+
}
|
134
|
+
})
|
@@ -1,134 +1,134 @@
|
|
1
|
-
import * as d3 from 'd3'
|
2
|
-
import {
|
3
|
-
Subject,
|
4
|
-
map,
|
5
|
-
distinctUntilChanged,
|
6
|
-
shareReplay,
|
7
|
-
takeUntil
|
8
|
-
} from 'rxjs'
|
9
|
-
import type { DefinePluginConfig } from '../../../lib/core-types'
|
10
|
-
import {
|
11
|
-
defineMultiGridPlugin } from '../../../lib/core'
|
12
|
-
import { DEFAULT_MULTI_VALUE_AXIS_PARAMS } from '../defaults'
|
13
|
-
import { createBaseValueAxis } from '../../base/BaseValueAxis'
|
14
|
-
import { multiGridPluginDetailObservables } from '../multiGridObservables'
|
15
|
-
import { getClassName, getUniID } from '../../utils/orbchartsUtils'
|
16
|
-
import { LAYER_INDEX_OF_AXIS } from '../../const'
|
17
|
-
|
18
|
-
const pluginName = 'MultiValueAxis'
|
19
|
-
|
20
|
-
const gridClassName = getClassName(pluginName, 'grid')
|
21
|
-
|
22
|
-
const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_MULTI_VALUE_AXIS_PARAMS> = {
|
23
|
-
name: pluginName,
|
24
|
-
defaultParams: DEFAULT_MULTI_VALUE_AXIS_PARAMS,
|
25
|
-
layerIndex: LAYER_INDEX_OF_AXIS,
|
26
|
-
validator: (params, { validateColumns }) => {
|
27
|
-
const result = validateColumns(params, {
|
28
|
-
gridIndexes: {
|
29
|
-
toBe: 'number[] | "all"',
|
30
|
-
test: (value: any) => {
|
31
|
-
return value === 'all' || (Array.isArray(value) && value.every((v: any) => typeof v === 'number'))
|
32
|
-
}
|
33
|
-
},
|
34
|
-
labelOffset: {
|
35
|
-
toBe: '[number, number]',
|
36
|
-
test: (value: any) => {
|
37
|
-
return Array.isArray(value)
|
38
|
-
&& value.length === 2
|
39
|
-
&& typeof value[0] === 'number'
|
40
|
-
&& typeof value[1] === 'number'
|
41
|
-
}
|
42
|
-
},
|
43
|
-
labelColorType: {
|
44
|
-
toBeOption: 'ColorType',
|
45
|
-
},
|
46
|
-
axisLineVisible: {
|
47
|
-
toBeTypes: ['boolean']
|
48
|
-
},
|
49
|
-
axisLineColorType: {
|
50
|
-
toBeOption: 'ColorType',
|
51
|
-
},
|
52
|
-
ticks: {
|
53
|
-
toBeTypes: ['number', 'null']
|
54
|
-
},
|
55
|
-
tickFormat: {
|
56
|
-
toBeTypes: ['string', 'Function']
|
57
|
-
},
|
58
|
-
tickLineVisible: {
|
59
|
-
toBeTypes: ['boolean']
|
60
|
-
},
|
61
|
-
tickPadding: {
|
62
|
-
toBeTypes: ['number']
|
63
|
-
},
|
64
|
-
tickFullLine: {
|
65
|
-
toBeTypes: ['boolean']
|
66
|
-
},
|
67
|
-
tickFullLineDasharray: {
|
68
|
-
toBeTypes: ['string']
|
69
|
-
},
|
70
|
-
tickColorType: {
|
71
|
-
toBeOption: 'ColorType',
|
72
|
-
},
|
73
|
-
tickTextRotate: {
|
74
|
-
toBeTypes: ['number']
|
75
|
-
},
|
76
|
-
tickTextColorType: {
|
77
|
-
toBeOption: 'ColorType',
|
78
|
-
}
|
79
|
-
})
|
80
|
-
return result
|
81
|
-
}
|
82
|
-
}
|
83
|
-
|
84
|
-
export const MultiValueAxis = defineMultiGridPlugin(pluginConfig)(({ selection, name, subject, observer }) => {
|
85
|
-
const destroy$ = new Subject()
|
86
|
-
|
87
|
-
const unsubscribeFnArr: (() => void)[] = []
|
88
|
-
|
89
|
-
const multiGridPluginDetail$ = multiGridPluginDetailObservables(observer)
|
90
|
-
|
91
|
-
multiGridPluginDetail$
|
92
|
-
.pipe(
|
93
|
-
takeUntil(destroy$)
|
94
|
-
)
|
95
|
-
.subscribe(data => {
|
96
|
-
// 每次重新計算時,清除之前的訂閱
|
97
|
-
unsubscribeFnArr.forEach(fn => fn())
|
98
|
-
|
99
|
-
selection.selectAll(`g.${gridClassName}`)
|
100
|
-
.data(data)
|
101
|
-
.join('g')
|
102
|
-
.attr('class', gridClassName)
|
103
|
-
.each((d, i, g) => {
|
104
|
-
|
105
|
-
const gridSelection = d3.select(g[i])
|
106
|
-
|
107
|
-
const isSeriesSeprate$ = d.dataFormatter$.pipe(
|
108
|
-
takeUntil(destroy$),
|
109
|
-
map(d => d.
|
110
|
-
distinctUntilChanged(),
|
111
|
-
shareReplay(1)
|
112
|
-
)
|
113
|
-
|
114
|
-
unsubscribeFnArr[i] = createBaseValueAxis(pluginName, {
|
115
|
-
selection: gridSelection,
|
116
|
-
computedData$: d.computedData$,
|
117
|
-
filteredMinMaxValue$: d.filteredMinMaxValue$,
|
118
|
-
fullParams$: observer.fullParams$,
|
119
|
-
fullDataFormatter$: d.dataFormatter$,
|
120
|
-
fullChartParams$: observer.fullChartParams$,
|
121
|
-
gridAxesTransform$: d.gridAxesTransform$,
|
122
|
-
gridAxesReverseTransform$: d.gridAxesReverseTransform$,
|
123
|
-
gridAxesSize$: d.gridAxesSize$,
|
124
|
-
gridContainerPosition$: d.gridContainerPosition$,
|
125
|
-
isSeriesSeprate$,
|
126
|
-
})
|
127
|
-
})
|
128
|
-
})
|
129
|
-
|
130
|
-
return () => {
|
131
|
-
destroy$.next(undefined)
|
132
|
-
unsubscribeFnArr.forEach(fn => fn())
|
133
|
-
}
|
134
|
-
})
|
1
|
+
import * as d3 from 'd3'
|
2
|
+
import {
|
3
|
+
Subject,
|
4
|
+
map,
|
5
|
+
distinctUntilChanged,
|
6
|
+
shareReplay,
|
7
|
+
takeUntil
|
8
|
+
} from 'rxjs'
|
9
|
+
import type { DefinePluginConfig } from '../../../lib/core-types'
|
10
|
+
import {
|
11
|
+
defineMultiGridPlugin } from '../../../lib/core'
|
12
|
+
import { DEFAULT_MULTI_VALUE_AXIS_PARAMS } from '../defaults'
|
13
|
+
import { createBaseValueAxis } from '../../base/BaseValueAxis'
|
14
|
+
import { multiGridPluginDetailObservables } from '../multiGridObservables'
|
15
|
+
import { getClassName, getUniID } from '../../utils/orbchartsUtils'
|
16
|
+
import { LAYER_INDEX_OF_AXIS } from '../../const'
|
17
|
+
|
18
|
+
const pluginName = 'MultiValueAxis'
|
19
|
+
|
20
|
+
const gridClassName = getClassName(pluginName, 'grid')
|
21
|
+
|
22
|
+
const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_MULTI_VALUE_AXIS_PARAMS> = {
|
23
|
+
name: pluginName,
|
24
|
+
defaultParams: DEFAULT_MULTI_VALUE_AXIS_PARAMS,
|
25
|
+
layerIndex: LAYER_INDEX_OF_AXIS,
|
26
|
+
validator: (params, { validateColumns }) => {
|
27
|
+
const result = validateColumns(params, {
|
28
|
+
gridIndexes: {
|
29
|
+
toBe: 'number[] | "all"',
|
30
|
+
test: (value: any) => {
|
31
|
+
return value === 'all' || (Array.isArray(value) && value.every((v: any) => typeof v === 'number'))
|
32
|
+
}
|
33
|
+
},
|
34
|
+
labelOffset: {
|
35
|
+
toBe: '[number, number]',
|
36
|
+
test: (value: any) => {
|
37
|
+
return Array.isArray(value)
|
38
|
+
&& value.length === 2
|
39
|
+
&& typeof value[0] === 'number'
|
40
|
+
&& typeof value[1] === 'number'
|
41
|
+
}
|
42
|
+
},
|
43
|
+
labelColorType: {
|
44
|
+
toBeOption: 'ColorType',
|
45
|
+
},
|
46
|
+
axisLineVisible: {
|
47
|
+
toBeTypes: ['boolean']
|
48
|
+
},
|
49
|
+
axisLineColorType: {
|
50
|
+
toBeOption: 'ColorType',
|
51
|
+
},
|
52
|
+
ticks: {
|
53
|
+
toBeTypes: ['number', 'null']
|
54
|
+
},
|
55
|
+
tickFormat: {
|
56
|
+
toBeTypes: ['string', 'Function']
|
57
|
+
},
|
58
|
+
tickLineVisible: {
|
59
|
+
toBeTypes: ['boolean']
|
60
|
+
},
|
61
|
+
tickPadding: {
|
62
|
+
toBeTypes: ['number']
|
63
|
+
},
|
64
|
+
tickFullLine: {
|
65
|
+
toBeTypes: ['boolean']
|
66
|
+
},
|
67
|
+
tickFullLineDasharray: {
|
68
|
+
toBeTypes: ['string']
|
69
|
+
},
|
70
|
+
tickColorType: {
|
71
|
+
toBeOption: 'ColorType',
|
72
|
+
},
|
73
|
+
tickTextRotate: {
|
74
|
+
toBeTypes: ['number']
|
75
|
+
},
|
76
|
+
tickTextColorType: {
|
77
|
+
toBeOption: 'ColorType',
|
78
|
+
}
|
79
|
+
})
|
80
|
+
return result
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
export const MultiValueAxis = defineMultiGridPlugin(pluginConfig)(({ selection, name, subject, observer }) => {
|
85
|
+
const destroy$ = new Subject()
|
86
|
+
|
87
|
+
const unsubscribeFnArr: (() => void)[] = []
|
88
|
+
|
89
|
+
const multiGridPluginDetail$ = multiGridPluginDetailObservables(observer)
|
90
|
+
|
91
|
+
multiGridPluginDetail$
|
92
|
+
.pipe(
|
93
|
+
takeUntil(destroy$)
|
94
|
+
)
|
95
|
+
.subscribe(data => {
|
96
|
+
// 每次重新計算時,清除之前的訂閱
|
97
|
+
unsubscribeFnArr.forEach(fn => fn())
|
98
|
+
|
99
|
+
selection.selectAll(`g.${gridClassName}`)
|
100
|
+
.data(data)
|
101
|
+
.join('g')
|
102
|
+
.attr('class', gridClassName)
|
103
|
+
.each((d, i, g) => {
|
104
|
+
|
105
|
+
const gridSelection = d3.select(g[i])
|
106
|
+
|
107
|
+
const isSeriesSeprate$ = d.dataFormatter$.pipe(
|
108
|
+
takeUntil(destroy$),
|
109
|
+
map(d => d.separateSeries),
|
110
|
+
distinctUntilChanged(),
|
111
|
+
shareReplay(1)
|
112
|
+
)
|
113
|
+
|
114
|
+
unsubscribeFnArr[i] = createBaseValueAxis(pluginName, {
|
115
|
+
selection: gridSelection,
|
116
|
+
computedData$: d.computedData$,
|
117
|
+
filteredMinMaxValue$: d.filteredMinMaxValue$,
|
118
|
+
fullParams$: observer.fullParams$,
|
119
|
+
fullDataFormatter$: d.dataFormatter$,
|
120
|
+
fullChartParams$: observer.fullChartParams$,
|
121
|
+
gridAxesTransform$: d.gridAxesTransform$,
|
122
|
+
gridAxesReverseTransform$: d.gridAxesReverseTransform$,
|
123
|
+
gridAxesSize$: d.gridAxesSize$,
|
124
|
+
gridContainerPosition$: d.gridContainerPosition$,
|
125
|
+
isSeriesSeprate$,
|
126
|
+
})
|
127
|
+
})
|
128
|
+
})
|
129
|
+
|
130
|
+
return () => {
|
131
|
+
destroy$.next(undefined)
|
132
|
+
unsubscribeFnArr.forEach(fn => fn())
|
133
|
+
}
|
134
|
+
})
|