@orbcharts/core 3.0.0-alpha.60 → 3.0.0-alpha.62

Sign up to get free protection for your applications and to get access to all the features.
Files changed (215) hide show
  1. package/LICENSE +200 -200
  2. package/dist/lib/core-types.d.ts +1 -0
  3. package/dist/orbcharts-core.es.js +3056 -2609
  4. package/dist/orbcharts-core.umd.js +6 -2
  5. package/dist/src/AbstractChart.d.ts +5 -3
  6. package/dist/src/GridChart.d.ts +1 -1
  7. package/dist/src/MultiGridChart.d.ts +1 -1
  8. package/dist/src/MultiValueChart.d.ts +1 -1
  9. package/dist/src/RelationshipChart.d.ts +1 -1
  10. package/dist/src/SeriesChart.d.ts +1 -1
  11. package/dist/src/TreeChart.d.ts +1 -1
  12. package/dist/src/base/createBaseChart.d.ts +1 -1
  13. package/dist/src/base/createBasePlugin.d.ts +1 -1
  14. package/dist/src/base/validators/chartOptionsValidator.d.ts +3 -0
  15. package/dist/src/base/validators/chartParamsValidator.d.ts +3 -0
  16. package/dist/src/base/validators/elementValidator.d.ts +3 -0
  17. package/dist/src/base/validators/pluginsValidator.d.ts +3 -0
  18. package/dist/src/defaults.d.ts +1 -16
  19. package/dist/src/defineGridPlugin.d.ts +1 -1
  20. package/dist/src/defineMultiGridPlugin.d.ts +1 -1
  21. package/dist/src/defineMultiValuePlugin.d.ts +1 -1
  22. package/dist/src/defineNoneDataPlugin.d.ts +1 -1
  23. package/dist/src/defineRelationshipPlugin.d.ts +1 -1
  24. package/dist/src/defineSeriesPlugin.d.ts +1 -1
  25. package/dist/src/defineTreePlugin.d.ts +1 -1
  26. package/dist/src/grid/computedDataFn.d.ts +4 -0
  27. package/dist/src/grid/contextObserverCallback.d.ts +3 -0
  28. package/dist/src/grid/dataFormatterValidator.d.ts +3 -0
  29. package/dist/src/grid/dataValidator.d.ts +3 -0
  30. package/dist/src/index.d.ts +1 -1
  31. package/dist/src/multiGrid/computedDataFn.d.ts +3 -0
  32. package/dist/src/multiGrid/contextObserverCallback.d.ts +3 -0
  33. package/dist/src/multiGrid/dataFormatterValidator.d.ts +3 -0
  34. package/dist/src/multiGrid/dataValidator.d.ts +3 -0
  35. package/dist/src/multiValue/computedDataFn.d.ts +3 -0
  36. package/dist/src/multiValue/contextObserverCallback.d.ts +3 -0
  37. package/dist/src/multiValue/dataFormatterValidator.d.ts +3 -0
  38. package/dist/src/multiValue/dataValidator.d.ts +3 -0
  39. package/dist/src/relationship/computedDataFn.d.ts +3 -0
  40. package/dist/src/relationship/contextObserverCallback.d.ts +3 -0
  41. package/dist/src/relationship/dataFormatterValidator.d.ts +3 -0
  42. package/dist/src/relationship/dataValidator.d.ts +3 -0
  43. package/dist/src/series/computedDataFn.d.ts +3 -0
  44. package/dist/src/series/contextObserverCallback.d.ts +3 -0
  45. package/dist/src/series/dataFormatterValidator.d.ts +3 -0
  46. package/dist/src/series/dataValidator.d.ts +3 -0
  47. package/dist/src/tree/computedDataFn.d.ts +3 -0
  48. package/dist/src/tree/contextObserverCallback.d.ts +3 -0
  49. package/dist/src/tree/dataFormatterValidator.d.ts +3 -0
  50. package/dist/src/tree/dataValidator.d.ts +3 -0
  51. package/dist/src/utils/commonUtils.d.ts +1 -0
  52. package/dist/src/utils/errorMessage.d.ts +14 -0
  53. package/dist/src/{grid → utils}/gridObservables.d.ts +2 -2
  54. package/dist/src/utils/index.d.ts +7 -3
  55. package/dist/src/{multiGrid → utils}/multiGridObservables.d.ts +1 -1
  56. package/dist/src/utils/observables.d.ts +2 -1
  57. package/dist/src/utils/orbchartsUtils.d.ts +1 -12
  58. package/dist/src/{series → utils}/seriesObservables.d.ts +3 -3
  59. package/dist/src/{tree → utils}/treeObservables.d.ts +1 -1
  60. package/dist/src/utils/validator.d.ts +3 -0
  61. package/lib/core-types.ts +7 -0
  62. package/package.json +42 -41
  63. package/src/AbstractChart.ts +57 -48
  64. package/src/GridChart.ts +24 -20
  65. package/src/MultiGridChart.ts +24 -20
  66. package/src/MultiValueChart.ts +24 -20
  67. package/src/RelationshipChart.ts +24 -20
  68. package/src/SeriesChart.ts +24 -20
  69. package/src/TreeChart.ts +24 -20
  70. package/src/base/createBaseChart.ts +500 -386
  71. package/src/base/createBasePlugin.ts +152 -95
  72. package/src/base/validators/chartOptionsValidator.ts +24 -0
  73. package/src/base/validators/chartParamsValidator.ts +134 -0
  74. package/src/base/validators/elementValidator.ts +14 -0
  75. package/src/base/validators/pluginsValidator.ts +15 -0
  76. package/src/defaults.ts +232 -226
  77. package/src/defineGridPlugin.ts +3 -3
  78. package/src/defineMultiGridPlugin.ts +3 -3
  79. package/src/defineMultiValuePlugin.ts +3 -3
  80. package/src/defineNoneDataPlugin.ts +4 -4
  81. package/src/defineRelationshipPlugin.ts +3 -3
  82. package/src/defineSeriesPlugin.ts +3 -3
  83. package/src/defineTreePlugin.ts +3 -3
  84. package/src/grid/{computeGridData.ts → computedDataFn.ts} +129 -134
  85. package/src/grid/{createGridContextObserver.ts → contextObserverCallback.ts} +155 -155
  86. package/src/grid/dataFormatterValidator.ts +9 -0
  87. package/src/grid/dataValidator.ts +9 -0
  88. package/src/index.ts +20 -21
  89. package/src/multiGrid/{computeMultiGridData.ts → computedDataFn.ts} +123 -130
  90. package/src/multiGrid/{createMultiGridContextObserver.ts → contextObserverCallback.ts} +41 -41
  91. package/src/multiGrid/dataFormatterValidator.ts +9 -0
  92. package/src/multiGrid/dataValidator.ts +9 -0
  93. package/src/multiValue/{computeMultiValueData.ts → computedDataFn.ts} +176 -179
  94. package/src/multiValue/{createMultiValueContextObserver.ts → contextObserverCallback.ts} +12 -12
  95. package/src/multiValue/dataFormatterValidator.ts +9 -0
  96. package/src/multiValue/dataValidator.ts +9 -0
  97. package/src/relationship/{computeRelationshipData.ts → computedDataFn.ts} +125 -118
  98. package/src/relationship/{createRelationshipContextObserver.ts → contextObserverCallback.ts} +12 -12
  99. package/src/relationship/dataFormatterValidator.ts +9 -0
  100. package/src/relationship/dataValidator.ts +9 -0
  101. package/src/series/{computeSeriesData.ts → computedDataFn.ts} +88 -90
  102. package/src/series/{createSeriesContextObserver.ts → contextObserverCallback.ts} +100 -93
  103. package/src/series/dataFormatterValidator.ts +9 -0
  104. package/src/series/dataValidator.ts +9 -0
  105. package/src/tree/{computeTreeData.ts → computedDataFn.ts} +130 -132
  106. package/src/tree/{createTreeContextObserver.ts → contextObserverCallback.ts} +61 -61
  107. package/src/tree/dataFormatterValidator.ts +9 -0
  108. package/src/tree/dataValidator.ts +9 -0
  109. package/src/utils/commonUtils.ts +54 -50
  110. package/src/utils/d3Utils.ts +108 -108
  111. package/src/utils/errorMessage.ts +43 -0
  112. package/src/{grid → utils}/gridObservables.ts +611 -614
  113. package/src/utils/index.ts +10 -4
  114. package/src/{multiGrid → utils}/multiGridObservables.ts +366 -365
  115. package/src/utils/observables.ts +218 -202
  116. package/src/utils/orbchartsUtils.ts +352 -349
  117. package/src/{series → utils}/seriesObservables.ts +175 -175
  118. package/src/{tree → utils}/treeObservables.ts +94 -94
  119. package/src/utils/validator.ts +126 -0
  120. package/tsconfig.base.json +13 -13
  121. package/tsconfig.json +2 -2
  122. package/vite-env.d.ts +7 -0
  123. package/vite.config.js +22 -22
  124. package/dist/src/grid/computeGridData.d.ts +0 -6
  125. package/dist/src/grid/createGridContextObserver.d.ts +0 -3
  126. package/dist/src/multiGrid/computeMultiGridData.d.ts +0 -3
  127. package/dist/src/multiGrid/createMultiGridContextObserver.d.ts +0 -3
  128. package/dist/src/multiValue/computeMultiValueData.d.ts +0 -3
  129. package/dist/src/multiValue/createMultiValueContextObserver.d.ts +0 -3
  130. package/dist/src/relationship/computeRelationshipData.d.ts +0 -3
  131. package/dist/src/relationship/createRelationshipContextObserver.d.ts +0 -3
  132. package/dist/src/series/computeSeriesData.d.ts +0 -3
  133. package/dist/src/series/createSeriesContextObserver.d.ts +0 -3
  134. package/dist/src/tree/computeTreeData.d.ts +0 -3
  135. package/dist/src/tree/createTreeContextObserver.d.ts +0 -3
  136. package/dist/src/types/Axis.d.ts +0 -1
  137. package/dist/src/types/Chart.d.ts +0 -45
  138. package/dist/src/types/ChartParams.d.ts +0 -36
  139. package/dist/src/types/ComputedData.d.ts +0 -42
  140. package/dist/src/types/ComputedDataGrid.d.ts +0 -5
  141. package/dist/src/types/ComputedDataMultiGrid.d.ts +0 -3
  142. package/dist/src/types/ComputedDataMultiValue.d.ts +0 -6
  143. package/dist/src/types/ComputedDataRelationship.d.ts +0 -18
  144. package/dist/src/types/ComputedDataSeries.d.ts +0 -5
  145. package/dist/src/types/ComputedDataTree.d.ts +0 -7
  146. package/dist/src/types/ContextObserver.d.ts +0 -28
  147. package/dist/src/types/ContextObserverGrid.d.ts +0 -41
  148. package/dist/src/types/ContextObserverMultiGrid.d.ts +0 -15
  149. package/dist/src/types/ContextObserverMultiValue.d.ts +0 -4
  150. package/dist/src/types/ContextObserverRelationship.d.ts +0 -4
  151. package/dist/src/types/ContextObserverSeries.d.ts +0 -27
  152. package/dist/src/types/ContextObserverTree.d.ts +0 -11
  153. package/dist/src/types/ContextSubject.d.ts +0 -15
  154. package/dist/src/types/Data.d.ts +0 -19
  155. package/dist/src/types/DataFormatter.d.ts +0 -41
  156. package/dist/src/types/DataFormatterGrid.d.ts +0 -34
  157. package/dist/src/types/DataFormatterMultiGrid.d.ts +0 -20
  158. package/dist/src/types/DataFormatterMultiValue.d.ts +0 -18
  159. package/dist/src/types/DataFormatterRelationship.d.ts +0 -10
  160. package/dist/src/types/DataFormatterSeries.d.ts +0 -19
  161. package/dist/src/types/DataFormatterTree.d.ts +0 -7
  162. package/dist/src/types/DataGrid.d.ts +0 -6
  163. package/dist/src/types/DataMultiGrid.d.ts +0 -6
  164. package/dist/src/types/DataMultiValue.d.ts +0 -7
  165. package/dist/src/types/DataRelationship.d.ts +0 -21
  166. package/dist/src/types/DataSeries.d.ts +0 -6
  167. package/dist/src/types/DataTree.d.ts +0 -15
  168. package/dist/src/types/Event.d.ts +0 -56
  169. package/dist/src/types/Layout.d.ts +0 -8
  170. package/dist/src/types/Padding.d.ts +0 -6
  171. package/dist/src/types/Plugin.d.ts +0 -37
  172. package/dist/src/types/TransformData.d.ts +0 -8
  173. package/dist/src/types/index.d.ts +0 -37
  174. package/src/types/Axis.ts +0 -1
  175. package/src/types/Chart.ts +0 -54
  176. package/src/types/ChartParams.ts +0 -51
  177. package/src/types/ComputedData.ts +0 -84
  178. package/src/types/ComputedDataGrid.ts +0 -14
  179. package/src/types/ComputedDataMultiGrid.ts +0 -3
  180. package/src/types/ComputedDataMultiValue.ts +0 -9
  181. package/src/types/ComputedDataRelationship.ts +0 -20
  182. package/src/types/ComputedDataSeries.ts +0 -8
  183. package/src/types/ComputedDataTree.ts +0 -20
  184. package/src/types/ContextObserver.ts +0 -38
  185. package/src/types/ContextObserverGrid.ts +0 -43
  186. package/src/types/ContextObserverMultiGrid.ts +0 -17
  187. package/src/types/ContextObserverMultiValue.ts +0 -5
  188. package/src/types/ContextObserverRelationship.ts +0 -5
  189. package/src/types/ContextObserverSeries.ts +0 -29
  190. package/src/types/ContextObserverTree.ts +0 -11
  191. package/src/types/ContextSubject.ts +0 -18
  192. package/src/types/Data.ts +0 -45
  193. package/src/types/DataFormatter.ts +0 -74
  194. package/src/types/DataFormatterGrid.ts +0 -68
  195. package/src/types/DataFormatterMultiGrid.ts +0 -45
  196. package/src/types/DataFormatterMultiValue.ts +0 -24
  197. package/src/types/DataFormatterRelationship.ts +0 -26
  198. package/src/types/DataFormatterSeries.ts +0 -20
  199. package/src/types/DataFormatterTree.ts +0 -12
  200. package/src/types/DataGrid.ts +0 -11
  201. package/src/types/DataMultiGrid.ts +0 -7
  202. package/src/types/DataMultiValue.ts +0 -12
  203. package/src/types/DataRelationship.ts +0 -28
  204. package/src/types/DataSeries.ts +0 -11
  205. package/src/types/DataTree.ts +0 -20
  206. package/src/types/Event.ts +0 -153
  207. package/src/types/Layout.ts +0 -12
  208. package/src/types/Padding.ts +0 -6
  209. package/src/types/Plugin.ts +0 -60
  210. package/src/types/TransformData.ts +0 -8
  211. package/src/types/index.ts +0 -37
  212. /package/dist/src/{multiValue → utils}/multiValueObservables.d.ts +0 -0
  213. /package/dist/src/{relationship → utils}/relationshipObservables.d.ts +0 -0
  214. /package/src/{multiValue → utils}/multiValueObservables.ts +0 -0
  215. /package/src/{relationship → utils}/relationshipObservables.ts +0 -0
@@ -1,366 +1,367 @@
1
- import {
2
- combineLatest,
3
- distinctUntilChanged,
4
- filter,
5
- of,
6
- map,
7
- merge,
8
- takeUntil,
9
- shareReplay,
10
- switchMap,
11
- Subject,
12
- Observable,
13
- combineLatestAll} from 'rxjs'
14
- import type {
15
- AxisPosition,
16
- ChartType,
17
- ChartParams,
18
- ComputedDataTypeMap,
19
- ComputedDataGrid,
20
- DataTypeMap,
21
- DataFormatterTypeMap,
22
- DataFormatterGrid,
23
- DataFormatterMultiGridContainer,
24
- EventMultiGrid,
25
- HighlightTarget,
26
- Layout,
27
- TransformData } from '../types'
28
- import type { ContextObserverGridDetail, ContextObserverMultiGridDetail, GridContainerPosition } from '../types'
29
- import {
30
- highlightObservable,
31
- seriesDataMapObservable,
32
- groupDataMapObservable } from '../utils/observables'
33
- import {
34
- gridAxesTransformObservable,
35
- gridGraphicTransformObservable,
36
- gridGraphicReverseScaleObservable,
37
- gridAxesReverseTransformObservable,
38
- gridAxesSizeObservable,
39
- seriesLabelsObservable,
40
- gridComputedLayoutDataObservable,
41
- gridVisibleComputedDataObservable,
42
- gridVisibleComputedLayoutDataObservable,
43
- // isSeriesSeprateObservable,
44
- computedStackedDataObservables } from '../grid/gridObservables'
45
- import { DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT } from '../defaults'
46
- import { calcGridContainerLayout } from '../utils/orbchartsUtils'
47
-
48
- // 每一個grid計算出來的所有Observable
49
- export const multiGridEachDetailObservable = ({ fullDataFormatter$, computedData$, layout$, fullChartParams$, event$ }: {
50
- fullDataFormatter$: Observable<DataFormatterTypeMap<'multiGrid'>>
51
- computedData$: Observable<ComputedDataTypeMap<'multiGrid'>>
52
- layout$: Observable<Layout>
53
- fullChartParams$: Observable<ChartParams>
54
- event$: Subject<EventMultiGrid>
55
- }): Observable<ContextObserverMultiGridDetail[]> => {
56
-
57
- const destroy$ = new Subject()
58
-
59
- // highlight全部grid
60
- const allGridHighlight$ = highlightObservable({
61
- datumList$: computedData$.pipe(
62
- map(d => d.flat().flat()),
63
- shareReplay(1)
64
- ),
65
- fullChartParams$: fullChartParams$,
66
- event$: event$
67
- }).pipe(
68
- shareReplay(1)
69
- )
70
-
71
- const multiGridContainer$ = multiGridContainerObservable({
72
- computedData$: computedData$,
73
- fullDataFormatter$: fullDataFormatter$,
74
- layout$: layout$,
75
- }).pipe(
76
- shareReplay(1)
77
- )
78
-
79
- return combineLatest({
80
- fullDataFormatter: fullDataFormatter$,
81
- computedData: computedData$,
82
- multiGridContainer: multiGridContainer$
83
- }).pipe(
84
- switchMap(async (d) => d),
85
- // distinctUntilChanged((a, b) => {
86
- // // 只有當computedData的長度改變時,才重新計算
87
- // return a.computedData.length === b.computedData.length
88
- // }),
89
- map(data => {
90
- // 每次重新計算時,清除之前的訂閱
91
- destroy$.next(undefined)
92
-
93
- const defaultGrid = data.fullDataFormatter.gridList[0] ?? DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT
94
-
95
- return data.computedData.map((gridComputedData, gridIndex) => {
96
-
97
- // -- 取得該grid的data和dataFormatter
98
- const grid = data.fullDataFormatter.gridList[gridIndex] ?? defaultGrid
99
- const gridDataFormatter: DataFormatterGrid = {
100
- type: 'grid',
101
- visibleFilter: data.fullDataFormatter.visibleFilter as any,
102
- grid: {
103
- ...grid
104
- },
105
- container: {
106
- ...data.fullDataFormatter.container
107
- }
108
- }
109
- const gridDataFormatter$ = of(gridDataFormatter).pipe(
110
- takeUntil(destroy$),
111
- shareReplay(1)
112
- )
113
- const gridComputedData$ = of(gridComputedData).pipe(
114
- takeUntil(destroy$),
115
- shareReplay(1)
116
- )
117
-
118
- // const isSeriesSeprate$ = isSeriesSeprateObservable({
119
- // computedData$: gridComputedData$,
120
- // fullDataFormatter$: gridDataFormatter$,
121
- // }).pipe(
122
- // takeUntil(destroy$),
123
- // shareReplay(1)
124
- // )
125
-
126
- // const gridContainerPosition$ = gridContainerPositionObservable({
127
- // computedData$: gridComputedData$,
128
- // fullDataFormatter$: gridDataFormatter$,
129
- // layout$
130
- // }).pipe(
131
- // shareReplay(1)
132
- // )
133
-
134
- const isSeriesSeprate$ = gridDataFormatter$.pipe(
135
- map(d => d.grid.separateSeries),
136
- distinctUntilChanged(),
137
- shareReplay(1)
138
- )
139
-
140
- const gridContainerPosition$ = of(data.multiGridContainer[gridIndex]).pipe(
141
- takeUntil(destroy$),
142
- shareReplay(1)
143
- )
144
-
145
- const gridAxesTransform$ = gridAxesTransformObservable({
146
- fullDataFormatter$: gridDataFormatter$,
147
- layout$: layout$
148
- }).pipe(
149
- takeUntil(destroy$),
150
- shareReplay(1)
151
- )
152
-
153
-
154
- const gridAxesReverseTransform$ = gridAxesReverseTransformObservable({
155
- gridAxesTransform$
156
- }).pipe(
157
- takeUntil(destroy$),
158
- shareReplay(1)
159
- )
160
-
161
- const gridGraphicTransform$ = gridGraphicTransformObservable({
162
- computedData$: gridComputedData$,
163
- fullDataFormatter$: gridDataFormatter$,
164
- layout$: layout$
165
- }).pipe(
166
- takeUntil(destroy$),
167
- shareReplay(1)
168
- )
169
-
170
- const gridGraphicReverseScale$ = gridGraphicReverseScaleObservable({
171
- gridContainerPosition$: gridContainerPosition$,
172
- gridAxesTransform$: gridAxesTransform$,
173
- gridGraphicTransform$: gridGraphicTransform$,
174
- })
175
-
176
- const gridAxesSize$ = gridAxesSizeObservable({
177
- fullDataFormatter$: gridDataFormatter$,
178
- layout$: layout$
179
- }).pipe(
180
- takeUntil(destroy$),
181
- shareReplay(1)
182
- )
183
-
184
- const datumList$ = gridComputedData$.pipe(
185
- map(d => d.flat())
186
- ).pipe(
187
- takeUntil(destroy$),
188
- shareReplay(1)
189
- )
190
-
191
- // const gridHighlight$ = highlightObservable({
192
- // datumList$,
193
- // fullChartParams$: fullChartParams$,
194
- // event$: event$
195
- // }).pipe(
196
- // shareReplay(1)
197
- // )
198
-
199
- const seriesLabels$ = seriesLabelsObservable({
200
- computedData$: gridComputedData$,
201
- }).pipe(
202
- takeUntil(destroy$),
203
- shareReplay(1)
204
- )
205
-
206
- const SeriesDataMap$ = seriesDataMapObservable({
207
- datumList$: datumList$
208
- }).pipe(
209
- takeUntil(destroy$),
210
- shareReplay(1)
211
- )
212
-
213
- const GroupDataMap$ = groupDataMapObservable({
214
- datumList$: datumList$
215
- }).pipe(
216
- takeUntil(destroy$),
217
- shareReplay(1)
218
- )
219
-
220
- const visibleComputedData$ = gridVisibleComputedDataObservable({
221
- computedData$: gridComputedData$,
222
- }).pipe(
223
- takeUntil(destroy$),
224
- shareReplay(1)
225
- )
226
-
227
- const computedLayoutData$ = gridComputedLayoutDataObservable({
228
- computedData$: gridComputedData$,
229
- fullDataFormatter$: gridDataFormatter$,
230
- layout$: layout$,
231
- }).pipe(
232
- takeUntil(destroy$),
233
- shareReplay(1)
234
- )
235
-
236
- const visibleComputedLayoutData$ = gridVisibleComputedLayoutDataObservable({
237
- computedLayoutData$: computedLayoutData$,
238
- }).pipe(
239
- takeUntil(destroy$),
240
- shareReplay(1)
241
- )
242
-
243
- const computedStackedData$ = computedStackedDataObservables({
244
- computedData$: gridComputedData$,
245
- isSeriesSeprate$: isSeriesSeprate$
246
- }).pipe(
247
- shareReplay(1)
248
- )
249
-
250
- return {
251
- isSeriesSeprate$,
252
- gridContainerPosition$,
253
- gridAxesTransform$,
254
- gridAxesReverseTransform$,
255
- gridGraphicTransform$,
256
- gridGraphicReverseScale$,
257
- gridAxesSize$,
258
- gridHighlight$: allGridHighlight$,
259
- seriesLabels$,
260
- SeriesDataMap$,
261
- GroupDataMap$,
262
- dataFormatter$: gridDataFormatter$,
263
- computedData$: gridComputedData$,
264
- computedLayoutData$,
265
- visibleComputedData$,
266
- visibleComputedLayoutData$,
267
- computedStackedData$
268
- }
269
- })
270
- })
271
- )
272
- }
273
-
274
-
275
- // 所有container位置(對應series)
276
- export const multiGridContainerObservable = ({ computedData$, fullDataFormatter$, layout$ }: {
277
- computedData$: Observable<ComputedDataTypeMap<'multiGrid'>>
278
- fullDataFormatter$: Observable<DataFormatterTypeMap<'multiGrid'>>
279
- layout$: Observable<Layout>
280
- }): Observable<GridContainerPosition[][]> => {
281
-
282
- return combineLatest({
283
- computedData: computedData$,
284
- fullDataFormatter: fullDataFormatter$,
285
- layout: layout$,
286
- }).pipe(
287
- switchMap(async (d) => d),
288
- map(data => {
289
-
290
- const defaultGrid = data.fullDataFormatter.gridList[0] ?? DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT
291
- const slotAmount = data.computedData.reduce((acc, gridData, gridIndex) => {
292
- const grid = data.fullDataFormatter.gridList[gridIndex] ?? defaultGrid
293
- const gridSlotAmount = grid.separateSeries
294
- ? gridData.length
295
- : data.fullDataFormatter.separateGrid
296
- ? 1
297
- : 0 // 如果grid和series都不分開,則slotAmount不增加(在相同的slot)
298
- return acc + gridSlotAmount
299
- }, 0) || 1
300
-
301
- const gridContainerLayout = calcGridContainerLayout(data.layout, data.fullDataFormatter.container, slotAmount)
302
-
303
- let accGridSlotIndex = 0
304
- const gridContainerPositionArr = data.computedData.map((gridData, gridIndex) => {
305
- const grid = data.fullDataFormatter.gridList[gridIndex] ?? defaultGrid
306
- const seriesContainerArr = gridData.map((seriesData, seriesIndex) => {
307
- const container = gridContainerLayout[accGridSlotIndex]
308
- if (grid.separateSeries) {
309
- accGridSlotIndex += 1
310
- }
311
- return container
312
- })
313
- if (!grid.separateSeries && data.fullDataFormatter.separateGrid) {
314
- accGridSlotIndex += 1
315
- }
316
- return seriesContainerArr
317
- })
318
- // console.log('gridContainerPositionArr', gridContainerPositionArr)
319
-
320
- // let accGridSlotIndex = 0
321
-
322
- // const gridContainerPositionArr = data.computedData.map((gridData, gridIndex) => {
323
- // const grid = data.fullDataFormatter.gridList[gridIndex] ?? defaultGrid
324
-
325
- // if (grid.separateSeries) {
326
- // // -- 依seriesSlotIndexes計算 --
327
- // const seriesContainerArr = gridData.map((seriesData, seriesIndex) => {
328
- // const currentSlotIndex = accGridSlotIndex + seriesIndex
329
- // const columnIndex = currentSlotIndex % data.fullDataFormatter.container.columnAmount
330
- // const rowIndex = Math.floor(currentSlotIndex / data.fullDataFormatter.container.columnAmount)
331
- // const { translate, scale } = calcGridContainerPosition(data.layout, data.fullDataFormatter.container, rowIndex, columnIndex)
332
- // return {
333
- // slotIndex: currentSlotIndex,
334
- // rowIndex,
335
- // columnIndex,
336
- // translate,
337
- // scale,
338
- // }
339
- // })
340
- // accGridSlotIndex += seriesContainerArr.length
341
- // return seriesContainerArr
342
- // } else {
343
- // // -- 依grid的slotIndex計算 --
344
- // const columnIndex = accGridSlotIndex % data.fullDataFormatter.container.columnAmount
345
- // const rowIndex = Math.floor(accGridSlotIndex / data.fullDataFormatter.container.columnAmount)
346
- // const seriesContainerArr = gridData.map((seriesData, seriesIndex) => {
347
- // const { translate, scale } = calcGridContainerPosition(data.layout, data.fullDataFormatter.container, rowIndex, columnIndex)
348
- // return {
349
- // slotIndex: accGridSlotIndex,
350
- // rowIndex,
351
- // columnIndex,
352
- // translate,
353
- // scale,
354
- // }
355
- // })
356
- // if (data.fullDataFormatter.separateGrid) {
357
- // accGridSlotIndex += 1
358
- // }
359
- // return seriesContainerArr
360
- // }
361
- // })
362
-
363
- return gridContainerPositionArr
364
- }),
365
- )
1
+ import {
2
+ combineLatest,
3
+ distinctUntilChanged,
4
+ filter,
5
+ of,
6
+ map,
7
+ merge,
8
+ takeUntil,
9
+ shareReplay,
10
+ switchMap,
11
+ Subject,
12
+ Observable,
13
+ combineLatestAll} from 'rxjs'
14
+ import type {
15
+ AxisPosition,
16
+ ChartType,
17
+ ChartParams,
18
+ ComputedDataTypeMap,
19
+ ComputedDataGrid,
20
+ ContextObserverMultiGridDetail,
21
+ DataTypeMap,
22
+ DataFormatterTypeMap,
23
+ DataFormatterGrid,
24
+ DataFormatterMultiGridContainer,
25
+ EventMultiGrid,
26
+ GridContainerPosition,
27
+ HighlightTarget,
28
+ Layout,
29
+ TransformData } from '../../lib/core-types'
30
+ import {
31
+ highlightObservable,
32
+ seriesDataMapObservable,
33
+ groupDataMapObservable } from './observables'
34
+ import {
35
+ gridAxesTransformObservable,
36
+ gridGraphicTransformObservable,
37
+ gridGraphicReverseScaleObservable,
38
+ gridAxesReverseTransformObservable,
39
+ gridAxesSizeObservable,
40
+ gridSeriesLabelsObservable,
41
+ gridComputedLayoutDataObservable,
42
+ gridVisibleComputedDataObservable,
43
+ gridVisibleComputedLayoutDataObservable,
44
+ // isSeriesSeprateObservable,
45
+ computedStackedDataObservables } from './gridObservables'
46
+ import { DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT } from '../defaults'
47
+ import { calcGridContainerLayout } from './orbchartsUtils'
48
+
49
+ // 每一個grid計算出來的所有Observable
50
+ export const multiGridEachDetailObservable = ({ fullDataFormatter$, computedData$, layout$, fullChartParams$, event$ }: {
51
+ fullDataFormatter$: Observable<DataFormatterTypeMap<'multiGrid'>>
52
+ computedData$: Observable<ComputedDataTypeMap<'multiGrid'>>
53
+ layout$: Observable<Layout>
54
+ fullChartParams$: Observable<ChartParams>
55
+ event$: Subject<EventMultiGrid>
56
+ }): Observable<ContextObserverMultiGridDetail[]> => {
57
+
58
+ const destroy$ = new Subject()
59
+
60
+ // highlight全部grid
61
+ const allGridHighlight$ = highlightObservable({
62
+ datumList$: computedData$.pipe(
63
+ map(d => d.flat().flat()),
64
+ shareReplay(1)
65
+ ),
66
+ fullChartParams$: fullChartParams$,
67
+ event$: event$
68
+ }).pipe(
69
+ shareReplay(1)
70
+ )
71
+
72
+ const multiGridContainer$ = multiGridContainerObservable({
73
+ computedData$: computedData$,
74
+ fullDataFormatter$: fullDataFormatter$,
75
+ layout$: layout$,
76
+ }).pipe(
77
+ shareReplay(1)
78
+ )
79
+
80
+ return combineLatest({
81
+ fullDataFormatter: fullDataFormatter$,
82
+ computedData: computedData$,
83
+ multiGridContainer: multiGridContainer$
84
+ }).pipe(
85
+ switchMap(async (d) => d),
86
+ // distinctUntilChanged((a, b) => {
87
+ // // 只有當computedData的長度改變時,才重新計算
88
+ // return a.computedData.length === b.computedData.length
89
+ // }),
90
+ map(data => {
91
+ // 每次重新計算時,清除之前的訂閱
92
+ destroy$.next(undefined)
93
+
94
+ const defaultGrid = data.fullDataFormatter.gridList[0] ?? DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT
95
+
96
+ return data.computedData.map((gridComputedData, gridIndex) => {
97
+
98
+ // -- 取得該griddata和dataFormatter
99
+ const grid = data.fullDataFormatter.gridList[gridIndex] ?? defaultGrid
100
+ const gridDataFormatter: DataFormatterGrid = {
101
+ type: 'grid',
102
+ visibleFilter: data.fullDataFormatter.visibleFilter as any,
103
+ grid: {
104
+ ...grid
105
+ },
106
+ container: {
107
+ ...data.fullDataFormatter.container
108
+ }
109
+ }
110
+ const gridDataFormatter$ = of(gridDataFormatter).pipe(
111
+ takeUntil(destroy$),
112
+ shareReplay(1)
113
+ )
114
+ const gridComputedData$ = of(gridComputedData).pipe(
115
+ takeUntil(destroy$),
116
+ shareReplay(1)
117
+ )
118
+
119
+ // const isSeriesSeprate$ = isSeriesSeprateObservable({
120
+ // computedData$: gridComputedData$,
121
+ // fullDataFormatter$: gridDataFormatter$,
122
+ // }).pipe(
123
+ // takeUntil(destroy$),
124
+ // shareReplay(1)
125
+ // )
126
+
127
+ // const gridContainerPosition$ = gridContainerPositionObservable({
128
+ // computedData$: gridComputedData$,
129
+ // fullDataFormatter$: gridDataFormatter$,
130
+ // layout$
131
+ // }).pipe(
132
+ // shareReplay(1)
133
+ // )
134
+
135
+ const isSeriesSeprate$ = gridDataFormatter$.pipe(
136
+ map(d => d.grid.separateSeries),
137
+ distinctUntilChanged(),
138
+ shareReplay(1)
139
+ )
140
+
141
+ const gridContainerPosition$ = of(data.multiGridContainer[gridIndex]).pipe(
142
+ takeUntil(destroy$),
143
+ shareReplay(1)
144
+ )
145
+
146
+ const gridAxesTransform$ = gridAxesTransformObservable({
147
+ fullDataFormatter$: gridDataFormatter$,
148
+ layout$: layout$
149
+ }).pipe(
150
+ takeUntil(destroy$),
151
+ shareReplay(1)
152
+ )
153
+
154
+
155
+ const gridAxesReverseTransform$ = gridAxesReverseTransformObservable({
156
+ gridAxesTransform$
157
+ }).pipe(
158
+ takeUntil(destroy$),
159
+ shareReplay(1)
160
+ )
161
+
162
+ const gridGraphicTransform$ = gridGraphicTransformObservable({
163
+ computedData$: gridComputedData$,
164
+ fullDataFormatter$: gridDataFormatter$,
165
+ layout$: layout$
166
+ }).pipe(
167
+ takeUntil(destroy$),
168
+ shareReplay(1)
169
+ )
170
+
171
+ const gridGraphicReverseScale$ = gridGraphicReverseScaleObservable({
172
+ gridContainerPosition$: gridContainerPosition$,
173
+ gridAxesTransform$: gridAxesTransform$,
174
+ gridGraphicTransform$: gridGraphicTransform$,
175
+ })
176
+
177
+ const gridAxesSize$ = gridAxesSizeObservable({
178
+ fullDataFormatter$: gridDataFormatter$,
179
+ layout$: layout$
180
+ }).pipe(
181
+ takeUntil(destroy$),
182
+ shareReplay(1)
183
+ )
184
+
185
+ const datumList$ = gridComputedData$.pipe(
186
+ map(d => d.flat())
187
+ ).pipe(
188
+ takeUntil(destroy$),
189
+ shareReplay(1)
190
+ )
191
+
192
+ // const gridHighlight$ = highlightObservable({
193
+ // datumList$,
194
+ // fullChartParams$: fullChartParams$,
195
+ // event$: event$
196
+ // }).pipe(
197
+ // shareReplay(1)
198
+ // )
199
+
200
+ const seriesLabels$ = gridSeriesLabelsObservable({
201
+ computedData$: gridComputedData$,
202
+ }).pipe(
203
+ takeUntil(destroy$),
204
+ shareReplay(1)
205
+ )
206
+
207
+ const SeriesDataMap$ = seriesDataMapObservable({
208
+ datumList$: datumList$
209
+ }).pipe(
210
+ takeUntil(destroy$),
211
+ shareReplay(1)
212
+ )
213
+
214
+ const GroupDataMap$ = groupDataMapObservable({
215
+ datumList$: datumList$
216
+ }).pipe(
217
+ takeUntil(destroy$),
218
+ shareReplay(1)
219
+ )
220
+
221
+ const visibleComputedData$ = gridVisibleComputedDataObservable({
222
+ computedData$: gridComputedData$,
223
+ }).pipe(
224
+ takeUntil(destroy$),
225
+ shareReplay(1)
226
+ )
227
+
228
+ const computedLayoutData$ = gridComputedLayoutDataObservable({
229
+ computedData$: gridComputedData$,
230
+ fullDataFormatter$: gridDataFormatter$,
231
+ layout$: layout$,
232
+ }).pipe(
233
+ takeUntil(destroy$),
234
+ shareReplay(1)
235
+ )
236
+
237
+ const visibleComputedLayoutData$ = gridVisibleComputedLayoutDataObservable({
238
+ computedLayoutData$: computedLayoutData$,
239
+ }).pipe(
240
+ takeUntil(destroy$),
241
+ shareReplay(1)
242
+ )
243
+
244
+ const computedStackedData$ = computedStackedDataObservables({
245
+ computedData$: gridComputedData$,
246
+ isSeriesSeprate$: isSeriesSeprate$
247
+ }).pipe(
248
+ shareReplay(1)
249
+ )
250
+
251
+ return {
252
+ isSeriesSeprate$,
253
+ gridContainerPosition$,
254
+ gridAxesTransform$,
255
+ gridAxesReverseTransform$,
256
+ gridGraphicTransform$,
257
+ gridGraphicReverseScale$,
258
+ gridAxesSize$,
259
+ gridHighlight$: allGridHighlight$,
260
+ seriesLabels$,
261
+ SeriesDataMap$,
262
+ GroupDataMap$,
263
+ dataFormatter$: gridDataFormatter$,
264
+ computedData$: gridComputedData$,
265
+ computedLayoutData$,
266
+ visibleComputedData$,
267
+ visibleComputedLayoutData$,
268
+ computedStackedData$
269
+ }
270
+ })
271
+ })
272
+ )
273
+ }
274
+
275
+
276
+ // 所有container位置(對應series)
277
+ export const multiGridContainerObservable = ({ computedData$, fullDataFormatter$, layout$ }: {
278
+ computedData$: Observable<ComputedDataTypeMap<'multiGrid'>>
279
+ fullDataFormatter$: Observable<DataFormatterTypeMap<'multiGrid'>>
280
+ layout$: Observable<Layout>
281
+ }): Observable<GridContainerPosition[][]> => {
282
+
283
+ return combineLatest({
284
+ computedData: computedData$,
285
+ fullDataFormatter: fullDataFormatter$,
286
+ layout: layout$,
287
+ }).pipe(
288
+ switchMap(async (d) => d),
289
+ map(data => {
290
+
291
+ const defaultGrid = data.fullDataFormatter.gridList[0] ?? DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT
292
+ const slotAmount = data.computedData.reduce((acc, gridData, gridIndex) => {
293
+ const grid = data.fullDataFormatter.gridList[gridIndex] ?? defaultGrid
294
+ const gridSlotAmount = grid.separateSeries
295
+ ? gridData.length
296
+ : data.fullDataFormatter.separateGrid
297
+ ? 1
298
+ : 0 // 如果grid和series都不分開,則slotAmount不增加(在相同的slot)
299
+ return acc + gridSlotAmount
300
+ }, 0) || 1
301
+
302
+ const gridContainerLayout = calcGridContainerLayout(data.layout, data.fullDataFormatter.container, slotAmount)
303
+
304
+ let accGridSlotIndex = 0
305
+ const gridContainerPositionArr = data.computedData.map((gridData, gridIndex) => {
306
+ const grid = data.fullDataFormatter.gridList[gridIndex] ?? defaultGrid
307
+ const seriesContainerArr = gridData.map((seriesData, seriesIndex) => {
308
+ const container = gridContainerLayout[accGridSlotIndex]
309
+ if (grid.separateSeries) {
310
+ accGridSlotIndex += 1
311
+ }
312
+ return container
313
+ })
314
+ if (!grid.separateSeries && data.fullDataFormatter.separateGrid) {
315
+ accGridSlotIndex += 1
316
+ }
317
+ return seriesContainerArr
318
+ })
319
+ // console.log('gridContainerPositionArr', gridContainerPositionArr)
320
+
321
+ // let accGridSlotIndex = 0
322
+
323
+ // const gridContainerPositionArr = data.computedData.map((gridData, gridIndex) => {
324
+ // const grid = data.fullDataFormatter.gridList[gridIndex] ?? defaultGrid
325
+
326
+ // if (grid.separateSeries) {
327
+ // // -- 依seriesSlotIndexes計算 --
328
+ // const seriesContainerArr = gridData.map((seriesData, seriesIndex) => {
329
+ // const currentSlotIndex = accGridSlotIndex + seriesIndex
330
+ // const columnIndex = currentSlotIndex % data.fullDataFormatter.container.columnAmount
331
+ // const rowIndex = Math.floor(currentSlotIndex / data.fullDataFormatter.container.columnAmount)
332
+ // const { translate, scale } = calcGridContainerPosition(data.layout, data.fullDataFormatter.container, rowIndex, columnIndex)
333
+ // return {
334
+ // slotIndex: currentSlotIndex,
335
+ // rowIndex,
336
+ // columnIndex,
337
+ // translate,
338
+ // scale,
339
+ // }
340
+ // })
341
+ // accGridSlotIndex += seriesContainerArr.length
342
+ // return seriesContainerArr
343
+ // } else {
344
+ // // -- 依grid的slotIndex計算 --
345
+ // const columnIndex = accGridSlotIndex % data.fullDataFormatter.container.columnAmount
346
+ // const rowIndex = Math.floor(accGridSlotIndex / data.fullDataFormatter.container.columnAmount)
347
+ // const seriesContainerArr = gridData.map((seriesData, seriesIndex) => {
348
+ // const { translate, scale } = calcGridContainerPosition(data.layout, data.fullDataFormatter.container, rowIndex, columnIndex)
349
+ // return {
350
+ // slotIndex: accGridSlotIndex,
351
+ // rowIndex,
352
+ // columnIndex,
353
+ // translate,
354
+ // scale,
355
+ // }
356
+ // })
357
+ // if (data.fullDataFormatter.separateGrid) {
358
+ // accGridSlotIndex += 1
359
+ // }
360
+ // return seriesContainerArr
361
+ // }
362
+ // })
363
+
364
+ return gridContainerPositionArr
365
+ }),
366
+ )
366
367
  }