@orbcharts/plugins-basic 3.0.0-alpha.45 → 3.0.0-alpha.47

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. package/LICENSE +200 -200
  2. package/dist/orbcharts-plugins-basic.es.js +826 -791
  3. package/dist/orbcharts-plugins-basic.umd.js +7 -7
  4. package/dist/src/index.d.ts +5 -1
  5. package/dist/{orbcharts-plugins-basic/src → src}/series/seriesObservables.d.ts +4 -4
  6. package/package.json +42 -42
  7. package/src/base/BaseBarStack.ts +778 -778
  8. package/src/base/BaseBars.ts +764 -764
  9. package/src/base/BaseBarsTriangle.ts +672 -672
  10. package/src/base/BaseDots.ts +502 -502
  11. package/src/base/BaseGroupAxis.ts +496 -496
  12. package/src/base/BaseLegend.ts +641 -641
  13. package/src/base/BaseLineAreas.ts +625 -625
  14. package/src/base/BaseLines.ts +699 -699
  15. package/src/base/BaseValueAxis.ts +478 -478
  16. package/src/base/types.ts +2 -2
  17. package/src/grid/defaults.ts +121 -121
  18. package/src/grid/gridObservables.ts +247 -247
  19. package/src/grid/index.ts +15 -15
  20. package/src/grid/plugins/BarStack.ts +50 -50
  21. package/src/grid/plugins/Bars.ts +51 -51
  22. package/src/grid/plugins/BarsDiverging.ts +41 -41
  23. package/src/grid/plugins/BarsTriangle.ts +50 -50
  24. package/src/grid/plugins/Dots.ts +37 -37
  25. package/src/grid/plugins/GridLegend.ts +59 -59
  26. package/src/grid/plugins/GroupAux.ts +645 -645
  27. package/src/grid/plugins/GroupAxis.ts +42 -42
  28. package/src/grid/plugins/LineAreas.ts +39 -39
  29. package/src/grid/plugins/Lines.ts +38 -38
  30. package/src/grid/plugins/ScalingArea.ts +173 -173
  31. package/src/grid/plugins/ValueAxis.ts +43 -43
  32. package/src/grid/plugins/ValueStackAxis.ts +79 -79
  33. package/src/grid/types.ts +120 -120
  34. package/src/index.ts +9 -9
  35. package/src/multiGrid/defaults.ts +147 -147
  36. package/src/multiGrid/index.ts +11 -11
  37. package/src/multiGrid/multiGridObservables.ts +42 -42
  38. package/src/multiGrid/plugins/MultiBarStack.ts +78 -74
  39. package/src/multiGrid/plugins/MultiBars.ts +77 -73
  40. package/src/multiGrid/plugins/MultiBarsTriangle.ts +77 -73
  41. package/src/multiGrid/plugins/MultiDots.ts +65 -60
  42. package/src/multiGrid/plugins/MultiGridLegend.ts +89 -89
  43. package/src/multiGrid/plugins/MultiGroupAxis.ts +69 -65
  44. package/src/multiGrid/plugins/MultiLineAreas.ts +67 -62
  45. package/src/multiGrid/plugins/MultiLines.ts +66 -61
  46. package/src/multiGrid/plugins/MultiValueAxis.ts +69 -65
  47. package/src/multiGrid/plugins/OverlappingValueAxes.ts +173 -169
  48. package/src/multiGrid/types.ts +67 -67
  49. package/src/noneData/defaults.ts +64 -64
  50. package/src/noneData/index.ts +3 -3
  51. package/src/noneData/plugins/Container.ts +10 -10
  52. package/src/noneData/plugins/Tooltip.ts +310 -310
  53. package/src/noneData/types.ts +26 -26
  54. package/src/series/defaults.ts +109 -109
  55. package/src/series/index.ts +6 -6
  56. package/src/series/plugins/Bubbles.ts +602 -571
  57. package/src/series/plugins/Pie.ts +563 -548
  58. package/src/series/plugins/PieEventTexts.ts +262 -258
  59. package/src/series/plugins/PieLabels.ts +339 -335
  60. package/src/series/plugins/SeriesLegend.ts +59 -59
  61. package/src/series/seriesObservables.ts +145 -145
  62. package/src/series/seriesUtils.ts +50 -50
  63. package/src/series/types.ts +67 -67
  64. package/src/tree/defaults.ts +22 -22
  65. package/src/tree/index.ts +3 -3
  66. package/src/tree/plugins/TreeLegend.ts +59 -59
  67. package/src/tree/plugins/TreeMap.ts +305 -305
  68. package/src/tree/types.ts +23 -23
  69. package/src/utils/commonUtils.ts +21 -21
  70. package/src/utils/d3Graphics.ts +124 -124
  71. package/src/utils/d3Utils.ts +73 -73
  72. package/src/utils/observables.ts +14 -14
  73. package/src/utils/orbchartsUtils.ts +100 -100
  74. package/tsconfig.dev.json +16 -16
  75. package/tsconfig.json +13 -16
  76. package/tsconfig.prod.json +13 -13
  77. package/vite.config.js +49 -49
  78. package/dist/orbcharts-plugins-basic/src/index.d.ts +0 -5
  79. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseBarStack.d.ts +0 -0
  80. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseBars.d.ts +0 -0
  81. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseBarsTriangle.d.ts +0 -0
  82. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseDots.d.ts +0 -0
  83. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseGroupArea.d.ts +0 -0
  84. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseGroupAxis.d.ts +0 -0
  85. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseLegend.d.ts +0 -0
  86. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseLineAreas.d.ts +0 -0
  87. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseLines.d.ts +0 -0
  88. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseValueAxis.d.ts +0 -0
  89. /package/dist/{orbcharts-plugins-basic/src → src}/base/types.d.ts +0 -0
  90. /package/dist/{orbcharts-plugins-basic/src → src}/grid/defaults.d.ts +0 -0
  91. /package/dist/{orbcharts-plugins-basic/src → src}/grid/gridObservables.d.ts +0 -0
  92. /package/dist/{orbcharts-plugins-basic/src → src}/grid/index.d.ts +0 -0
  93. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/BarStack.d.ts +0 -0
  94. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/Bars.d.ts +0 -0
  95. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/BarsDiverging.d.ts +0 -0
  96. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/BarsTriangle.d.ts +0 -0
  97. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/Dots.d.ts +0 -0
  98. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/GridLegend.d.ts +0 -0
  99. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/GroupAux.d.ts +0 -0
  100. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/GroupAxis.d.ts +0 -0
  101. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/LineAreas.d.ts +0 -0
  102. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/Lines.d.ts +0 -0
  103. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/Ranking.d.ts +0 -0
  104. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/RankingAxis.d.ts +0 -0
  105. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/ScalingArea.d.ts +0 -0
  106. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/ValueAxis.d.ts +0 -0
  107. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/ValueStackAxis.d.ts +0 -0
  108. /package/dist/{orbcharts-plugins-basic/src → src}/grid/types.d.ts +0 -0
  109. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/defaults.d.ts +0 -0
  110. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/index.d.ts +0 -0
  111. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/multiGridObservables.d.ts +0 -0
  112. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiBarStack.d.ts +0 -0
  113. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiBars.d.ts +0 -0
  114. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiBarsTriangle.d.ts +0 -0
  115. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiDots.d.ts +0 -0
  116. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiGridLegend.d.ts +0 -0
  117. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiGroupAxis.d.ts +0 -0
  118. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiLineAreas.d.ts +0 -0
  119. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiLines.d.ts +0 -0
  120. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiValueAxis.d.ts +0 -0
  121. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/OverlappingValueAxes.d.ts +0 -0
  122. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/types.d.ts +0 -0
  123. /package/dist/{orbcharts-plugins-basic/src → src}/multiValue/index.d.ts +0 -0
  124. /package/dist/{orbcharts-plugins-basic/src → src}/multiValue/plugins/Scatter.d.ts +0 -0
  125. /package/dist/{orbcharts-plugins-basic/src → src}/multiValue/plugins/ScatterAxes.d.ts +0 -0
  126. /package/dist/{orbcharts-plugins-basic/src → src}/noneData/defaults.d.ts +0 -0
  127. /package/dist/{orbcharts-plugins-basic/src → src}/noneData/index.d.ts +0 -0
  128. /package/dist/{orbcharts-plugins-basic/src → src}/noneData/plugins/Container.d.ts +0 -0
  129. /package/dist/{orbcharts-plugins-basic/src → src}/noneData/plugins/Tooltip.d.ts +0 -0
  130. /package/dist/{orbcharts-plugins-basic/src → src}/noneData/types.d.ts +0 -0
  131. /package/dist/{orbcharts-plugins-basic/src → src}/relationship/index.d.ts +0 -0
  132. /package/dist/{orbcharts-plugins-basic/src → src}/relationship/plugins/Relationship.d.ts +0 -0
  133. /package/dist/{orbcharts-plugins-basic/src → src}/series/defaults.d.ts +0 -0
  134. /package/dist/{orbcharts-plugins-basic/src → src}/series/index.d.ts +0 -0
  135. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/Bubbles.d.ts +0 -0
  136. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/Pie.d.ts +0 -0
  137. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/PieEventTexts.d.ts +0 -0
  138. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/PieLabels.d.ts +0 -0
  139. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/SeriesLegend.d.ts +0 -0
  140. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/Waffle.d.ts +0 -0
  141. /package/dist/{orbcharts-plugins-basic/src → src}/series/seriesUtils.d.ts +0 -0
  142. /package/dist/{orbcharts-plugins-basic/src → src}/series/types.d.ts +0 -0
  143. /package/dist/{orbcharts-plugins-basic/src → src}/tree/defaults.d.ts +0 -0
  144. /package/dist/{orbcharts-plugins-basic/src → src}/tree/index.d.ts +0 -0
  145. /package/dist/{orbcharts-plugins-basic/src → src}/tree/plugins/TreeLegend.d.ts +0 -0
  146. /package/dist/{orbcharts-plugins-basic/src → src}/tree/plugins/TreeMap.d.ts +0 -0
  147. /package/dist/{orbcharts-plugins-basic/src → src}/tree/types.d.ts +0 -0
  148. /package/dist/{orbcharts-plugins-basic/src → src}/utils/commonUtils.d.ts +0 -0
  149. /package/dist/{orbcharts-plugins-basic/src → src}/utils/d3Graphics.d.ts +0 -0
  150. /package/dist/{orbcharts-plugins-basic/src → src}/utils/d3Utils.d.ts +0 -0
  151. /package/dist/{orbcharts-plugins-basic/src → src}/utils/observables.d.ts +0 -0
  152. /package/dist/{orbcharts-plugins-basic/src → src}/utils/orbchartsUtils.d.ts +0 -0
  153. /package/dist/{orbcharts-plugins-basic/vite.config.d.ts → vite.config.d.ts} +0 -0
@@ -1,169 +1,173 @@
1
- import * as d3 from 'd3'
2
- import {
3
- of,
4
- map,
5
- switchMap,
6
- combineLatest,
7
- takeUntil,
8
- distinctUntilChanged,
9
- shareReplay,
10
- iif,
11
- Observable,
12
- Subject } from 'rxjs'
13
- import type { ContextObserverMultiGrid, DataFormatterGrid, DataFormatterTypeMap, Layout } from '@orbcharts/core'
14
- import {
15
- defineMultiGridPlugin } from '@orbcharts/core'
16
- import { DEFAULT_OVERLAPPING_VALUE_AXES_PARAMS } from '../defaults'
17
- import { createBaseValueAxis } from '../../base/BaseValueAxis'
18
- import { multiGridPluginObservables } from '../multiGridObservables'
19
- import { getClassName, getUniID } from '../../utils/orbchartsUtils'
20
- import { gridAxesTransformObservable, gridAxesReverseTransformObservable, gridContainerPositionObservable } from '@orbcharts/core/src/grid/gridObservables'
21
-
22
- const pluginName = 'OverlappingValueAxes'
23
-
24
- const gridClassName = getClassName(pluginName, 'grid')
25
-
26
- export const OverlappingValueAxes = defineMultiGridPlugin(pluginName, DEFAULT_OVERLAPPING_VALUE_AXES_PARAMS)(({ selection, name, subject, observer }) => {
27
- const destroy$ = new Subject()
28
-
29
- const unsubscribeFnArr: (() => void)[] = []
30
-
31
- const firstGridIndex$ = observer.fullParams$.pipe(
32
- takeUntil(destroy$),
33
- map(fullParams => fullParams.gridIndexes[0])
34
- )
35
-
36
- const secondGridIndex$ = observer.fullParams$.pipe(
37
- takeUntil(destroy$),
38
- map(fullParams => fullParams.gridIndexes[1])
39
- )
40
-
41
- // 為了要反轉第二個valueAxis的位置所以要重新計算
42
- const secondGridDataFormatter$: Observable<DataFormatterGrid> = combineLatest({
43
- firstGridIndex: firstGridIndex$,
44
- secondGridIndex: secondGridIndex$,
45
- fullDataFormatter: observer.fullDataFormatter$,
46
- }).pipe(
47
- takeUntil(destroy$),
48
- switchMap(async (d) => d),
49
- map(data => {
50
- if (!data.fullDataFormatter.gridList[data.secondGridIndex]) {
51
- data.fullDataFormatter.gridList[data.secondGridIndex] = Object.assign({}, data.fullDataFormatter.gridList[data.firstGridIndex])
52
- }
53
- // 反轉第二個valueAxis的位置
54
- let reversePosition = ''
55
- if (data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position === 'left') {
56
- reversePosition = 'right'
57
- } else if (data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position === 'bottom') {
58
- reversePosition = 'top'
59
- } else if (data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position === 'top') {
60
- reversePosition = 'bottom'
61
- } else if (data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position === 'right') {
62
- reversePosition = 'left'
63
- }
64
- return <DataFormatterGrid>{
65
- type: 'grid',
66
- visibleFilter: data.fullDataFormatter.visibleFilter as any,
67
- grid: {
68
- ...data.fullDataFormatter.gridList[data.secondGridIndex],
69
- valueAxis: {
70
- ...data.fullDataFormatter.gridList[data.secondGridIndex].valueAxis,
71
- position: reversePosition
72
- }
73
- },
74
- container: {
75
- ...data.fullDataFormatter.container
76
- }
77
- }
78
- })
79
- )
80
-
81
- const multiGridPlugin$ = of(observer).pipe(
82
- takeUntil(destroy$),
83
- map(observer => {
84
- // 將observer的gridIndexes限制在2個
85
- return {
86
- ...observer,
87
- fullParams$: observer.fullParams$.pipe(
88
- map(fullParams => {
89
- if (fullParams.gridIndexes.length > 2) {
90
- fullParams.gridIndexes.length = 2
91
- }
92
- return fullParams
93
- })
94
- )
95
- }
96
- }),
97
- switchMap(observer => multiGridPluginObservables(observer)),
98
- map(data => {
99
- return data.map((observables, index) => {
100
- if (index === 0) {
101
- return observables
102
- }
103
- // index === 1,將跟第二個valueAxis有關的observables全部重新計算
104
- const gridAxesTransform$ = gridAxesTransformObservable({
105
- fullDataFormatter$: secondGridDataFormatter$,
106
- layout$: observer.layout$
107
- })
108
- const gridAxesReverseTransform$ = gridAxesReverseTransformObservable({
109
- gridAxesTransform$
110
- })
111
- const gridContainerPosition$ = gridContainerPositionObservable({
112
- computedData$: observables.computedData$,
113
- fullDataFormatter$: secondGridDataFormatter$,
114
- layout$: observer.layout$
115
- })
116
- return {
117
- ...observables,
118
- gridAxesTransform$,
119
- gridAxesReverseTransform$,
120
- gridContainerPosition$,
121
- }
122
- })
123
- })
124
- )
125
-
126
- multiGridPlugin$.subscribe(data => {
127
- // 每次重新計算時,清除之前的訂閱
128
- unsubscribeFnArr.forEach(fn => fn())
129
-
130
- selection.selectAll(`g.${gridClassName}`)
131
- .data(data)
132
- .join('g')
133
- .attr('class', gridClassName)
134
- .each((d, i, g) => {
135
- if (i > 1) {
136
- return
137
- }
138
-
139
- const gridSelection = d3.select(g[i])
140
-
141
- const isSeriesSeprate$ = d.dataFormatter$.pipe(
142
- takeUntil(destroy$),
143
- map(d => d.grid.separateSeries),
144
- distinctUntilChanged(),
145
- shareReplay(1)
146
- )
147
-
148
- unsubscribeFnArr[i] = createBaseValueAxis(pluginName, {
149
- selection: gridSelection,
150
- computedData$: d.computedData$,
151
- fullParams$: observer.fullParams$.pipe(
152
- map(fullParams => i === 0 ? fullParams.firstAxis : fullParams.secondAxis)
153
- ),
154
- fullDataFormatter$: d.dataFormatter$,
155
- fullChartParams$: observer.fullChartParams$,
156
- gridAxesTransform$: d.gridAxesTransform$,
157
- gridAxesReverseTransform$: d.gridAxesReverseTransform$,
158
- gridAxesSize$: d.gridAxesSize$,
159
- gridContainerPosition$: d.gridContainerPosition$,
160
- isSeriesSeprate$,
161
- })
162
- })
163
- })
164
-
165
- return () => {
166
- destroy$.next(undefined)
167
- unsubscribeFnArr.forEach(fn => fn())
168
- }
169
- })
1
+ import * as d3 from 'd3'
2
+ import {
3
+ of,
4
+ map,
5
+ switchMap,
6
+ combineLatest,
7
+ takeUntil,
8
+ distinctUntilChanged,
9
+ shareReplay,
10
+ iif,
11
+ Observable,
12
+ Subject } from 'rxjs'
13
+ import type { ContextObserverMultiGrid, DataFormatterGrid, DataFormatterTypeMap, Layout } from '@orbcharts/core'
14
+ import {
15
+ defineMultiGridPlugin } from '@orbcharts/core'
16
+ import { DEFAULT_OVERLAPPING_VALUE_AXES_PARAMS } from '../defaults'
17
+ import { createBaseValueAxis } from '../../base/BaseValueAxis'
18
+ import { multiGridPluginObservables } from '../multiGridObservables'
19
+ import { getClassName, getUniID } from '../../utils/orbchartsUtils'
20
+ import { gridAxesTransformObservable, gridAxesReverseTransformObservable, gridContainerPositionObservable } from '@orbcharts/core/src/grid/gridObservables'
21
+
22
+ const pluginName = 'OverlappingValueAxes'
23
+
24
+ const gridClassName = getClassName(pluginName, 'grid')
25
+
26
+ export const OverlappingValueAxes = defineMultiGridPlugin(pluginName, DEFAULT_OVERLAPPING_VALUE_AXES_PARAMS)(({ selection, name, subject, observer }) => {
27
+ const destroy$ = new Subject()
28
+
29
+ const unsubscribeFnArr: (() => void)[] = []
30
+
31
+ const firstGridIndex$ = observer.fullParams$.pipe(
32
+ takeUntil(destroy$),
33
+ map(fullParams => fullParams.gridIndexes[0])
34
+ )
35
+
36
+ const secondGridIndex$ = observer.fullParams$.pipe(
37
+ takeUntil(destroy$),
38
+ map(fullParams => fullParams.gridIndexes[1])
39
+ )
40
+
41
+ // 為了要反轉第二個valueAxis的位置所以要重新計算
42
+ const secondGridDataFormatter$: Observable<DataFormatterGrid> = combineLatest({
43
+ firstGridIndex: firstGridIndex$,
44
+ secondGridIndex: secondGridIndex$,
45
+ fullDataFormatter: observer.fullDataFormatter$,
46
+ }).pipe(
47
+ takeUntil(destroy$),
48
+ switchMap(async (d) => d),
49
+ map(data => {
50
+ if (!data.fullDataFormatter.gridList[data.secondGridIndex]) {
51
+ data.fullDataFormatter.gridList[data.secondGridIndex] = Object.assign({}, data.fullDataFormatter.gridList[data.firstGridIndex])
52
+ }
53
+ // 反轉第二個valueAxis的位置
54
+ let reversePosition = ''
55
+ if (data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position === 'left') {
56
+ reversePosition = 'right'
57
+ } else if (data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position === 'bottom') {
58
+ reversePosition = 'top'
59
+ } else if (data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position === 'top') {
60
+ reversePosition = 'bottom'
61
+ } else if (data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position === 'right') {
62
+ reversePosition = 'left'
63
+ }
64
+ return <DataFormatterGrid>{
65
+ type: 'grid',
66
+ visibleFilter: data.fullDataFormatter.visibleFilter as any,
67
+ grid: {
68
+ ...data.fullDataFormatter.gridList[data.secondGridIndex],
69
+ valueAxis: {
70
+ ...data.fullDataFormatter.gridList[data.secondGridIndex].valueAxis,
71
+ position: reversePosition
72
+ }
73
+ },
74
+ container: {
75
+ ...data.fullDataFormatter.container
76
+ }
77
+ }
78
+ })
79
+ )
80
+
81
+ const multiGridPlugin$ = of(observer).pipe(
82
+ takeUntil(destroy$),
83
+ map(observer => {
84
+ // 將observer的gridIndexes限制在2個
85
+ return {
86
+ ...observer,
87
+ fullParams$: observer.fullParams$.pipe(
88
+ map(fullParams => {
89
+ if (fullParams.gridIndexes.length > 2) {
90
+ fullParams.gridIndexes.length = 2
91
+ }
92
+ return fullParams
93
+ })
94
+ )
95
+ }
96
+ }),
97
+ switchMap(observer => multiGridPluginObservables(observer)),
98
+ map(data => {
99
+ return data.map((observables, index) => {
100
+ if (index === 0) {
101
+ return observables
102
+ }
103
+ // index === 1,將跟第二個valueAxis有關的observables全部重新計算
104
+ const gridAxesTransform$ = gridAxesTransformObservable({
105
+ fullDataFormatter$: secondGridDataFormatter$,
106
+ layout$: observer.layout$
107
+ })
108
+ const gridAxesReverseTransform$ = gridAxesReverseTransformObservable({
109
+ gridAxesTransform$
110
+ })
111
+ const gridContainerPosition$ = gridContainerPositionObservable({
112
+ computedData$: observables.computedData$,
113
+ fullDataFormatter$: secondGridDataFormatter$,
114
+ layout$: observer.layout$
115
+ })
116
+ return {
117
+ ...observables,
118
+ gridAxesTransform$,
119
+ gridAxesReverseTransform$,
120
+ gridContainerPosition$,
121
+ }
122
+ })
123
+ })
124
+ )
125
+
126
+ multiGridPlugin$
127
+ .pipe(
128
+ takeUntil(destroy$)
129
+ )
130
+ .subscribe(data => {
131
+ // 每次重新計算時,清除之前的訂閱
132
+ unsubscribeFnArr.forEach(fn => fn())
133
+
134
+ selection.selectAll(`g.${gridClassName}`)
135
+ .data(data)
136
+ .join('g')
137
+ .attr('class', gridClassName)
138
+ .each((d, i, g) => {
139
+ if (i > 1) {
140
+ return
141
+ }
142
+
143
+ const gridSelection = d3.select(g[i])
144
+
145
+ const isSeriesSeprate$ = d.dataFormatter$.pipe(
146
+ takeUntil(destroy$),
147
+ map(d => d.grid.separateSeries),
148
+ distinctUntilChanged(),
149
+ shareReplay(1)
150
+ )
151
+
152
+ unsubscribeFnArr[i] = createBaseValueAxis(pluginName, {
153
+ selection: gridSelection,
154
+ computedData$: d.computedData$,
155
+ fullParams$: observer.fullParams$.pipe(
156
+ map(fullParams => i === 0 ? fullParams.firstAxis : fullParams.secondAxis)
157
+ ),
158
+ fullDataFormatter$: d.dataFormatter$,
159
+ fullChartParams$: observer.fullChartParams$,
160
+ gridAxesTransform$: d.gridAxesTransform$,
161
+ gridAxesReverseTransform$: d.gridAxesReverseTransform$,
162
+ gridAxesSize$: d.gridAxesSize$,
163
+ gridContainerPosition$: d.gridContainerPosition$,
164
+ isSeriesSeprate$,
165
+ })
166
+ })
167
+ })
168
+
169
+ return () => {
170
+ destroy$.next(undefined)
171
+ unsubscribeFnArr.forEach(fn => fn())
172
+ }
173
+ })
@@ -1,67 +1,67 @@
1
- import type { BaseBarsParams } from '../base/BaseBars'
2
- import type { BaseBarStackParams } from '../base/BaseBarStack'
3
- import type { BaseBarsTriangleParams } from '../base/BaseBarsTriangle'
4
- import type { BaseLinesParams } from '../base/BaseLines'
5
- import type { BaseLineAreasParams } from '../base/BaseLineAreas'
6
- import type { BaseDotsParams } from '../base/BaseDots'
7
- import type { BaseGroupAxisParams } from '../base/BaseGroupAxis'
8
- import type { BaseValueAxisParams } from '../base/BaseValueAxis'
9
- import type {
10
- ChartParams, Layout, ColorType } from '@orbcharts/core'
11
-
12
- export interface MultiGridLegendParams {
13
- position: 'top' | 'bottom' | 'left' | 'right'
14
- justify: 'start' | 'center' | 'end'
15
- padding: number
16
- backgroundFill: ColorType
17
- backgroundStroke: ColorType
18
- gap: number
19
- listRectWidth: number
20
- listRectHeight: number
21
- listRectRadius: number
22
- // 可針對各grid設定,覆蓋全域設定
23
- gridList: Array<{
24
- listRectWidth: number
25
- listRectHeight: number
26
- listRectRadius: number
27
- }>
28
- textColorType: ColorType
29
- }
30
-
31
- export interface MultiGroupAxisParams extends BaseGroupAxisParams {
32
- gridIndexes: number[]
33
- }
34
-
35
- export interface MultiValueAxisParams extends BaseValueAxisParams {
36
- gridIndexes: number[]
37
- }
38
-
39
- export interface MultiBarsParams extends BaseBarsParams {
40
- gridIndexes: number[]
41
- }
42
-
43
- export interface MultiBarStackParams extends BaseBarStackParams {
44
- gridIndexes: number[]
45
- }
46
-
47
- export interface MultiBarsTriangleParams extends BaseBarsTriangleParams {
48
- gridIndexes: number[]
49
- }
50
-
51
- export interface MultiLinesParams extends BaseLinesParams {
52
- gridIndexes: number[]
53
- }
54
-
55
- export interface MultiLineAreasParams extends BaseLineAreasParams {
56
- gridIndexes: number[]
57
- }
58
-
59
- export interface MultiDotsParams extends BaseDotsParams {
60
- gridIndexes: number[]
61
- }
62
-
63
- export interface OverlappingValueAxesParams {
64
- firstAxis: BaseValueAxisParams
65
- secondAxis: BaseValueAxisParams
66
- gridIndexes: [number, number]
67
- }
1
+ import type { BaseBarsParams } from '../base/BaseBars'
2
+ import type { BaseBarStackParams } from '../base/BaseBarStack'
3
+ import type { BaseBarsTriangleParams } from '../base/BaseBarsTriangle'
4
+ import type { BaseLinesParams } from '../base/BaseLines'
5
+ import type { BaseLineAreasParams } from '../base/BaseLineAreas'
6
+ import type { BaseDotsParams } from '../base/BaseDots'
7
+ import type { BaseGroupAxisParams } from '../base/BaseGroupAxis'
8
+ import type { BaseValueAxisParams } from '../base/BaseValueAxis'
9
+ import type {
10
+ ChartParams, Layout, ColorType } from '@orbcharts/core'
11
+
12
+ export interface MultiGridLegendParams {
13
+ position: 'top' | 'bottom' | 'left' | 'right'
14
+ justify: 'start' | 'center' | 'end'
15
+ padding: number
16
+ backgroundFill: ColorType
17
+ backgroundStroke: ColorType
18
+ gap: number
19
+ listRectWidth: number
20
+ listRectHeight: number
21
+ listRectRadius: number
22
+ // 可針對各grid設定,覆蓋全域設定
23
+ gridList: Array<{
24
+ listRectWidth: number
25
+ listRectHeight: number
26
+ listRectRadius: number
27
+ }>
28
+ textColorType: ColorType
29
+ }
30
+
31
+ export interface MultiGroupAxisParams extends BaseGroupAxisParams {
32
+ gridIndexes: number[]
33
+ }
34
+
35
+ export interface MultiValueAxisParams extends BaseValueAxisParams {
36
+ gridIndexes: number[]
37
+ }
38
+
39
+ export interface MultiBarsParams extends BaseBarsParams {
40
+ gridIndexes: number[]
41
+ }
42
+
43
+ export interface MultiBarStackParams extends BaseBarStackParams {
44
+ gridIndexes: number[]
45
+ }
46
+
47
+ export interface MultiBarsTriangleParams extends BaseBarsTriangleParams {
48
+ gridIndexes: number[]
49
+ }
50
+
51
+ export interface MultiLinesParams extends BaseLinesParams {
52
+ gridIndexes: number[]
53
+ }
54
+
55
+ export interface MultiLineAreasParams extends BaseLineAreasParams {
56
+ gridIndexes: number[]
57
+ }
58
+
59
+ export interface MultiDotsParams extends BaseDotsParams {
60
+ gridIndexes: number[]
61
+ }
62
+
63
+ export interface OverlappingValueAxesParams {
64
+ firstAxis: BaseValueAxisParams
65
+ secondAxis: BaseValueAxisParams
66
+ gridIndexes: [number, number]
67
+ }
@@ -1,64 +1,64 @@
1
- import type { ContainerPluginParams, TooltipParams } from './types'
2
- import type { EventBaseSeriesValue, EventBaseGridValue, EventBaseCategoryValue } from '@orbcharts/core'
3
-
4
- export const CONTAINER_PLUGIN_PARAMS: ContainerPluginParams = {
5
- header: {
6
- height: 36,
7
- text: [],
8
- textStyle: []
9
- },
10
- footer: {
11
- height: 0,
12
- text: [],
13
- textStyle: []
14
- }
15
- }
16
-
17
- export const TOOLTIP_PARAMS: TooltipParams = {
18
- backgroundColorType: 'background',
19
- strokeColorType: 'primary',
20
- backgroundOpacity: 0.8,
21
- textColorType: 'primary',
22
- offset: [20, 5],
23
- padding: 10,
24
- textRenderFn: (eventData) => {
25
- if (eventData.highlightTarget === 'datum' && eventData.datum) {
26
- return [`${eventData.datum.label}: ${eventData.datum.value}`]
27
- } else if (eventData.highlightTarget === 'series') {
28
- const label = (eventData as EventBaseSeriesValue<any, any>).seriesLabel
29
- const valueArr = (eventData as EventBaseSeriesValue<any, any>).series
30
- .filter(d => d.visible == true)
31
- .map(d => {
32
- return d.value
33
- })
34
- const value = valueArr.length > 5
35
- ? valueArr.slice(0, 5).join(',') + '...'
36
- : valueArr.join(',')
37
- return [label, value]
38
- } else if (eventData.highlightTarget === 'group') {
39
- const label = (eventData as EventBaseGridValue<any, any>).groupLabel
40
- const valueArr = (eventData as EventBaseGridValue<any, any>).series
41
- .filter(d => d.visible == true)
42
- .map(d => {
43
- return d.value
44
- })
45
- const value = valueArr.length > 5
46
- ? valueArr.slice(0, 5).join(',') + '...'
47
- : valueArr.join(',')
48
- return [label, value]
49
- } else if (eventData.highlightTarget === 'category') {
50
- const label = (eventData as EventBaseCategoryValue<any, any>).categoryLabel
51
- const valueArr = (eventData as EventBaseCategoryValue<any, any>).category
52
- .filter(d => d.visible == true)
53
- .map(d => {
54
- return d.value
55
- })
56
- const value = valueArr.length > 5
57
- ? valueArr.slice(0, 5).join(',') + '...'
58
- : valueArr.join(',')
59
- return [label, value]
60
- }
61
- return []
62
- },
63
- svgRenderFn: null
64
- }
1
+ import type { ContainerPluginParams, TooltipParams } from './types'
2
+ import type { EventBaseSeriesValue, EventBaseGridValue, EventBaseCategoryValue } from '@orbcharts/core'
3
+
4
+ export const CONTAINER_PLUGIN_PARAMS: ContainerPluginParams = {
5
+ header: {
6
+ height: 36,
7
+ text: [],
8
+ textStyle: []
9
+ },
10
+ footer: {
11
+ height: 0,
12
+ text: [],
13
+ textStyle: []
14
+ }
15
+ }
16
+
17
+ export const TOOLTIP_PARAMS: TooltipParams = {
18
+ backgroundColorType: 'background',
19
+ strokeColorType: 'primary',
20
+ backgroundOpacity: 0.8,
21
+ textColorType: 'primary',
22
+ offset: [20, 5],
23
+ padding: 10,
24
+ textRenderFn: (eventData) => {
25
+ if (eventData.highlightTarget === 'datum' && eventData.datum) {
26
+ return [`${eventData.datum.label}: ${eventData.datum.value}`]
27
+ } else if (eventData.highlightTarget === 'series') {
28
+ const label = (eventData as EventBaseSeriesValue<any, any>).seriesLabel
29
+ const valueArr = (eventData as EventBaseSeriesValue<any, any>).series
30
+ .filter(d => d.visible == true)
31
+ .map(d => {
32
+ return d.value
33
+ })
34
+ const value = valueArr.length > 5
35
+ ? valueArr.slice(0, 5).join(',') + '...'
36
+ : valueArr.join(',')
37
+ return [label, value]
38
+ } else if (eventData.highlightTarget === 'group') {
39
+ const label = (eventData as EventBaseGridValue<any, any>).groupLabel
40
+ const valueArr = (eventData as EventBaseGridValue<any, any>).series
41
+ .filter(d => d.visible == true)
42
+ .map(d => {
43
+ return d.value
44
+ })
45
+ const value = valueArr.length > 5
46
+ ? valueArr.slice(0, 5).join(',') + '...'
47
+ : valueArr.join(',')
48
+ return [label, value]
49
+ } else if (eventData.highlightTarget === 'category') {
50
+ const label = (eventData as EventBaseCategoryValue<any, any>).categoryLabel
51
+ const valueArr = (eventData as EventBaseCategoryValue<any, any>).category
52
+ .filter(d => d.visible == true)
53
+ .map(d => {
54
+ return d.value
55
+ })
56
+ const value = valueArr.length > 5
57
+ ? valueArr.slice(0, 5).join(',') + '...'
58
+ : valueArr.join(',')
59
+ return [label, value]
60
+ }
61
+ return []
62
+ },
63
+ svgRenderFn: null
64
+ }
@@ -1,4 +1,4 @@
1
- export * from './defaults'
2
- export * from './types'
3
- export { Container } from './plugins/Container'
1
+ export * from './defaults'
2
+ export * from './types'
3
+ export { Container } from './plugins/Container'
4
4
  export { Tooltip } from './plugins/Tooltip'
@@ -1,11 +1,11 @@
1
- import * as d3 from 'd3'
2
- import {
3
- defineNoneDataPlugin } from '@orbcharts/core'
4
- import { CONTAINER_PLUGIN_PARAMS } from '../defaults'
5
-
6
- export const Container = defineNoneDataPlugin('Container', CONTAINER_PLUGIN_PARAMS)(({ selection }) => {
7
-
8
- return function unsubscribe () {
9
-
10
- }
1
+ import * as d3 from 'd3'
2
+ import {
3
+ defineNoneDataPlugin } from '@orbcharts/core'
4
+ import { CONTAINER_PLUGIN_PARAMS } from '../defaults'
5
+
6
+ export const Container = defineNoneDataPlugin('Container', CONTAINER_PLUGIN_PARAMS)(({ selection }) => {
7
+
8
+ return function unsubscribe () {
9
+
10
+ }
11
11
  })