@orbcharts/plugins-basic 3.0.0-beta.4 → 3.0.0-beta.6

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.
Files changed (192) hide show
  1. package/LICENSE +200 -200
  2. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseBarStack.d.ts +2 -2
  3. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseBars.d.ts +2 -2
  4. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseBarsTriangle.d.ts +2 -2
  5. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseDots.d.ts +2 -2
  6. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseGroupAxis.d.ts +2 -2
  7. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseLegend.d.ts +1 -1
  8. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseLineAreas.d.ts +3 -3
  9. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseLines.d.ts +3 -3
  10. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseValueAxis.d.ts +3 -2
  11. package/dist/{src → orbcharts-plugins-basic/src}/grid/defaults.d.ts +1 -1
  12. package/dist/{src → orbcharts-plugins-basic/src}/grid/gridObservables.d.ts +5 -5
  13. package/dist/orbcharts-plugins-basic/src/index.d.ts +6 -0
  14. package/dist/orbcharts-plugins-basic/src/multiValue/defaults.d.ts +9 -0
  15. package/dist/orbcharts-plugins-basic/src/multiValue/index.d.ts +8 -0
  16. package/dist/orbcharts-plugins-basic/src/multiValue/multiValueObservables.d.ts +33 -0
  17. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/MultiValueLegend.d.ts +1 -0
  18. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/MultiValueTooltip.d.ts +1 -0
  19. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/Scatter.d.ts +3 -0
  20. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/ScatterBubbles.d.ts +3 -0
  21. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYAux.d.ts +3 -0
  22. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYAxes.d.ts +3 -0
  23. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYZoom.d.ts +1 -0
  24. package/dist/{src → orbcharts-plugins-basic/src}/series/seriesObservables.d.ts +3 -3
  25. package/dist/{src → orbcharts-plugins-basic/src}/utils/observables.d.ts +1 -1
  26. package/dist/{src → orbcharts-plugins-basic/src}/utils/orbchartsUtils.d.ts +3 -3
  27. package/dist/orbcharts-plugins-basic.es.js +11809 -10185
  28. package/dist/orbcharts-plugins-basic.umd.js +66 -34
  29. package/dist/src/index.d.ts +1 -5
  30. package/lib/core-types.ts +7 -7
  31. package/lib/core.ts +6 -6
  32. package/lib/plugins-basic-types.ts +6 -6
  33. package/package.json +44 -44
  34. package/src/base/BaseBarStack.ts +780 -780
  35. package/src/base/BaseBars.ts +765 -765
  36. package/src/base/BaseBarsTriangle.ts +674 -674
  37. package/src/base/BaseDots.ts +464 -515
  38. package/src/base/BaseGroupAxis.ts +679 -679
  39. package/src/base/BaseLegend.ts +684 -680
  40. package/src/base/BaseLineAreas.ts +629 -629
  41. package/src/base/BaseLines.ts +706 -706
  42. package/src/base/BaseTooltip.ts +385 -385
  43. package/src/base/BaseValueAxis.ts +583 -580
  44. package/src/base/types.ts +2 -2
  45. package/src/const.ts +30 -30
  46. package/src/grid/defaults.ts +244 -244
  47. package/src/grid/gridObservables.ts +554 -545
  48. package/src/grid/index.ts +16 -16
  49. package/src/grid/plugins/BarStack.ts +64 -64
  50. package/src/grid/plugins/Bars.ts +69 -69
  51. package/src/grid/plugins/BarsPN.ts +66 -66
  52. package/src/grid/plugins/BarsTriangle.ts +73 -73
  53. package/src/grid/plugins/Dots.ts +68 -68
  54. package/src/grid/plugins/GridLegend.ts +107 -107
  55. package/src/grid/plugins/GridTooltip.ts +66 -66
  56. package/src/grid/plugins/GridZoom.ts +218 -218
  57. package/src/grid/plugins/GroupAux.ts +1103 -1098
  58. package/src/grid/plugins/GroupAxis.ts +97 -97
  59. package/src/grid/plugins/LineAreas.ts +65 -65
  60. package/src/grid/plugins/Lines.ts +59 -59
  61. package/src/grid/plugins/ValueAxis.ts +94 -93
  62. package/src/grid/plugins/ValueStackAxis.ts +96 -95
  63. package/src/index.ts +10 -9
  64. package/src/multiGrid/defaults.ts +224 -224
  65. package/src/multiGrid/index.ts +14 -14
  66. package/src/multiGrid/multiGridObservables.ts +49 -49
  67. package/src/multiGrid/plugins/MultiBarStack.ts +106 -106
  68. package/src/multiGrid/plugins/MultiBars.ts +108 -108
  69. package/src/multiGrid/plugins/MultiBarsTriangle.ts +114 -114
  70. package/src/multiGrid/plugins/MultiDots.ts +102 -102
  71. package/src/multiGrid/plugins/MultiGridLegend.ts +159 -159
  72. package/src/multiGrid/plugins/MultiGridTooltip.ts +66 -66
  73. package/src/multiGrid/plugins/MultiGroupAxis.ts +137 -137
  74. package/src/multiGrid/plugins/MultiLineAreas.ts +107 -107
  75. package/src/multiGrid/plugins/MultiLines.ts +101 -101
  76. package/src/multiGrid/plugins/MultiValueAxis.ts +134 -133
  77. package/src/multiGrid/plugins/MultiValueStackAxis.ts +134 -133
  78. package/src/multiGrid/plugins/OverlappingValueAxes.ts +300 -299
  79. package/src/multiGrid/plugins/OverlappingValueStackAxes.ts +299 -298
  80. package/src/multiValue/defaults.ts +163 -0
  81. package/src/multiValue/index.ts +9 -0
  82. package/src/multiValue/multiValueObservables.ts +258 -0
  83. package/src/multiValue/plugins/MultiValueLegend.ts +107 -0
  84. package/src/multiValue/plugins/MultiValueTooltip.ts +66 -0
  85. package/src/multiValue/plugins/Scatter.ts +426 -0
  86. package/src/multiValue/plugins/ScatterBubbles.ts +551 -0
  87. package/src/multiValue/plugins/XYAux.ts +682 -0
  88. package/src/multiValue/plugins/XYAxes.ts +677 -0
  89. package/src/multiValue/plugins/XYZoom.ts +300 -0
  90. package/src/noneData/defaults.ts +102 -102
  91. package/src/noneData/index.ts +3 -3
  92. package/src/noneData/plugins/Container.ts +27 -27
  93. package/src/noneData/plugins/Tooltip.ts +373 -373
  94. package/src/series/defaults.ts +206 -206
  95. package/src/series/index.ts +9 -9
  96. package/src/series/plugins/Bubbles.ts +603 -603
  97. package/src/series/plugins/Pie.ts +623 -623
  98. package/src/series/plugins/PieEventTexts.ts +283 -283
  99. package/src/series/plugins/PieLabels.ts +640 -640
  100. package/src/series/plugins/Rose.ts +516 -516
  101. package/src/series/plugins/RoseLabels.ts +600 -600
  102. package/src/series/plugins/SeriesLegend.ts +107 -107
  103. package/src/series/plugins/SeriesTooltip.ts +66 -66
  104. package/src/series/seriesObservables.ts +145 -145
  105. package/src/series/seriesUtils.ts +51 -51
  106. package/src/tree/defaults.ts +78 -78
  107. package/src/tree/index.ts +4 -4
  108. package/src/tree/plugins/TreeLegend.ts +100 -107
  109. package/src/tree/plugins/TreeMap.ts +333 -333
  110. package/src/tree/plugins/TreeTooltip.ts +66 -66
  111. package/src/utils/commonUtils.ts +21 -21
  112. package/src/utils/d3Graphics.ts +174 -174
  113. package/src/utils/d3Utils.ts +74 -73
  114. package/src/utils/observables.ts +14 -14
  115. package/src/utils/orbchartsUtils.ts +101 -100
  116. package/tsconfig.base.json +13 -13
  117. package/tsconfig.json +2 -2
  118. package/vite.config.js +22 -22
  119. package/dist/src/base/BaseGroupArea.d.ts +0 -0
  120. package/dist/src/multiValue/plugins/Scatter.d.ts +0 -0
  121. package/dist/src/multiValue/plugins/ScatterAxes.d.ts +0 -0
  122. package/dist/src/relationship/index.d.ts +0 -0
  123. package/src/base/BaseGroupArea.ts +0 -0
  124. package/src/multiValue/plugins/ScatterAxes.ts +0 -0
  125. /package/dist/{lib → orbcharts-plugins-basic/lib}/core-types.d.ts +0 -0
  126. /package/dist/{lib → orbcharts-plugins-basic/lib}/core.d.ts +0 -0
  127. /package/dist/{lib → orbcharts-plugins-basic/lib}/plugins-basic-types.d.ts +0 -0
  128. /package/dist/{src → orbcharts-plugins-basic/src}/base/BaseTooltip.d.ts +0 -0
  129. /package/dist/{src → orbcharts-plugins-basic/src}/base/types.d.ts +0 -0
  130. /package/dist/{src → orbcharts-plugins-basic/src}/const.d.ts +0 -0
  131. /package/dist/{src → orbcharts-plugins-basic/src}/grid/index.d.ts +0 -0
  132. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/BarStack.d.ts +0 -0
  133. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Bars.d.ts +0 -0
  134. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/BarsPN.d.ts +0 -0
  135. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/BarsTriangle.d.ts +0 -0
  136. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Dots.d.ts +0 -0
  137. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GridLegend.d.ts +0 -0
  138. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GridTooltip.d.ts +0 -0
  139. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GridZoom.d.ts +0 -0
  140. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GroupAux.d.ts +0 -0
  141. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GroupAxis.d.ts +0 -0
  142. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/LineAreas.d.ts +0 -0
  143. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Lines.d.ts +0 -0
  144. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/ValueAxis.d.ts +0 -0
  145. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/ValueStackAxis.d.ts +0 -0
  146. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/defaults.d.ts +0 -0
  147. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/index.d.ts +0 -0
  148. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/multiGridObservables.d.ts +0 -0
  149. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiBarStack.d.ts +0 -0
  150. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiBars.d.ts +0 -0
  151. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiBarsTriangle.d.ts +0 -0
  152. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiDots.d.ts +0 -0
  153. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiGridLegend.d.ts +0 -0
  154. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiGridTooltip.d.ts +0 -0
  155. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiGroupAxis.d.ts +0 -0
  156. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiLineAreas.d.ts +0 -0
  157. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiLines.d.ts +0 -0
  158. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiValueAxis.d.ts +0 -0
  159. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiValueStackAxis.d.ts +0 -0
  160. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/OverlappingValueAxes.d.ts +0 -0
  161. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/OverlappingValueStackAxes.d.ts +0 -0
  162. /package/dist/{src/grid → orbcharts-plugins-basic/src/multiValue}/plugins/Ranking.d.ts +0 -0
  163. /package/dist/{src/grid → orbcharts-plugins-basic/src/multiValue}/plugins/RankingAxis.d.ts +0 -0
  164. /package/dist/{src → orbcharts-plugins-basic/src}/noneData/defaults.d.ts +0 -0
  165. /package/dist/{src → orbcharts-plugins-basic/src}/noneData/index.d.ts +0 -0
  166. /package/dist/{src → orbcharts-plugins-basic/src}/noneData/plugins/Container.d.ts +0 -0
  167. /package/dist/{src → orbcharts-plugins-basic/src}/noneData/plugins/Tooltip.d.ts +0 -0
  168. /package/dist/{src/multiValue → orbcharts-plugins-basic/src/relationship}/index.d.ts +0 -0
  169. /package/dist/{src → orbcharts-plugins-basic/src}/relationship/plugins/Relationship.d.ts +0 -0
  170. /package/dist/{src → orbcharts-plugins-basic/src}/series/defaults.d.ts +0 -0
  171. /package/dist/{src → orbcharts-plugins-basic/src}/series/index.d.ts +0 -0
  172. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Bubbles.d.ts +0 -0
  173. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Pie.d.ts +0 -0
  174. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/PieEventTexts.d.ts +0 -0
  175. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/PieLabels.d.ts +0 -0
  176. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Rose.d.ts +0 -0
  177. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/RoseLabels.d.ts +0 -0
  178. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/SeriesLegend.d.ts +0 -0
  179. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/SeriesTooltip.d.ts +0 -0
  180. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Waffle.d.ts +0 -0
  181. /package/dist/{src → orbcharts-plugins-basic/src}/series/seriesUtils.d.ts +0 -0
  182. /package/dist/{src → orbcharts-plugins-basic/src}/tree/defaults.d.ts +0 -0
  183. /package/dist/{src → orbcharts-plugins-basic/src}/tree/index.d.ts +0 -0
  184. /package/dist/{src → orbcharts-plugins-basic/src}/tree/plugins/TreeLegend.d.ts +0 -0
  185. /package/dist/{src → orbcharts-plugins-basic/src}/tree/plugins/TreeMap.d.ts +0 -0
  186. /package/dist/{src → orbcharts-plugins-basic/src}/tree/plugins/TreeTooltip.d.ts +0 -0
  187. /package/dist/{src → orbcharts-plugins-basic/src}/utils/commonUtils.d.ts +0 -0
  188. /package/dist/{src → orbcharts-plugins-basic/src}/utils/d3Graphics.d.ts +0 -0
  189. /package/dist/{src → orbcharts-plugins-basic/src}/utils/d3Utils.d.ts +0 -0
  190. /package/dist/{vite.config.d.ts → orbcharts-plugins-basic/vite.config.d.ts} +0 -0
  191. /package/src/{grid → multiValue}/plugins/Ranking.ts +0 -0
  192. /package/src/{grid → multiValue}/plugins/RankingAxis.ts +0 -0
@@ -1,516 +1,465 @@
1
- import * as d3 from 'd3'
2
- import {
3
- combineLatest,
4
- map,
5
- switchMap,
6
- takeUntil,
7
- distinctUntilChanged,
8
- Observable,
9
- Subject } from 'rxjs'
10
- import type { BasePluginFn } from './types'
11
- import type {
12
- ComputedDatumGrid,
13
- ComputedDataGrid,
14
- ComputedLayoutDataGrid,
15
- EventGrid,
16
- ChartParams,
17
- GridContainerPosition,
18
- Layout,
19
- TransformData,
20
- ColorType
21
- } from '../../lib/core-types'
22
- import type { BaseDotsParams } from '../../lib/plugins-basic-types'
23
- import { getDatumColor, getClassName, getUniID } from '../utils/orbchartsUtils'
24
- import { gridSelectionsObservable } from '../grid/gridObservables'
25
-
26
- // export interface BaseDotsParams {
27
- // radius: number
28
- // fillColorType: ColorType
29
- // strokeColorType: ColorType
30
- // strokeWidth: number
31
- // // strokeWidthWhileHighlight: number
32
- // onlyShowHighlighted: boolean
33
- // }
34
-
35
- interface BaseDotsContext {
36
- selection: d3.Selection<any, unknown, any, unknown>
37
- computedData$: Observable<ComputedDataGrid>
38
- computedLayoutData$: Observable<ComputedLayoutDataGrid>
39
- visibleComputedData$: Observable<ComputedDatumGrid[][]>
40
- visibleComputedLayoutData$: Observable<ComputedLayoutDataGrid>
41
- seriesLabels$: Observable<string[]>
42
- SeriesDataMap$: Observable<Map<string, ComputedDatumGrid[]>>
43
- GroupDataMap$: Observable<Map<string, ComputedDatumGrid[]>>
44
- fullParams$: Observable<BaseDotsParams>
45
- fullChartParams$: Observable<ChartParams>
46
- gridAxesTransform$: Observable<TransformData>
47
- gridGraphicTransform$: Observable<TransformData>
48
- gridGraphicReverseScale$: Observable<[number, number][]>
49
- gridAxesSize$: Observable<{
50
- width: number;
51
- height: number;
52
- }>
53
- gridHighlight$: Observable<ComputedDatumGrid[]>
54
- gridContainerPosition$: Observable<GridContainerPosition[]>
55
- event$: Subject<EventGrid>
56
- }
57
-
58
-
59
- type ClipPathDatum = {
60
- id: string;
61
- // x: number;
62
- // y: number;
63
- width: number;
64
- height: number;
65
- }
66
-
67
- // const pluginName = 'Dots'
68
- // const circleGClassName = getClassName(pluginName, 'circleG')
69
- // const circleClassName = getClassName(pluginName, 'circle')
70
-
71
- function renderDots ({ graphicGSelection, circleGClassName, circleClassName, visibleComputedLayoutData, fullParams, fullChartParams, graphicReverseScale }: {
72
- graphicGSelection: d3.Selection<SVGGElement, any, any, any>
73
- circleGClassName: string
74
- circleClassName: string
75
- visibleComputedLayoutData: ComputedLayoutDataGrid
76
- fullParams: BaseDotsParams
77
- fullChartParams: ChartParams
78
- graphicReverseScale: [number, number][]
79
- }) {
80
- const createEnterDuration = (enter: d3.Selection<d3.EnterElement, ComputedDatumGrid, SVGGElement, any>) => {
81
- const enterSize = enter.size()
82
- const eachDuration = fullChartParams.transitionDuration / enterSize
83
- return eachDuration
84
- }
85
- // enterDuration
86
- let enterDuration = 0
87
-
88
- graphicGSelection
89
- .each((seriesData, seriesIndex, g) => {
90
- d3.select(g[seriesIndex])
91
- .selectAll<SVGGElement, ComputedDatumGrid>('g')
92
- .data(visibleComputedLayoutData[seriesIndex], d => d.id)
93
- .join(
94
- enter => {
95
- // enterDuration
96
- enterDuration = createEnterDuration(enter)
97
-
98
- return enter
99
- .append('g')
100
- .classed(circleGClassName, true)
101
- },
102
- update => update,
103
- exit => exit.remove()
104
- )
105
- .attr('transform', d => `translate(${d.axisX}, ${d.axisY})`)
106
- .each((d, i, g) => {
107
- const circle = d3.select(g[i])
108
- .selectAll('circle')
109
- .data([d])
110
- .join(
111
- enter => {
112
- return enter
113
- .append('circle')
114
- .style('cursor', 'pointer')
115
- .style('vector-effect', 'non-scaling-stroke')
116
- .classed(circleClassName, true)
117
- .attr('opacity', 0)
118
- .transition()
119
- .delay((_d, _i) => {
120
- return i * enterDuration
121
- })
122
- .attr('opacity', 1)
123
- },
124
- update => {
125
- return update
126
- .transition()
127
- .duration(50)
128
- // .attr('cx', d => d.axisX)
129
- // .attr('cy', d => d.axisY)
130
- .attr('opacity', 1)
131
- },
132
- exit => exit.remove()
133
- )
134
- .attr('r', fullParams.radius)
135
- .attr('fill', (d, i) => getDatumColor({ datum: d, colorType: fullParams.fillColorType, fullChartParams }))
136
- .attr('stroke', (d, i) => getDatumColor({ datum: d, colorType: fullParams.strokeColorType, fullChartParams }))
137
- .attr('stroke-width', fullParams.strokeWidth)
138
- .attr('transform', `scale(${graphicReverseScale[seriesIndex][0] ?? 1}, ${graphicReverseScale[seriesIndex][1] ?? 1})`)
139
- })
140
- })
141
-
142
- // const dots = graphicGSelection
143
- // .selectAll<SVGGElement, ComputedDatumGrid>('g')
144
- // .data(data, d => d.id)
145
- // .join(
146
- // enter => {
147
- // // enterDuration
148
- // enterDuration = createEnterDuration(enter)
149
-
150
- // return enter
151
- // .append('g')
152
- // .classed(circleGClassName, true)
153
- // },
154
- // update => update,
155
- // exit => exit.remove()
156
- // )
157
- // .attr('transform', d => `translate(${d.axisX}, ${d.axisY})`)
158
- // .each((d, i, g) => {
159
- // const circle = d3.select(g[i])
160
- // .selectAll('circle')
161
- // .data([d])
162
- // .join(
163
- // enter => {
164
- // return enter
165
- // .append('circle')
166
- // .style('cursor', 'pointer')
167
- // .style('vector-effect', 'non-scaling-stroke')
168
- // .classed(circleClassName, true)
169
- // .attr('opacity', 0)
170
- // .transition()
171
- // .delay((_d, _i) => {
172
- // return i * enterDuration
173
- // })
174
- // .attr('opacity', 1)
175
- // },
176
- // update => {
177
- // return update
178
- // .transition()
179
- // .duration(50)
180
- // // .attr('cx', d => d.axisX)
181
- // // .attr('cy', d => d.axisY)
182
- // .attr('opacity', 1)
183
- // },
184
- // exit => exit.remove()
185
- // )
186
- // .attr('r', fullParams.radius)
187
- // .attr('fill', (d, i) => getDatumColor({ datum: d, colorType: fullParams.fillColorType, fullChartParams }))
188
- // .attr('stroke', (d, i) => getDatumColor({ datum: d, colorType: fullParams.strokeColorType, fullChartParams }))
189
- // .attr('stroke-width', fullParams.strokeWidth)
190
- // .attr('transform', `scale(${graphicReverseScale[0]}, ${graphicReverseScale[1]})`)
191
- // })
192
-
193
- const graphicCircleSelection: d3.Selection<SVGRectElement, ComputedDatumGrid, SVGGElement, unknown> = graphicGSelection.selectAll(`circle.${circleClassName}`)
194
-
195
- return graphicCircleSelection
196
- }
197
-
198
-
199
- function highlightDots ({ selection, ids, onlyShowHighlighted, fullChartParams }: {
200
- selection: d3.Selection<SVGGElement, ComputedDatumGrid, any, any>
201
- ids: string[]
202
- onlyShowHighlighted: boolean
203
- // fullParams: BaseDotsParams
204
- fullChartParams: ChartParams
205
- }) {
206
- selection.interrupt('highlight')
207
- if (!ids.length) {
208
- // remove highlight
209
- selection
210
- .transition('highlight')
211
- .duration(200)
212
- .style('opacity', onlyShowHighlighted === true ? 0 : 1)
213
- // selection
214
- // .attr('stroke-width', fullParams.strokeWidth)
215
-
216
- return
217
- }
218
-
219
- selection
220
- .each((d, i, n) => {
221
- if (ids.includes(d.id)) {
222
- const dot = d3.select(n[i])
223
- dot
224
- .style('opacity', 1)
225
- .transition('highlight')
226
- .duration(200)
227
- // dot
228
- // .attr('stroke-width', fullParams.strokeWidthWhileHighlight)
229
- } else {
230
- const dot = d3.select(n[i])
231
- dot
232
- .style('opacity', onlyShowHighlighted === true ? 0 : fullChartParams.styles.unhighlightedOpacity)
233
- .transition('highlight')
234
- .duration(200)
235
- // dot
236
- // .attr('stroke-width', fullParams.strokeWidth)
237
-
238
- }
239
- })
240
- }
241
-
242
- function renderClipPath ({ defsSelection, clipPathData }: {
243
- defsSelection: d3.Selection<SVGDefsElement, any, any, any>
244
- clipPathData: ClipPathDatum[]
245
- }) {
246
- const clipPath = defsSelection
247
- .selectAll<SVGClipPathElement, Layout>('clipPath')
248
- .data(clipPathData)
249
- .join(
250
- enter => {
251
- return enter
252
- .append('clipPath')
253
- },
254
- update => update,
255
- exit => exit.remove()
256
- )
257
- .attr('id', d => d.id)
258
- .each((d, i, g) => {
259
- const rect = d3.select(g[i])
260
- .selectAll<SVGRectElement, typeof d>('rect')
261
- .data([d])
262
- .join('rect')
263
- .attr('x', 0)
264
- .attr('y', 0)
265
- .attr('width', _d => _d.width)
266
- .attr('height', _d => _d.height)
267
- })
268
-
269
- }
270
-
271
-
272
-
273
- export const createBaseDots: BasePluginFn<BaseDotsContext> = (pluginName: string, {
274
- selection,
275
- computedData$,
276
- computedLayoutData$,
277
- visibleComputedData$,
278
- visibleComputedLayoutData$,
279
- seriesLabels$,
280
- SeriesDataMap$,
281
- GroupDataMap$,
282
- fullParams$,
283
- fullChartParams$,
284
- gridAxesTransform$,
285
- gridGraphicTransform$,
286
- gridGraphicReverseScale$,
287
- gridAxesSize$,
288
- gridHighlight$,
289
- gridContainerPosition$,
290
- event$
291
- }) => {
292
-
293
- const destroy$ = new Subject()
294
-
295
- const clipPathID = getUniID(pluginName, 'clipPath-box')
296
- const circleGClassName = getClassName(pluginName, 'circleG')
297
- const circleClassName = getClassName(pluginName, 'circle')
298
-
299
- // const axisSelection: d3.Selection<SVGGElement, any, any, any> = selection
300
- // .append('g')
301
- // .attr('clip-path', `url(#${clipPathID})`)
302
- // const defsSelection: d3.Selection<SVGDefsElement, any, any, any> = axisSelection.append('defs')
303
- // const dataAreaSelection: d3.Selection<SVGGElement, any, any, any> = axisSelection.append('g')
304
- // const graphicSelection$: Subject<d3.Selection<SVGGElement, ComputedDatumGrid, any, any>> = new Subject()
305
-
306
- const {
307
- seriesSelection$,
308
- axesSelection$,
309
- defsSelection$,
310
- graphicGSelection$
311
- } = gridSelectionsObservable({
312
- selection,
313
- pluginName,
314
- clipPathID,
315
- seriesLabels$,
316
- gridContainerPosition$,
317
- gridAxesTransform$,
318
- gridGraphicTransform$
319
- })
320
-
321
- const graphicReverseScale$: Observable<[number, number][]> = combineLatest({
322
- // gridGraphicTransform: gridGraphicTransform$,
323
- // gridContainerPosition: gridContainerPosition$,
324
- // gridAxesTransform: gridAxesTransform$
325
- computedData: computedData$,
326
- gridGraphicReverseScale: gridGraphicReverseScale$
327
- }).pipe(
328
- takeUntil(destroy$),
329
- switchMap(async data => data),
330
- map(data => {
331
- return data.computedData.map((series, seriesIndex) => {
332
- return data.gridGraphicReverseScale[seriesIndex]
333
- })
334
- })
335
- )
336
-
337
- const clipPathSubscription = combineLatest({
338
- defsSelection: defsSelection$,
339
- gridAxesSize: gridAxesSize$,
340
- }).pipe(
341
- takeUntil(destroy$),
342
- switchMap(async (d) => d),
343
- ).subscribe(data => {
344
- // 外層的遮罩
345
- const clipPathData = [{
346
- id: clipPathID,
347
- width: data.gridAxesSize.width,
348
- height: data.gridAxesSize.height
349
- }]
350
- renderClipPath({
351
- defsSelection: data.defsSelection,
352
- clipPathData,
353
- })
354
- })
355
-
356
- const highlightTarget$ = fullChartParams$.pipe(
357
- takeUntil(destroy$),
358
- map(d => d.highlightTarget),
359
- distinctUntilChanged()
360
- )
361
-
362
- const graphicSelection$ = combineLatest({
363
- graphicGSelection: graphicGSelection$,
364
- visibleComputedLayoutData: visibleComputedLayoutData$,
365
- graphicReverseScale: graphicReverseScale$,
366
- fullChartParams: fullChartParams$,
367
- fullParams: fullParams$,
368
- }).pipe(
369
- takeUntil(destroy$),
370
- switchMap(async (d) => d),
371
- map(data => {
372
- return renderDots({
373
- graphicGSelection: data.graphicGSelection,
374
- circleGClassName,
375
- circleClassName,
376
- visibleComputedLayoutData: data.visibleComputedLayoutData,
377
- fullParams: data.fullParams,
378
- fullChartParams: data.fullChartParams,
379
- graphicReverseScale: data.graphicReverseScale
380
- })
381
- })
382
- )
383
-
384
- combineLatest({
385
- graphicSelection: graphicSelection$,
386
- computedData: computedData$,
387
- SeriesDataMap: SeriesDataMap$,
388
- GroupDataMap: GroupDataMap$,
389
- highlightTarget: highlightTarget$
390
- }).pipe(
391
- takeUntil(destroy$),
392
- switchMap(async (d) => d),
393
- ).subscribe(data => {
394
-
395
- data.graphicSelection
396
- .on('mouseover', (event, datum) => {
397
- // event.stopPropagation()
398
-
399
- event$.next({
400
- type: 'grid',
401
- eventName: 'mouseover',
402
- pluginName,
403
- highlightTarget: data.highlightTarget,
404
- datum,
405
- gridIndex: datum.gridIndex,
406
- series: data.SeriesDataMap.get(datum.seriesLabel)!,
407
- seriesIndex: datum.seriesIndex,
408
- seriesLabel: datum.seriesLabel,
409
- groups: data.GroupDataMap.get(datum.groupLabel)!,
410
- groupIndex: datum.groupIndex,
411
- groupLabel: datum.groupLabel,
412
- event,
413
- data: data.computedData
414
- })
415
- })
416
- .on('mousemove', (event, datum) => {
417
- // event.stopPropagation()
418
-
419
- event$.next({
420
- type: 'grid',
421
- eventName: 'mousemove',
422
- pluginName,
423
- highlightTarget: data.highlightTarget,
424
- data: data.computedData,
425
- datum,
426
- gridIndex: datum.gridIndex,
427
- series: data.SeriesDataMap.get(datum.seriesLabel)!,
428
- seriesIndex: datum.seriesIndex,
429
- seriesLabel: datum.seriesLabel,
430
- groups: data.GroupDataMap.get(datum.groupLabel)!,
431
- groupIndex: datum.groupIndex,
432
- groupLabel: datum.groupLabel,
433
- event
434
- })
435
- })
436
- .on('mouseout', (event, datum) => {
437
- // event.stopPropagation()
438
-
439
- event$.next({
440
- type: 'grid',
441
- eventName: 'mouseout',
442
- pluginName,
443
- highlightTarget: data.highlightTarget,
444
- datum,
445
- gridIndex: datum.gridIndex,
446
- series: data.SeriesDataMap.get(datum.seriesLabel)!,
447
- seriesIndex: datum.seriesIndex,
448
- seriesLabel: datum.seriesLabel,
449
- groups: data.GroupDataMap.get(datum.groupLabel)!,
450
- groupIndex: datum.groupIndex,
451
- groupLabel: datum.groupLabel,
452
- event,
453
- data: data.computedData
454
- })
455
- })
456
- .on('click', (event, datum) => {
457
- // event.stopPropagation()
458
-
459
- event$.next({
460
- type: 'grid',
461
- eventName: 'click',
462
- pluginName,
463
- highlightTarget: data.highlightTarget,
464
- datum,
465
- gridIndex: datum.gridIndex,
466
- series: data.SeriesDataMap.get(datum.seriesLabel)!,
467
- seriesIndex: datum.seriesIndex,
468
- seriesLabel: datum.seriesLabel,
469
- groups: data.GroupDataMap.get(datum.groupLabel)!,
470
- groupIndex: datum.groupIndex,
471
- groupLabel: datum.groupLabel,
472
- event,
473
- data: data.computedData
474
- })
475
- })
476
-
477
- })
478
-
479
- // const datumList$ = computedData$.pipe(
480
- // takeUntil(destroy$),
481
- // map(d => d.flat())
482
- // )
483
- // const highlight$ = highlightObservable({ datumList$, fullChartParams$, event$: store.event$ })
484
- // const highlightSubscription = gridHighlight$.subscribe()
485
- const onlyShowHighlighted$ = fullParams$.pipe(
486
- takeUntil(destroy$),
487
- map(d => d.onlyShowHighlighted),
488
- distinctUntilChanged()
489
- )
490
-
491
- combineLatest({
492
- graphicSelection: graphicSelection$,
493
- highlight: gridHighlight$.pipe(
494
- map(data => data.map(d => d.id))
495
- ),
496
- onlyShowHighlighted: onlyShowHighlighted$,
497
- // fullParams: fullParams$,
498
- fullChartParams: fullChartParams$
499
- }).pipe(
500
- takeUntil(destroy$),
501
- switchMap(async d => d)
502
- ).subscribe(data => {
503
- highlightDots({
504
- selection: data.graphicSelection,
505
- ids: data.highlight,
506
- onlyShowHighlighted: data.onlyShowHighlighted,
507
- // fullParams: data.fullParams,
508
- fullChartParams: data.fullChartParams
509
- })
510
- })
511
-
512
- return () => {
513
- destroy$.next(undefined)
514
- // highlightSubscription.unsubscribe()
515
- }
1
+ import * as d3 from 'd3'
2
+ import {
3
+ combineLatest,
4
+ map,
5
+ switchMap,
6
+ takeUntil,
7
+ distinctUntilChanged,
8
+ Observable,
9
+ Subject } from 'rxjs'
10
+ import type { BasePluginFn } from './types'
11
+ import type {
12
+ ComputedDatumGrid,
13
+ ComputedDataGrid,
14
+ ComputedLayoutDataGrid,
15
+ EventGrid,
16
+ ChartParams,
17
+ ContainerPositionScaled,
18
+ Layout,
19
+ TransformData,
20
+ ColorType
21
+ } from '../../lib/core-types'
22
+ import type { BaseDotsParams } from '../../lib/plugins-basic-types'
23
+ import { getDatumColor, getClassName, getUniID } from '../utils/orbchartsUtils'
24
+ import { gridSelectionsObservable } from '../grid/gridObservables'
25
+
26
+ // export interface BaseDotsParams {
27
+ // radius: number
28
+ // fillColorType: ColorType
29
+ // strokeColorType: ColorType
30
+ // strokeWidth: number
31
+ // // strokeWidthWhileHighlight: number
32
+ // onlyShowHighlighted: boolean
33
+ // }
34
+
35
+ interface BaseDotsContext {
36
+ selection: d3.Selection<any, unknown, any, unknown>
37
+ computedData$: Observable<ComputedDataGrid>
38
+ computedLayoutData$: Observable<ComputedLayoutDataGrid>
39
+ visibleComputedData$: Observable<ComputedDatumGrid[][]>
40
+ visibleComputedLayoutData$: Observable<ComputedLayoutDataGrid>
41
+ seriesLabels$: Observable<string[]>
42
+ SeriesDataMap$: Observable<Map<string, ComputedDatumGrid[]>>
43
+ GroupDataMap$: Observable<Map<string, ComputedDatumGrid[]>>
44
+ fullParams$: Observable<BaseDotsParams>
45
+ fullChartParams$: Observable<ChartParams>
46
+ gridAxesTransform$: Observable<TransformData>
47
+ gridGraphicTransform$: Observable<TransformData>
48
+ gridGraphicReverseScale$: Observable<[number, number][]>
49
+ gridAxesSize$: Observable<{
50
+ width: number;
51
+ height: number;
52
+ }>
53
+ gridHighlight$: Observable<ComputedDatumGrid[]>
54
+ gridContainerPosition$: Observable<ContainerPositionScaled[]>
55
+ event$: Subject<EventGrid>
56
+ }
57
+
58
+
59
+ type ClipPathDatum = {
60
+ id: string;
61
+ // x: number;
62
+ // y: number;
63
+ width: number;
64
+ height: number;
65
+ }
66
+
67
+ // const pluginName = 'Dots'
68
+ // const circleGClassName = getClassName(pluginName, 'circleG')
69
+ // const circleClassName = getClassName(pluginName, 'circle')
70
+
71
+ function renderDots ({ graphicGSelection, circleGClassName, circleClassName, visibleComputedLayoutData, fullParams, fullChartParams, graphicReverseScale }: {
72
+ graphicGSelection: d3.Selection<SVGGElement, any, any, any>
73
+ circleGClassName: string
74
+ circleClassName: string
75
+ visibleComputedLayoutData: ComputedLayoutDataGrid
76
+ fullParams: BaseDotsParams
77
+ fullChartParams: ChartParams
78
+ graphicReverseScale: [number, number][]
79
+ }) {
80
+ const createEnterDuration = (enter: d3.Selection<d3.EnterElement, ComputedDatumGrid, SVGGElement, any>) => {
81
+ const enterSize = enter.size()
82
+ const eachDuration = fullChartParams.transitionDuration / enterSize
83
+ return eachDuration
84
+ }
85
+ // enterDuration
86
+ let enterDuration = 0
87
+
88
+ graphicGSelection
89
+ .each((seriesData, seriesIndex, g) => {
90
+ d3.select(g[seriesIndex])
91
+ .selectAll<SVGGElement, ComputedDatumGrid>('g')
92
+ .data(visibleComputedLayoutData[seriesIndex], d => d.id)
93
+ .join(
94
+ enter => {
95
+ // enterDuration
96
+ enterDuration = createEnterDuration(enter)
97
+
98
+ return enter
99
+ .append('g')
100
+ .classed(circleGClassName, true)
101
+ },
102
+ update => update,
103
+ exit => exit.remove()
104
+ )
105
+ .attr('transform', d => `translate(${d.axisX}, ${d.axisY})`)
106
+ .each((d, i, g) => {
107
+ const circle = d3.select(g[i])
108
+ .selectAll('circle')
109
+ .data([d])
110
+ .join(
111
+ enter => {
112
+ return enter
113
+ .append('circle')
114
+ .style('cursor', 'pointer')
115
+ .style('vector-effect', 'non-scaling-stroke')
116
+ .classed(circleClassName, true)
117
+ .attr('opacity', 0)
118
+ .transition()
119
+ .delay((_d, _i) => {
120
+ return i * enterDuration
121
+ })
122
+ .attr('opacity', 1)
123
+ },
124
+ update => {
125
+ return update
126
+ .transition()
127
+ .duration(50)
128
+ // .attr('cx', d => d.axisX)
129
+ // .attr('cy', d => d.axisY)
130
+ .attr('opacity', 1)
131
+ },
132
+ exit => exit.remove()
133
+ )
134
+ .attr('r', fullParams.radius)
135
+ .attr('fill', (d, i) => getDatumColor({ datum: d, colorType: fullParams.fillColorType, fullChartParams }))
136
+ .attr('stroke', (d, i) => getDatumColor({ datum: d, colorType: fullParams.strokeColorType, fullChartParams }))
137
+ .attr('stroke-width', fullParams.strokeWidth)
138
+ .attr('transform', `scale(${graphicReverseScale[seriesIndex][0] ?? 1}, ${graphicReverseScale[seriesIndex][1] ?? 1})`)
139
+ })
140
+ })
141
+
142
+ const graphicCircleSelection: d3.Selection<SVGRectElement, ComputedDatumGrid, SVGGElement, unknown> = graphicGSelection.selectAll(`circle.${circleClassName}`)
143
+
144
+ return graphicCircleSelection
145
+ }
146
+
147
+
148
+ function highlightDots ({ selection, ids, onlyShowHighlighted, fullChartParams }: {
149
+ selection: d3.Selection<SVGGElement, ComputedDatumGrid, any, any>
150
+ ids: string[]
151
+ onlyShowHighlighted: boolean
152
+ // fullParams: BaseDotsParams
153
+ fullChartParams: ChartParams
154
+ }) {
155
+ selection.interrupt('highlight')
156
+ if (!ids.length) {
157
+ // remove highlight
158
+ selection
159
+ .transition('highlight')
160
+ .duration(200)
161
+ .style('opacity', onlyShowHighlighted === true ? 0 : 1)
162
+ // selection
163
+ // .attr('stroke-width', fullParams.strokeWidth)
164
+
165
+ return
166
+ }
167
+
168
+ selection
169
+ .each((d, i, n) => {
170
+ if (ids.includes(d.id)) {
171
+ const dot = d3.select(n[i])
172
+ dot
173
+ .style('opacity', 1)
174
+ .transition('highlight')
175
+ .duration(200)
176
+ // dot
177
+ // .attr('stroke-width', fullParams.strokeWidthWhileHighlight)
178
+ } else {
179
+ const dot = d3.select(n[i])
180
+ dot
181
+ .style('opacity', onlyShowHighlighted === true ? 0 : fullChartParams.styles.unhighlightedOpacity)
182
+ .transition('highlight')
183
+ .duration(200)
184
+ // dot
185
+ // .attr('stroke-width', fullParams.strokeWidth)
186
+
187
+ }
188
+ })
189
+ }
190
+
191
+ function renderClipPath ({ defsSelection, clipPathData }: {
192
+ defsSelection: d3.Selection<SVGDefsElement, any, any, any>
193
+ clipPathData: ClipPathDatum[]
194
+ }) {
195
+ const clipPath = defsSelection
196
+ .selectAll<SVGClipPathElement, Layout>('clipPath')
197
+ .data(clipPathData)
198
+ .join(
199
+ enter => {
200
+ return enter
201
+ .append('clipPath')
202
+ },
203
+ update => update,
204
+ exit => exit.remove()
205
+ )
206
+ .attr('id', d => d.id)
207
+ .each((d, i, g) => {
208
+ const rect = d3.select(g[i])
209
+ .selectAll<SVGRectElement, typeof d>('rect')
210
+ .data([d])
211
+ .join('rect')
212
+ .attr('x', 0)
213
+ .attr('y', 0)
214
+ .attr('width', _d => _d.width)
215
+ .attr('height', _d => _d.height)
216
+ })
217
+
218
+ }
219
+
220
+
221
+
222
+ export const createBaseDots: BasePluginFn<BaseDotsContext> = (pluginName: string, {
223
+ selection,
224
+ computedData$,
225
+ computedLayoutData$,
226
+ visibleComputedData$,
227
+ visibleComputedLayoutData$,
228
+ seriesLabels$,
229
+ SeriesDataMap$,
230
+ GroupDataMap$,
231
+ fullParams$,
232
+ fullChartParams$,
233
+ gridAxesTransform$,
234
+ gridGraphicTransform$,
235
+ gridGraphicReverseScale$,
236
+ gridAxesSize$,
237
+ gridHighlight$,
238
+ gridContainerPosition$,
239
+ event$
240
+ }) => {
241
+
242
+ const destroy$ = new Subject()
243
+
244
+ const clipPathID = getUniID(pluginName, 'clipPath-box')
245
+ const circleGClassName = getClassName(pluginName, 'circleG')
246
+ const circleClassName = getClassName(pluginName, 'circle')
247
+
248
+ // const axisSelection: d3.Selection<SVGGElement, any, any, any> = selection
249
+ // .append('g')
250
+ // .attr('clip-path', `url(#${clipPathID})`)
251
+ // const defsSelection: d3.Selection<SVGDefsElement, any, any, any> = axisSelection.append('defs')
252
+ // const dataAreaSelection: d3.Selection<SVGGElement, any, any, any> = axisSelection.append('g')
253
+ // const graphicSelection$: Subject<d3.Selection<SVGGElement, ComputedDatumGrid, any, any>> = new Subject()
254
+
255
+ const {
256
+ seriesSelection$,
257
+ axesSelection$,
258
+ defsSelection$,
259
+ graphicGSelection$
260
+ } = gridSelectionsObservable({
261
+ selection,
262
+ pluginName,
263
+ clipPathID,
264
+ seriesLabels$,
265
+ gridContainerPosition$,
266
+ gridAxesTransform$,
267
+ gridGraphicTransform$
268
+ })
269
+
270
+ const graphicReverseScale$: Observable<[number, number][]> = combineLatest({
271
+ // gridGraphicTransform: gridGraphicTransform$,
272
+ // gridContainerPosition: gridContainerPosition$,
273
+ // gridAxesTransform: gridAxesTransform$
274
+ computedData: computedData$,
275
+ gridGraphicReverseScale: gridGraphicReverseScale$
276
+ }).pipe(
277
+ takeUntil(destroy$),
278
+ switchMap(async data => data),
279
+ map(data => {
280
+ return data.computedData.map((series, seriesIndex) => {
281
+ return data.gridGraphicReverseScale[seriesIndex]
282
+ })
283
+ })
284
+ )
285
+
286
+ const clipPathSubscription = combineLatest({
287
+ defsSelection: defsSelection$,
288
+ gridAxesSize: gridAxesSize$,
289
+ }).pipe(
290
+ takeUntil(destroy$),
291
+ switchMap(async (d) => d),
292
+ ).subscribe(data => {
293
+ // 外層的遮罩
294
+ const clipPathData = [{
295
+ id: clipPathID,
296
+ width: data.gridAxesSize.width,
297
+ height: data.gridAxesSize.height
298
+ }]
299
+ renderClipPath({
300
+ defsSelection: data.defsSelection,
301
+ clipPathData,
302
+ })
303
+ })
304
+
305
+ const highlightTarget$ = fullChartParams$.pipe(
306
+ takeUntil(destroy$),
307
+ map(d => d.highlightTarget),
308
+ distinctUntilChanged()
309
+ )
310
+
311
+ const graphicSelection$ = combineLatest({
312
+ graphicGSelection: graphicGSelection$,
313
+ visibleComputedLayoutData: visibleComputedLayoutData$,
314
+ graphicReverseScale: graphicReverseScale$,
315
+ fullChartParams: fullChartParams$,
316
+ fullParams: fullParams$,
317
+ }).pipe(
318
+ takeUntil(destroy$),
319
+ switchMap(async (d) => d),
320
+ map(data => {
321
+ return renderDots({
322
+ graphicGSelection: data.graphicGSelection,
323
+ circleGClassName,
324
+ circleClassName,
325
+ visibleComputedLayoutData: data.visibleComputedLayoutData,
326
+ fullParams: data.fullParams,
327
+ fullChartParams: data.fullChartParams,
328
+ graphicReverseScale: data.graphicReverseScale
329
+ })
330
+ })
331
+ )
332
+
333
+ combineLatest({
334
+ graphicSelection: graphicSelection$,
335
+ computedData: computedData$,
336
+ SeriesDataMap: SeriesDataMap$,
337
+ GroupDataMap: GroupDataMap$,
338
+ highlightTarget: highlightTarget$
339
+ }).pipe(
340
+ takeUntil(destroy$),
341
+ switchMap(async (d) => d),
342
+ ).subscribe(data => {
343
+
344
+ data.graphicSelection
345
+ .on('mouseover', (event, datum) => {
346
+ // event.stopPropagation()
347
+
348
+ event$.next({
349
+ type: 'grid',
350
+ eventName: 'mouseover',
351
+ pluginName,
352
+ highlightTarget: data.highlightTarget,
353
+ datum,
354
+ gridIndex: datum.gridIndex,
355
+ series: data.SeriesDataMap.get(datum.seriesLabel)!,
356
+ seriesIndex: datum.seriesIndex,
357
+ seriesLabel: datum.seriesLabel,
358
+ groups: data.GroupDataMap.get(datum.groupLabel)!,
359
+ groupIndex: datum.groupIndex,
360
+ groupLabel: datum.groupLabel,
361
+ event,
362
+ data: data.computedData
363
+ })
364
+ })
365
+ .on('mousemove', (event, datum) => {
366
+ // event.stopPropagation()
367
+
368
+ event$.next({
369
+ type: 'grid',
370
+ eventName: 'mousemove',
371
+ pluginName,
372
+ highlightTarget: data.highlightTarget,
373
+ data: data.computedData,
374
+ datum,
375
+ gridIndex: datum.gridIndex,
376
+ series: data.SeriesDataMap.get(datum.seriesLabel)!,
377
+ seriesIndex: datum.seriesIndex,
378
+ seriesLabel: datum.seriesLabel,
379
+ groups: data.GroupDataMap.get(datum.groupLabel)!,
380
+ groupIndex: datum.groupIndex,
381
+ groupLabel: datum.groupLabel,
382
+ event
383
+ })
384
+ })
385
+ .on('mouseout', (event, datum) => {
386
+ // event.stopPropagation()
387
+
388
+ event$.next({
389
+ type: 'grid',
390
+ eventName: 'mouseout',
391
+ pluginName,
392
+ highlightTarget: data.highlightTarget,
393
+ datum,
394
+ gridIndex: datum.gridIndex,
395
+ series: data.SeriesDataMap.get(datum.seriesLabel)!,
396
+ seriesIndex: datum.seriesIndex,
397
+ seriesLabel: datum.seriesLabel,
398
+ groups: data.GroupDataMap.get(datum.groupLabel)!,
399
+ groupIndex: datum.groupIndex,
400
+ groupLabel: datum.groupLabel,
401
+ event,
402
+ data: data.computedData
403
+ })
404
+ })
405
+ .on('click', (event, datum) => {
406
+ // event.stopPropagation()
407
+
408
+ event$.next({
409
+ type: 'grid',
410
+ eventName: 'click',
411
+ pluginName,
412
+ highlightTarget: data.highlightTarget,
413
+ datum,
414
+ gridIndex: datum.gridIndex,
415
+ series: data.SeriesDataMap.get(datum.seriesLabel)!,
416
+ seriesIndex: datum.seriesIndex,
417
+ seriesLabel: datum.seriesLabel,
418
+ groups: data.GroupDataMap.get(datum.groupLabel)!,
419
+ groupIndex: datum.groupIndex,
420
+ groupLabel: datum.groupLabel,
421
+ event,
422
+ data: data.computedData
423
+ })
424
+ })
425
+
426
+ })
427
+
428
+ // const datumList$ = computedData$.pipe(
429
+ // takeUntil(destroy$),
430
+ // map(d => d.flat())
431
+ // )
432
+ // const highlight$ = highlightObservable({ datumList$, fullChartParams$, event$: store.event$ })
433
+ // const highlightSubscription = gridHighlight$.subscribe()
434
+ const onlyShowHighlighted$ = fullParams$.pipe(
435
+ takeUntil(destroy$),
436
+ map(d => d.onlyShowHighlighted),
437
+ distinctUntilChanged()
438
+ )
439
+
440
+ combineLatest({
441
+ graphicSelection: graphicSelection$,
442
+ highlight: gridHighlight$.pipe(
443
+ map(data => data.map(d => d.id))
444
+ ),
445
+ onlyShowHighlighted: onlyShowHighlighted$,
446
+ // fullParams: fullParams$,
447
+ fullChartParams: fullChartParams$
448
+ }).pipe(
449
+ takeUntil(destroy$),
450
+ switchMap(async d => d)
451
+ ).subscribe(data => {
452
+ highlightDots({
453
+ selection: data.graphicSelection,
454
+ ids: data.highlight,
455
+ onlyShowHighlighted: data.onlyShowHighlighted,
456
+ // fullParams: data.fullParams,
457
+ fullChartParams: data.fullChartParams
458
+ })
459
+ })
460
+
461
+ return () => {
462
+ destroy$.next(undefined)
463
+ // highlightSubscription.unsubscribe()
464
+ }
516
465
  }