@orbcharts/core 3.0.0-alpha.29 → 3.0.0-alpha.31
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/orbcharts-core.es.js +687 -685
- package/dist/orbcharts-core.umd.js +2 -2
- package/dist/src/defaults.d.ts +2 -1
- package/dist/src/multiGrid/multiGridObservables.d.ts +14 -1
- package/dist/src/types/ContextObserverMultiGrid.d.ts +1 -1
- package/dist/src/types/DataFormatterMultiGrid.d.ts +11 -2
- package/package.json +1 -1
- package/src/base/createBaseChart.ts +12 -2
- package/src/defaults.ts +12 -11
- package/src/multiGrid/createMultiGridContextObserver.ts +3 -3
- package/src/multiGrid/multiGridObservables.ts +59 -1
- package/src/types/ContextObserverMultiGrid.ts +1 -1
- package/src/types/DataFormatterMultiGrid.ts +15 -2
@@ -3,8 +3,17 @@ import { DataFormatterGrid } from './DataFormatterGrid';
|
|
3
3
|
|
4
4
|
export interface DataFormatterMultiGrid extends DataFormatterBase<'multiGrid'> {
|
5
5
|
visibleFilter: VisibleFilter<'multiGrid'>;
|
6
|
-
multiGrid: Array<
|
6
|
+
multiGrid: Array<DataFormatterMultiGridMultiGrid>;
|
7
|
+
container: DataFormatterMultiGridContainer;
|
7
8
|
}
|
8
9
|
export interface DataFormatterMultiGridPartial extends DataFormatterBasePartial<'multiGrid'> {
|
9
|
-
multiGrid?: Array<Partial<
|
10
|
+
multiGrid?: Array<Partial<DataFormatterMultiGridMultiGrid>>;
|
11
|
+
}
|
12
|
+
export interface DataFormatterMultiGridMultiGrid extends DataFormatterGrid {
|
13
|
+
slotIndex: number;
|
14
|
+
}
|
15
|
+
export interface DataFormatterMultiGridContainer {
|
16
|
+
gap: number;
|
17
|
+
rowAmount: number;
|
18
|
+
columnAmount: number;
|
10
19
|
}
|
package/package.json
CHANGED
@@ -40,6 +40,7 @@ import type {
|
|
40
40
|
ChartOptionsPartial,
|
41
41
|
DataTypeMap,
|
42
42
|
DataFormatterTypeMap,
|
43
|
+
DataFormatterPartialTypeMap,
|
43
44
|
DataFormatterBase,
|
44
45
|
DataFormatterContext,
|
45
46
|
Layout,
|
@@ -141,14 +142,23 @@ export const createBaseChart: CreateBaseChart = <T extends ChartType>({ defaultD
|
|
141
142
|
})(options)
|
142
143
|
|
143
144
|
|
144
|
-
// console.log('mergedOptions', mergedOptions)
|
145
145
|
|
146
146
|
const sharedData$ = chartSubject.data$.pipe(shareReplay(1))
|
147
147
|
const shareAndMergedDataFormatter$ = chartSubject.dataFormatter$
|
148
148
|
.pipe(
|
149
149
|
takeUntil(destroy$),
|
150
150
|
startWith({}),
|
151
|
-
map((
|
151
|
+
map((dataFormatter) => {
|
152
|
+
const mergedData = mergeOptionsWithDefault(dataFormatter, mergedPresetWithDefault.dataFormatter)
|
153
|
+
|
154
|
+
if (chartType === 'multiGrid' && (dataFormatter as DataFormatterPartialTypeMap<'multiGrid'>).multiGrid != null) {
|
155
|
+
// multiGrid欄位為陣列,需要各別來merge預設值
|
156
|
+
(mergedData as DataFormatterTypeMap<'multiGrid'>).multiGrid = (dataFormatter as DataFormatterPartialTypeMap<'multiGrid'>).multiGrid.map(d => {
|
157
|
+
return mergeOptionsWithDefault(d, (mergedPresetWithDefault.dataFormatter as DataFormatterTypeMap<'multiGrid'>).multiGrid[0])
|
158
|
+
})
|
159
|
+
}
|
160
|
+
return mergedData
|
161
|
+
}),
|
152
162
|
shareReplay(1)
|
153
163
|
)
|
154
164
|
const shareAndMergedChartParams$ = chartSubject.chartParams$
|
package/src/defaults.ts
CHANGED
@@ -10,7 +10,7 @@ import type { DataRelationship } from './types/DataRelationship'
|
|
10
10
|
import type { DataFormatterBase, DataFormatterValueAxis, DataFormatterGroupAxis } from './types/DataFormatter'
|
11
11
|
import type { DataFormatterSeries } from './types/DataFormatterSeries'
|
12
12
|
import type { DataFormatterGrid } from './types/DataFormatterGrid'
|
13
|
-
import type { DataFormatterMultiGrid } from './types/DataFormatterMultiGrid'
|
13
|
+
import type { DataFormatterMultiGrid, DataFormatterMultiGridMultiGrid } from './types/DataFormatterMultiGrid'
|
14
14
|
import type { DataFormatterMultiValue } from './types/DataFormatterMultiValue'
|
15
15
|
import type { DataFormatterTree } from './types/DataFormatterTree'
|
16
16
|
import type { DataFormatterRelationship } from './types/DataFormatterRelationship'
|
@@ -180,24 +180,25 @@ export const DATA_FORMATTER_GRID_DEFAULT: DataFormatterGrid = {
|
|
180
180
|
// },
|
181
181
|
}
|
182
182
|
|
183
|
+
export const DATA_FORMATTER_MULTI_GRID_MULTI_GRID_DEFAULT: DataFormatterMultiGridMultiGrid = {
|
184
|
+
...DATA_FORMATTER_GRID_DEFAULT,
|
185
|
+
slotIndex: 0,
|
186
|
+
}
|
187
|
+
|
183
188
|
export const DATA_FORMATTER_MULTI_GRID_DEFAULT: DataFormatterMultiGrid = {
|
184
189
|
type: 'multiGrid',
|
185
190
|
visibleFilter: (datum, rowIndex, columnIndex, context) => true,
|
186
191
|
multiGrid: [
|
187
192
|
{
|
188
|
-
...
|
193
|
+
...DATA_FORMATTER_MULTI_GRID_MULTI_GRID_DEFAULT
|
189
194
|
},
|
190
|
-
// // @Q@ 暫時性的邏輯,之後colorsPredicate移除掉後,這邊也要移除(但colors使用的seriesIndex要接續前一組grid)
|
191
|
-
// {
|
192
|
-
// ...DATA_FORMATTER_GRID_DEFAULT,
|
193
|
-
// colorsPredicate: (datum, rowIndex, columnIndex, { data, chartParams, dataFormatter }) => {
|
194
|
-
// const seriesIndex = dataFormatter.grid.seriesType === 'row' ? rowIndex : columnIndex
|
195
|
-
// const reverseIndex = chartParams.colors[chartParams.colorScheme].series.length - 1 - seriesIndex
|
196
|
-
// return chartParams.colors[chartParams.colorScheme].series[reverseIndex]
|
197
|
-
// },
|
198
|
-
// }
|
199
195
|
],
|
200
196
|
// visibleGroupRange: null,
|
197
|
+
container: {
|
198
|
+
gap: 120,
|
199
|
+
rowAmount: 1,
|
200
|
+
columnAmount: 1
|
201
|
+
}
|
201
202
|
}
|
202
203
|
|
203
204
|
export const DATA_FORMATTER_MULTI_VALUE_DEFAULT: DataFormatterMultiValue = {
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import {
|
2
2
|
shareReplay } from 'rxjs'
|
3
3
|
import type { ContextObserverFn } from '../types'
|
4
|
-
import {
|
4
|
+
import { multiGridEachDetailObservable } from './multiGridObservables'
|
5
5
|
|
6
6
|
export const createMultiGridContextObserver: ContextObserverFn<'multiGrid'> = ({ subject, observer }) => {
|
7
7
|
|
8
|
-
const
|
8
|
+
const multiGridEachDetail$ = multiGridEachDetailObservable({
|
9
9
|
fullDataFormatter$: observer.fullDataFormatter$,
|
10
10
|
computedData$: observer.computedData$,
|
11
11
|
layout$: observer.layout$,
|
@@ -21,6 +21,6 @@ export const createMultiGridContextObserver: ContextObserverFn<'multiGrid'> = ({
|
|
21
21
|
fullDataFormatter$: observer.fullDataFormatter$,
|
22
22
|
computedData$: observer.computedData$,
|
23
23
|
layout$: observer.layout$,
|
24
|
-
|
24
|
+
multiGridEachDetail$
|
25
25
|
}
|
26
26
|
}
|
@@ -24,6 +24,7 @@ import type {
|
|
24
24
|
DataFormatterContext,
|
25
25
|
DataFormatterValueAxis,
|
26
26
|
DataFormatterGroupAxis,
|
27
|
+
DataFormatterMultiGridContainer,
|
27
28
|
EventMultiGrid,
|
28
29
|
HighlightTarget,
|
29
30
|
Layout,
|
@@ -41,7 +42,7 @@ import {
|
|
41
42
|
gridAxesSizeObservable,
|
42
43
|
gridVisibleComputedDataObservable } from '../grid/gridObservables'
|
43
44
|
|
44
|
-
export const
|
45
|
+
export const multiGridEachDetailObservable = ({ fullDataFormatter$, computedData$, layout$, fullChartParams$, event$ }: {
|
45
46
|
fullDataFormatter$: Observable<DataFormatterTypeMap<'multiGrid'>>
|
46
47
|
computedData$: Observable<ComputedDataTypeMap<'multiGrid'>>
|
47
48
|
layout$: Observable<Layout>
|
@@ -151,4 +152,61 @@ export const multiGridObservable = ({ fullDataFormatter$, computedData$, layout$
|
|
151
152
|
})
|
152
153
|
})
|
153
154
|
)
|
155
|
+
}
|
156
|
+
|
157
|
+
interface GridContainerBox {
|
158
|
+
slotIndex: number
|
159
|
+
rowIndex: number
|
160
|
+
columnIndex: number
|
161
|
+
translate: [number, number]
|
162
|
+
scale: [number, number]
|
163
|
+
}
|
164
|
+
|
165
|
+
// 每一個grid的container位置
|
166
|
+
export const multiGridContainerObservable = ({ fullDataFormatter$, layout$, fullChartParams$ }: {
|
167
|
+
fullDataFormatter$: Observable<DataFormatterTypeMap<'multiGrid'>>
|
168
|
+
layout$: Observable<Layout>
|
169
|
+
fullChartParams$: Observable<ChartParams>
|
170
|
+
}) => {
|
171
|
+
function calcBox (layout: Layout, container: DataFormatterMultiGridContainer, rowIndex: number, columnIndex: number) {
|
172
|
+
const { gap, rowAmount, columnAmount } = container
|
173
|
+
const width = (layout.width / columnAmount) - (gap / 2)
|
174
|
+
const height = (layout.height / rowAmount) - (gap / 2)
|
175
|
+
const x = columnIndex * width + (columnIndex * gap)
|
176
|
+
const y = rowIndex * height + (columnIndex * gap)
|
177
|
+
const translate: [number, number] = [x, y]
|
178
|
+
const scale: [number, number] = [width / layout.width, height / layout.height]
|
179
|
+
|
180
|
+
return {
|
181
|
+
translate,
|
182
|
+
scale
|
183
|
+
}
|
184
|
+
}
|
185
|
+
|
186
|
+
const multiGridContainer$ = combineLatest({
|
187
|
+
fullDataFormatter: fullDataFormatter$,
|
188
|
+
layout: layout$,
|
189
|
+
fullChartParams: fullChartParams$
|
190
|
+
}).pipe(
|
191
|
+
switchMap(async (d) => d),
|
192
|
+
map(data => {
|
193
|
+
data.fullDataFormatter.container.rowAmount
|
194
|
+
const boxArr: GridContainerBox[] = data.fullDataFormatter.multiGrid.map((grid, gridIndex) => {
|
195
|
+
const columnIndex = grid.slotIndex % data.fullDataFormatter.container.columnAmount
|
196
|
+
const rowIndex = Math.floor(grid.slotIndex / data.fullDataFormatter.container.columnAmount)
|
197
|
+
const { translate, scale } = calcBox(data.layout, data.fullDataFormatter.container, rowIndex, columnIndex)
|
198
|
+
|
199
|
+
return {
|
200
|
+
slotIndex: grid.slotIndex,
|
201
|
+
rowIndex,
|
202
|
+
columnIndex,
|
203
|
+
translate,
|
204
|
+
scale,
|
205
|
+
}
|
206
|
+
})
|
207
|
+
return boxArr
|
208
|
+
}),
|
209
|
+
)
|
210
|
+
|
211
|
+
return multiGridContainer$
|
154
212
|
}
|
@@ -4,7 +4,7 @@ import type { ComputedDataGrid, ComputedDatumGrid } from './ComputedDataGrid'
|
|
4
4
|
import type { TransformData } from './TransformData'
|
5
5
|
|
6
6
|
export interface ContextObserverMultiGrid<PluginParams> extends ContextObserverBase<'multiGrid', PluginParams> {
|
7
|
-
|
7
|
+
multiGridEachDetail$: Observable<MultiGridObservableAll[]>
|
8
8
|
}
|
9
9
|
|
10
10
|
export interface MultiGridObservableAll {
|
@@ -10,12 +10,25 @@ import type { AxisPosition } from './Axis'
|
|
10
10
|
|
11
11
|
export interface DataFormatterMultiGrid extends DataFormatterBase<'multiGrid'> {
|
12
12
|
visibleFilter: VisibleFilter<'multiGrid'>
|
13
|
-
multiGrid: Array<
|
13
|
+
multiGrid: Array<DataFormatterMultiGridMultiGrid>
|
14
14
|
// visibleGroupRange: [number, number] | null
|
15
|
+
container: DataFormatterMultiGridContainer
|
15
16
|
}
|
16
17
|
|
17
18
|
export interface DataFormatterMultiGridPartial extends DataFormatterBasePartial<'multiGrid'> {
|
18
|
-
multiGrid?: Array<Partial<
|
19
|
+
multiGrid?: Array<Partial<DataFormatterMultiGridMultiGrid>>
|
20
|
+
}
|
21
|
+
|
22
|
+
// 比grid還多出來的額外參數
|
23
|
+
export interface DataFormatterMultiGridMultiGrid extends DataFormatterGrid {
|
24
|
+
slotIndex: number
|
25
|
+
}
|
26
|
+
|
27
|
+
// container
|
28
|
+
export interface DataFormatterMultiGridContainer {
|
29
|
+
gap: number
|
30
|
+
rowAmount: number
|
31
|
+
columnAmount: number
|
19
32
|
}
|
20
33
|
|
21
34
|
// multiGrid欄位
|