@orbcharts/plugins-basic 3.0.0-beta.7 → 3.0.0-beta.8
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/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/StackedBar.d.ts +1 -0
- package/dist/orbcharts-plugins-basic/src/grid/plugins/StackedValueAxis.d.ts +1 -0
- 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/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/OverlappingStackedValueAxes.d.ts +1 -0
- 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 +5 -0
- package/dist/orbcharts-plugins-basic/src/relationship/index.d.ts +4 -0
- package/dist/orbcharts-plugins-basic/src/relationship/plugins/ForceDirected.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/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 +8122 -7467
- package/dist/orbcharts-plugins-basic.umd.js +45 -32
- 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 +113 -0
- package/src/relationship/index.ts +4 -0
- package/src/relationship/plugins/ForceDirected.ts +1148 -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 +604 -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 → ForceDirectedBubbles.d.ts} +0 -0
- /package/src/relationship/plugins/{Relationship.ts → ForceDirectedBubbles.ts} +0 -0
@@ -1,137 +1,137 @@
|
|
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_GROUP_AXIS_PARAMS } from '../defaults'
|
13
|
-
import { createBaseGroupAxis } from '../../base/BaseGroupAxis'
|
14
|
-
import { multiGridPluginDetailObservables } from '../multiGridObservables'
|
15
|
-
import { getClassName, getUniID } from '../../utils/orbchartsUtils'
|
16
|
-
import { LAYER_INDEX_OF_AXIS } from '../../const'
|
17
|
-
|
18
|
-
const pluginName = 'MultiGroupAxis'
|
19
|
-
|
20
|
-
const gridClassName = getClassName(pluginName, 'grid')
|
21
|
-
|
22
|
-
const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_MULTI_GROUP_AXIS_PARAMS> = {
|
23
|
-
name: pluginName,
|
24
|
-
defaultParams: DEFAULT_MULTI_GROUP_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
|
-
toBe: 'number | null | "all"',
|
54
|
-
test: (value: any) => {
|
55
|
-
return value === null || value === 'all' || typeof value === 'number'
|
56
|
-
}
|
57
|
-
},
|
58
|
-
tickFormat: {
|
59
|
-
toBeTypes: ['string', 'Function']
|
60
|
-
},
|
61
|
-
tickLineVisible: {
|
62
|
-
toBeTypes: ['boolean']
|
63
|
-
},
|
64
|
-
tickPadding: {
|
65
|
-
toBeTypes: ['number']
|
66
|
-
},
|
67
|
-
tickFullLine: {
|
68
|
-
toBeTypes: ['boolean']
|
69
|
-
},
|
70
|
-
tickFullLineDasharray: {
|
71
|
-
toBeTypes: ['string']
|
72
|
-
},
|
73
|
-
tickColorType: {
|
74
|
-
toBeOption: 'ColorType',
|
75
|
-
},
|
76
|
-
tickTextRotate: {
|
77
|
-
toBeTypes: ['number']
|
78
|
-
},
|
79
|
-
tickTextColorType: {
|
80
|
-
toBeOption: 'ColorType',
|
81
|
-
}
|
82
|
-
})
|
83
|
-
return result
|
84
|
-
}
|
85
|
-
}
|
86
|
-
|
87
|
-
export const MultiGroupAxis = defineMultiGridPlugin(pluginConfig)(({ selection, name, subject, observer }) => {
|
88
|
-
const destroy$ = new Subject()
|
89
|
-
|
90
|
-
const unsubscribeFnArr: (() => void)[] = []
|
91
|
-
|
92
|
-
const multiGridPluginDetail$ = multiGridPluginDetailObservables(observer)
|
93
|
-
|
94
|
-
multiGridPluginDetail$
|
95
|
-
.pipe(
|
96
|
-
takeUntil(destroy$)
|
97
|
-
)
|
98
|
-
.subscribe(data => {
|
99
|
-
// 每次重新計算時,清除之前的訂閱
|
100
|
-
unsubscribeFnArr.forEach(fn => fn())
|
101
|
-
|
102
|
-
selection.selectAll(`g.${gridClassName}`)
|
103
|
-
.data(data)
|
104
|
-
.join('g')
|
105
|
-
.attr('class', gridClassName)
|
106
|
-
.each((d, i, g) => {
|
107
|
-
|
108
|
-
const gridSelection = d3.select(g[i])
|
109
|
-
|
110
|
-
const isSeriesSeprate$ = d.dataFormatter$.pipe(
|
111
|
-
takeUntil(destroy$),
|
112
|
-
map(d => d.
|
113
|
-
distinctUntilChanged(),
|
114
|
-
shareReplay(1)
|
115
|
-
)
|
116
|
-
|
117
|
-
unsubscribeFnArr[i] = createBaseGroupAxis(pluginName, {
|
118
|
-
selection: gridSelection,
|
119
|
-
computedData$: d.computedData$,
|
120
|
-
fullParams$: observer.fullParams$,
|
121
|
-
fullDataFormatter$: d.dataFormatter$,
|
122
|
-
fullChartParams$: observer.fullChartParams$,
|
123
|
-
gridAxesTransform$: d.gridAxesTransform$,
|
124
|
-
gridAxesReverseTransform$: d.gridAxesReverseTransform$,
|
125
|
-
gridAxesSize$: d.gridAxesSize$,
|
126
|
-
gridContainerPosition$: d.gridContainerPosition$,
|
127
|
-
isSeriesSeprate$,
|
128
|
-
textSizePx$: observer.textSizePx$,
|
129
|
-
})
|
130
|
-
})
|
131
|
-
})
|
132
|
-
|
133
|
-
return () => {
|
134
|
-
destroy$.next(undefined)
|
135
|
-
unsubscribeFnArr.forEach(fn => fn())
|
136
|
-
}
|
137
|
-
})
|
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_GROUP_AXIS_PARAMS } from '../defaults'
|
13
|
+
import { createBaseGroupAxis } from '../../base/BaseGroupAxis'
|
14
|
+
import { multiGridPluginDetailObservables } from '../multiGridObservables'
|
15
|
+
import { getClassName, getUniID } from '../../utils/orbchartsUtils'
|
16
|
+
import { LAYER_INDEX_OF_AXIS } from '../../const'
|
17
|
+
|
18
|
+
const pluginName = 'MultiGroupAxis'
|
19
|
+
|
20
|
+
const gridClassName = getClassName(pluginName, 'grid')
|
21
|
+
|
22
|
+
const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_MULTI_GROUP_AXIS_PARAMS> = {
|
23
|
+
name: pluginName,
|
24
|
+
defaultParams: DEFAULT_MULTI_GROUP_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
|
+
toBe: 'number | null | "all"',
|
54
|
+
test: (value: any) => {
|
55
|
+
return value === null || value === 'all' || typeof value === 'number'
|
56
|
+
}
|
57
|
+
},
|
58
|
+
tickFormat: {
|
59
|
+
toBeTypes: ['string', 'Function']
|
60
|
+
},
|
61
|
+
tickLineVisible: {
|
62
|
+
toBeTypes: ['boolean']
|
63
|
+
},
|
64
|
+
tickPadding: {
|
65
|
+
toBeTypes: ['number']
|
66
|
+
},
|
67
|
+
tickFullLine: {
|
68
|
+
toBeTypes: ['boolean']
|
69
|
+
},
|
70
|
+
tickFullLineDasharray: {
|
71
|
+
toBeTypes: ['string']
|
72
|
+
},
|
73
|
+
tickColorType: {
|
74
|
+
toBeOption: 'ColorType',
|
75
|
+
},
|
76
|
+
tickTextRotate: {
|
77
|
+
toBeTypes: ['number']
|
78
|
+
},
|
79
|
+
tickTextColorType: {
|
80
|
+
toBeOption: 'ColorType',
|
81
|
+
}
|
82
|
+
})
|
83
|
+
return result
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
export const MultiGroupAxis = defineMultiGridPlugin(pluginConfig)(({ selection, name, subject, observer }) => {
|
88
|
+
const destroy$ = new Subject()
|
89
|
+
|
90
|
+
const unsubscribeFnArr: (() => void)[] = []
|
91
|
+
|
92
|
+
const multiGridPluginDetail$ = multiGridPluginDetailObservables(observer)
|
93
|
+
|
94
|
+
multiGridPluginDetail$
|
95
|
+
.pipe(
|
96
|
+
takeUntil(destroy$)
|
97
|
+
)
|
98
|
+
.subscribe(data => {
|
99
|
+
// 每次重新計算時,清除之前的訂閱
|
100
|
+
unsubscribeFnArr.forEach(fn => fn())
|
101
|
+
|
102
|
+
selection.selectAll(`g.${gridClassName}`)
|
103
|
+
.data(data)
|
104
|
+
.join('g')
|
105
|
+
.attr('class', gridClassName)
|
106
|
+
.each((d, i, g) => {
|
107
|
+
|
108
|
+
const gridSelection = d3.select(g[i])
|
109
|
+
|
110
|
+
const isSeriesSeprate$ = d.dataFormatter$.pipe(
|
111
|
+
takeUntil(destroy$),
|
112
|
+
map(d => d.separateSeries),
|
113
|
+
distinctUntilChanged(),
|
114
|
+
shareReplay(1)
|
115
|
+
)
|
116
|
+
|
117
|
+
unsubscribeFnArr[i] = createBaseGroupAxis(pluginName, {
|
118
|
+
selection: gridSelection,
|
119
|
+
computedData$: d.computedData$,
|
120
|
+
fullParams$: observer.fullParams$,
|
121
|
+
fullDataFormatter$: d.dataFormatter$,
|
122
|
+
fullChartParams$: observer.fullChartParams$,
|
123
|
+
gridAxesTransform$: d.gridAxesTransform$,
|
124
|
+
gridAxesReverseTransform$: d.gridAxesReverseTransform$,
|
125
|
+
gridAxesSize$: d.gridAxesSize$,
|
126
|
+
gridContainerPosition$: d.gridContainerPosition$,
|
127
|
+
isSeriesSeprate$,
|
128
|
+
textSizePx$: observer.textSizePx$,
|
129
|
+
})
|
130
|
+
})
|
131
|
+
})
|
132
|
+
|
133
|
+
return () => {
|
134
|
+
destroy$.next(undefined)
|
135
|
+
unsubscribeFnArr.forEach(fn => fn())
|
136
|
+
}
|
137
|
+
})
|
@@ -1,107 +1,107 @@
|
|
1
|
-
import * as d3 from 'd3'
|
2
|
-
import {
|
3
|
-
map,
|
4
|
-
takeUntil,
|
5
|
-
Subject } from 'rxjs'
|
6
|
-
import type { DefinePluginConfig } from '../../../lib/core-types'
|
7
|
-
import {
|
8
|
-
defineMultiGridPlugin } from '../../../lib/core'
|
9
|
-
import { DEFAULT_MULTI_LINE_AREAS_PARAMS } from '../defaults'
|
10
|
-
import { createBaseLineAreas } from '../../base/BaseLineAreas'
|
11
|
-
import { multiGridPluginDetailObservables } from '../multiGridObservables'
|
12
|
-
import { getClassName, getUniID } from '../../utils/orbchartsUtils'
|
13
|
-
import { LAYER_INDEX_OF_GRAPHIC_GROUND } from '../../const'
|
14
|
-
|
15
|
-
const pluginName = 'MultiLineAreas'
|
16
|
-
|
17
|
-
const gridClassName = getClassName(pluginName, 'grid')
|
18
|
-
|
19
|
-
const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_MULTI_LINE_AREAS_PARAMS> = {
|
20
|
-
name: pluginName,
|
21
|
-
defaultParams: DEFAULT_MULTI_LINE_AREAS_PARAMS,
|
22
|
-
layerIndex: LAYER_INDEX_OF_GRAPHIC_GROUND,
|
23
|
-
validator: (params, { validateColumns }) => {
|
24
|
-
const result = validateColumns(params, {
|
25
|
-
gridIndexes: {
|
26
|
-
toBe: 'number[] | "all"',
|
27
|
-
test: (value: any) => {
|
28
|
-
return value === 'all' || (Array.isArray(value) && value.every((v: any) => typeof v === 'number'))
|
29
|
-
}
|
30
|
-
},
|
31
|
-
lineCurve: {
|
32
|
-
toBeTypes: ['string']
|
33
|
-
},
|
34
|
-
linearGradientOpacity: {
|
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
|
-
})
|
44
|
-
return result
|
45
|
-
}
|
46
|
-
}
|
47
|
-
|
48
|
-
export const MultiLineAreas = defineMultiGridPlugin(pluginConfig)(({ selection, name, subject, observer }) => {
|
49
|
-
const destroy$ = new Subject()
|
50
|
-
|
51
|
-
const unsubscribeFnArr: (() => void)[] = []
|
52
|
-
|
53
|
-
// 攤平所有grid的containerPosition
|
54
|
-
const allContainerPosition$ = observer.multiGridContainerPosition$.pipe(
|
55
|
-
takeUntil(destroy$),
|
56
|
-
map(data => {
|
57
|
-
return data.flat()
|
58
|
-
})
|
59
|
-
)
|
60
|
-
|
61
|
-
const multiGridPluginDetail$ = multiGridPluginDetailObservables(observer)
|
62
|
-
|
63
|
-
multiGridPluginDetail$
|
64
|
-
.pipe(
|
65
|
-
takeUntil(destroy$)
|
66
|
-
)
|
67
|
-
.subscribe(data => {
|
68
|
-
// 每次重新計算時,清除之前的訂閱
|
69
|
-
unsubscribeFnArr.forEach(fn => fn())
|
70
|
-
|
71
|
-
selection.selectAll(`g.${gridClassName}`)
|
72
|
-
.data(data)
|
73
|
-
.join('g')
|
74
|
-
.attr('class', gridClassName)
|
75
|
-
.each((d, i, g) => {
|
76
|
-
|
77
|
-
const gridSelection = d3.select(g[i])
|
78
|
-
|
79
|
-
unsubscribeFnArr[i] = createBaseLineAreas(pluginName, {
|
80
|
-
selection: gridSelection,
|
81
|
-
computedData$: d.computedData$,
|
82
|
-
computedLayoutData$: d.computedLayoutData$,
|
83
|
-
visibleComputedData$: d.visibleComputedData$,
|
84
|
-
visibleComputedLayoutData$: d.visibleComputedLayoutData$,
|
85
|
-
seriesLabels$: d.seriesLabels$,
|
86
|
-
SeriesDataMap$: d.SeriesDataMap$,
|
87
|
-
GroupDataMap$: d.GroupDataMap$,
|
88
|
-
fullDataFormatter$: d.dataFormatter$,
|
89
|
-
fullParams$: observer.fullParams$,
|
90
|
-
fullChartParams$: observer.fullChartParams$,
|
91
|
-
gridAxesTransform$: d.gridAxesTransform$,
|
92
|
-
gridGraphicTransform$: d.gridGraphicTransform$,
|
93
|
-
gridAxesSize$: d.gridAxesSize$,
|
94
|
-
gridHighlight$: d.gridHighlight$,
|
95
|
-
gridContainerPosition$: d.gridContainerPosition$,
|
96
|
-
allContainerPosition$: allContainerPosition$,
|
97
|
-
layout$: observer.layout$,
|
98
|
-
event$: subject.event$ as Subject<any>,
|
99
|
-
})
|
100
|
-
})
|
101
|
-
})
|
102
|
-
|
103
|
-
return () => {
|
104
|
-
destroy$.next(undefined)
|
105
|
-
unsubscribeFnArr.forEach(fn => fn())
|
106
|
-
}
|
107
|
-
})
|
1
|
+
import * as d3 from 'd3'
|
2
|
+
import {
|
3
|
+
map,
|
4
|
+
takeUntil,
|
5
|
+
Subject } from 'rxjs'
|
6
|
+
import type { DefinePluginConfig } from '../../../lib/core-types'
|
7
|
+
import {
|
8
|
+
defineMultiGridPlugin } from '../../../lib/core'
|
9
|
+
import { DEFAULT_MULTI_LINE_AREAS_PARAMS } from '../defaults'
|
10
|
+
import { createBaseLineAreas } from '../../base/BaseLineAreas'
|
11
|
+
import { multiGridPluginDetailObservables } from '../multiGridObservables'
|
12
|
+
import { getClassName, getUniID } from '../../utils/orbchartsUtils'
|
13
|
+
import { LAYER_INDEX_OF_GRAPHIC_GROUND } from '../../const'
|
14
|
+
|
15
|
+
const pluginName = 'MultiLineAreas'
|
16
|
+
|
17
|
+
const gridClassName = getClassName(pluginName, 'grid')
|
18
|
+
|
19
|
+
const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_MULTI_LINE_AREAS_PARAMS> = {
|
20
|
+
name: pluginName,
|
21
|
+
defaultParams: DEFAULT_MULTI_LINE_AREAS_PARAMS,
|
22
|
+
layerIndex: LAYER_INDEX_OF_GRAPHIC_GROUND,
|
23
|
+
validator: (params, { validateColumns }) => {
|
24
|
+
const result = validateColumns(params, {
|
25
|
+
gridIndexes: {
|
26
|
+
toBe: 'number[] | "all"',
|
27
|
+
test: (value: any) => {
|
28
|
+
return value === 'all' || (Array.isArray(value) && value.every((v: any) => typeof v === 'number'))
|
29
|
+
}
|
30
|
+
},
|
31
|
+
lineCurve: {
|
32
|
+
toBeTypes: ['string']
|
33
|
+
},
|
34
|
+
linearGradientOpacity: {
|
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
|
+
})
|
44
|
+
return result
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
export const MultiLineAreas = defineMultiGridPlugin(pluginConfig)(({ selection, name, subject, observer }) => {
|
49
|
+
const destroy$ = new Subject()
|
50
|
+
|
51
|
+
const unsubscribeFnArr: (() => void)[] = []
|
52
|
+
|
53
|
+
// 攤平所有grid的containerPosition
|
54
|
+
const allContainerPosition$ = observer.multiGridContainerPosition$.pipe(
|
55
|
+
takeUntil(destroy$),
|
56
|
+
map(data => {
|
57
|
+
return data.flat()
|
58
|
+
})
|
59
|
+
)
|
60
|
+
|
61
|
+
const multiGridPluginDetail$ = multiGridPluginDetailObservables(observer)
|
62
|
+
|
63
|
+
multiGridPluginDetail$
|
64
|
+
.pipe(
|
65
|
+
takeUntil(destroy$)
|
66
|
+
)
|
67
|
+
.subscribe(data => {
|
68
|
+
// 每次重新計算時,清除之前的訂閱
|
69
|
+
unsubscribeFnArr.forEach(fn => fn())
|
70
|
+
|
71
|
+
selection.selectAll(`g.${gridClassName}`)
|
72
|
+
.data(data)
|
73
|
+
.join('g')
|
74
|
+
.attr('class', gridClassName)
|
75
|
+
.each((d, i, g) => {
|
76
|
+
|
77
|
+
const gridSelection = d3.select(g[i])
|
78
|
+
|
79
|
+
unsubscribeFnArr[i] = createBaseLineAreas(pluginName, {
|
80
|
+
selection: gridSelection,
|
81
|
+
computedData$: d.computedData$,
|
82
|
+
computedLayoutData$: d.computedLayoutData$,
|
83
|
+
visibleComputedData$: d.visibleComputedData$,
|
84
|
+
visibleComputedLayoutData$: d.visibleComputedLayoutData$,
|
85
|
+
seriesLabels$: d.seriesLabels$,
|
86
|
+
SeriesDataMap$: d.SeriesDataMap$,
|
87
|
+
GroupDataMap$: d.GroupDataMap$,
|
88
|
+
fullDataFormatter$: d.dataFormatter$,
|
89
|
+
fullParams$: observer.fullParams$,
|
90
|
+
fullChartParams$: observer.fullChartParams$,
|
91
|
+
gridAxesTransform$: d.gridAxesTransform$,
|
92
|
+
gridGraphicTransform$: d.gridGraphicTransform$,
|
93
|
+
gridAxesSize$: d.gridAxesSize$,
|
94
|
+
gridHighlight$: d.gridHighlight$,
|
95
|
+
gridContainerPosition$: d.gridContainerPosition$,
|
96
|
+
allContainerPosition$: allContainerPosition$,
|
97
|
+
layout$: observer.layout$,
|
98
|
+
event$: subject.event$ as Subject<any>,
|
99
|
+
})
|
100
|
+
})
|
101
|
+
})
|
102
|
+
|
103
|
+
return () => {
|
104
|
+
destroy$.next(undefined)
|
105
|
+
unsubscribeFnArr.forEach(fn => fn())
|
106
|
+
}
|
107
|
+
})
|