@orbcharts/core 3.0.0-alpha.36 → 3.0.0-alpha.38

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. package/dist/orbcharts-core.es.js +1753 -1664
  2. package/dist/orbcharts-core.umd.js +2 -2
  3. package/dist/src/grid/gridObservables.d.ts +1 -1
  4. package/dist/src/series/seriesObservables.d.ts +1 -8
  5. package/dist/src/tree/treeObservables.d.ts +13 -0
  6. package/dist/src/types/ChartParams.d.ts +1 -1
  7. package/dist/src/types/ComputedData.d.ts +13 -0
  8. package/dist/src/types/ComputedDataGrid.d.ts +2 -5
  9. package/dist/src/types/ComputedDataMultiValue.d.ts +2 -2
  10. package/dist/src/types/ComputedDataRelationship.d.ts +2 -2
  11. package/dist/src/types/ComputedDataTree.d.ts +2 -2
  12. package/dist/src/types/ContextObserverGrid.d.ts +1 -1
  13. package/dist/src/types/ContextObserverTree.d.ts +6 -0
  14. package/dist/src/types/DataFormatterMultiGrid.d.ts +1 -3
  15. package/dist/src/types/DataFormatterMultiValue.d.ts +0 -1
  16. package/dist/src/types/DataFormatterSeries.d.ts +0 -2
  17. package/dist/src/types/DataFormatterTree.d.ts +1 -0
  18. package/dist/src/types/DataMultiValue.d.ts +1 -0
  19. package/dist/src/types/DataRelationship.d.ts +1 -0
  20. package/dist/src/types/DataTree.d.ts +2 -0
  21. package/dist/src/types/Event.d.ts +30 -38
  22. package/dist/src/utils/observables.d.ts +7 -4
  23. package/package.json +1 -1
  24. package/src/defaults.ts +5 -3
  25. package/src/grid/createGridContextObserver.ts +3 -3
  26. package/src/grid/gridObservables.ts +1 -1
  27. package/src/multiGrid/multiGridObservables.ts +3 -3
  28. package/src/multiValue/computeMultiValueData.ts +7 -2
  29. package/src/relationship/computeRelationshipData.ts +3 -0
  30. package/src/series/createSeriesContextObserver.ts +1 -1
  31. package/src/series/seriesObservables.ts +8 -7
  32. package/src/tree/computeTreeData.ts +31 -9
  33. package/src/tree/createTreeContextObserver.ts +44 -0
  34. package/src/tree/treeObservables.ts +95 -0
  35. package/src/types/ChartParams.ts +1 -1
  36. package/src/types/ComputedData.ts +18 -1
  37. package/src/types/ComputedDataGrid.ts +5 -5
  38. package/src/types/ComputedDataMultiValue.ts +2 -3
  39. package/src/types/ComputedDataRelationship.ts +2 -2
  40. package/src/types/ComputedDataTree.ts +2 -2
  41. package/src/types/ContextObserverGrid.ts +1 -1
  42. package/src/types/ContextObserverMultiGrid.ts +1 -1
  43. package/src/types/ContextObserverTree.ts +6 -1
  44. package/src/types/DataFormatterMultiGrid.ts +2 -2
  45. package/src/types/DataFormatterMultiValue.ts +1 -1
  46. package/src/types/DataFormatterSeries.ts +2 -2
  47. package/src/types/DataFormatterTree.ts +1 -0
  48. package/src/types/DataMultiValue.ts +1 -0
  49. package/src/types/DataRelationship.ts +1 -0
  50. package/src/types/DataTree.ts +2 -0
  51. package/src/types/Event.ts +85 -46
  52. package/src/utils/d3Utils.ts +0 -1
  53. package/src/utils/observables.ts +60 -77
@@ -21,7 +21,7 @@ export type ChartParamsPartial = Partial<ChartParams | {
21
21
  }>;
22
22
  styles: Partial<Styles>;
23
23
  }>;
24
- export type HighlightTarget = 'series' | 'group' | 'datum' | 'none';
24
+ export type HighlightTarget = 'series' | 'group' | 'category' | 'datum' | 'none';
25
25
  export interface Styles {
26
26
  textSize: number;
27
27
  unhighlightedOpacity: number;
@@ -24,5 +24,18 @@ export interface ComputedDatumSeriesValue {
24
24
  seriesIndex: number;
25
25
  seriesLabel: string;
26
26
  }
27
+ export interface ComputedDatumGridValue {
28
+ gridIndex: number;
29
+ color: string;
30
+ seriesIndex: number;
31
+ seriesLabel: string;
32
+ groupIndex: number;
33
+ groupLabel: string;
34
+ }
35
+ export interface ComputedDatumCategoryValue {
36
+ color: string;
37
+ categoryIndex: number;
38
+ categoryLabel: string | null;
39
+ }
27
40
  export type ComputedDataTypeMap<T extends ChartType> = T extends 'series' ? ComputedDataSeries : T extends 'grid' ? ComputedDataGrid : T extends 'multiGrid' ? ComputedDataMultiGrid : T extends 'multiValue' ? ComputedDataMultiValue : T extends 'relationship' ? ComputedDataRelationship : T extends 'tree' ? ComputedDataTree : ComputedDatumBase;
28
41
  export type ComputedDatumTypeMap<T extends ChartType> = T extends 'series' ? ComputedDatumSeries : T extends 'grid' ? ComputedDatumGrid : T extends 'multiGrid' ? ComputedDatumGrid : T extends 'multiValue' ? ComputedDatumMultiValue : T extends 'relationship' ? ComputedNode : T extends 'tree' ? ComputedDataTree : unknown;
@@ -1,9 +1,6 @@
1
- import { ComputedDatumBase, ComputedDatumSeriesValue } from './ComputedData';
1
+ import { ComputedDatumBase, ComputedDatumGridValue } from './ComputedData';
2
2
 
3
- export interface ComputedDatumGrid extends ComputedDatumBase, ComputedDatumSeriesValue {
4
- gridIndex: number;
5
- groupIndex: number;
6
- groupLabel: string;
3
+ export interface ComputedDatumGrid extends ComputedDatumBase, ComputedDatumGridValue {
7
4
  axisX: number;
8
5
  axisY: number;
9
6
  axisYFromZero: number;
@@ -1,6 +1,6 @@
1
- import { ComputedDatumBase } from './ComputedData';
1
+ import { ComputedDatumBase, ComputedDatumCategoryValue } from './ComputedData';
2
2
 
3
3
  export type ComputedDataMultiValue = ComputedDatumMultiValue[][];
4
- export interface ComputedDatumMultiValue extends ComputedDatumBase {
4
+ export interface ComputedDatumMultiValue extends ComputedDatumBase, ComputedDatumCategoryValue {
5
5
  axis: number;
6
6
  }
@@ -1,10 +1,10 @@
1
- import { ComputedDatumBase } from './ComputedData';
1
+ import { ComputedDatumBase, ComputedDatumCategoryValue } from './ComputedData';
2
2
 
3
3
  export type ComputedDataRelationship = {
4
4
  nodes: ComputedNode[];
5
5
  edges: ComputedEdge[];
6
6
  };
7
- export interface ComputedNode extends ComputedDatumBase {
7
+ export interface ComputedNode extends ComputedDatumBase, ComputedDatumCategoryValue {
8
8
  startNodes: ComputedNode[];
9
9
  startNodeIds: string[];
10
10
  endNodes: ComputedNode[];
@@ -1,6 +1,6 @@
1
- import { ComputedDatumBase } from './ComputedData';
1
+ import { ComputedDatumBase, ComputedDatumCategoryValue } from './ComputedData';
2
2
 
3
- export interface ComputedDataTree extends ComputedDatumBase {
3
+ export interface ComputedDataTree extends ComputedDatumBase, ComputedDatumCategoryValue {
4
4
  level: number;
5
5
  seq: number;
6
6
  children?: ComputedDataTree[];
@@ -16,7 +16,7 @@ export interface ContextObserverGridDetail {
16
16
  height: number;
17
17
  }>;
18
18
  gridHighlight$: Observable<string[]>;
19
- existedSeriesLabels$: Observable<string[]>;
19
+ existSeriesLabels$: Observable<string[]>;
20
20
  SeriesDataMap$: Observable<Map<string, ComputedDatumGrid[]>>;
21
21
  GroupDataMap$: Observable<Map<string, ComputedDatumGrid[]>>;
22
22
  visibleComputedData$: Observable<ComputedDataGrid>;
@@ -1,4 +1,10 @@
1
+ import { Observable } from 'rxjs';
1
2
  import { ContextObserverBase } from './ContextObserver';
3
+ import { ComputedDataTree } from './ComputedDataTree';
2
4
 
3
5
  export interface ContextObserverTree<PluginParams> extends ContextObserverBase<'tree', PluginParams> {
6
+ treeHighlight$: Observable<string[]>;
7
+ existCategoryLabels$: Observable<string[]>;
8
+ CategoryDataMap$: Observable<Map<string, ComputedDataTree[]>>;
9
+ visibleComputedData$: Observable<ComputedDataTree>;
4
10
  }
@@ -1,13 +1,11 @@
1
- import { VisibleFilter, DataFormatterBase, DataFormatterBasePartial } from './DataFormatter';
2
1
  import { DataFormatterGridGrid, DataFormatterGridGridPartial, DataFormatterGridContainer } from './DataFormatterGrid';
2
+ import { DataFormatterBase, DataFormatterBasePartial } from './DataFormatter';
3
3
 
4
4
  export interface DataFormatterMultiGrid extends DataFormatterBase<'multiGrid'> {
5
- visibleFilter: VisibleFilter<'multiGrid'>;
6
5
  gridList: Array<DataFormatterGridGrid>;
7
6
  container: DataFormatterMultiGridContainer;
8
7
  }
9
8
  export interface DataFormatterMultiGridPartial extends DataFormatterBasePartial<'multiGrid'> {
10
- visibleFilter?: VisibleFilter<'multiGrid'>;
11
9
  gridList?: Array<DataFormatterGridGridPartial>;
12
10
  container?: Partial<DataFormatterMultiGridContainer>;
13
11
  }
@@ -12,5 +12,4 @@ export interface DataFormatterMultiValuePartial extends DataFormatterBasePartial
12
12
  yAxis?: Partial<DataFormatterValueAxis>;
13
13
  }
14
14
  export interface DataFormatterMultiValueMultiValue {
15
- unitLabel: string;
16
15
  }
@@ -3,12 +3,10 @@ import { DataFormatterBase, DataFormatterBasePartial, VisibleFilter } from './Da
3
3
 
4
4
  export interface DataFormatterSeries extends DataFormatterBase<'series'> {
5
5
  visibleFilter: VisibleFilter<'series'>;
6
- unitLabel: string;
7
6
  seriesLabels: string[];
8
7
  sort: ((a: DataSeriesDatum | DataSeriesValue, b: DataSeriesDatum | number) => number) | null;
9
8
  }
10
9
  export interface DataFormatterSeriesPartial extends DataFormatterBasePartial<'series'> {
11
- unitLabel?: string;
12
10
  seriesLabels?: string[];
13
11
  sort?: ((a: DataSeriesDatum | DataSeriesValue, b: DataSeriesDatum | number) => number) | null;
14
12
  }
@@ -2,5 +2,6 @@ import { DataFormatterBase, VisibleFilter } from './DataFormatter';
2
2
 
3
3
  export interface DataFormatterTree extends DataFormatterBase<'tree'> {
4
4
  visibleFilter: VisibleFilter<'tree'>;
5
+ categoryLabels: string[];
5
6
  }
6
7
  export type DataFormatterTreePartial = Partial<DataFormatterTree>;
@@ -3,4 +3,5 @@ import { DatumBase, DatumValue } from './Data';
3
3
  export type DataMultiValue = (DataMultiValueDatum | DataMultiValueValue)[][];
4
4
  export type DataMultiValueValue = number;
5
5
  export interface DataMultiValueDatum extends DatumBase, DatumValue {
6
+ categoryLabel?: string;
6
7
  }
@@ -12,6 +12,7 @@ export type DataRelationshipList = [
12
12
  export interface Node extends DatumBase {
13
13
  id: string;
14
14
  value?: number;
15
+ categoryLabel?: string;
15
16
  }
16
17
  export interface Edge extends DatumBase {
17
18
  start: string;
@@ -5,9 +5,11 @@ export interface DataTreeObj extends DatumBase {
5
5
  id: string;
6
6
  value?: number;
7
7
  children?: DataTreeObj[];
8
+ categoryLabel?: string;
8
9
  }
9
10
  export interface DataTreeDatum extends DatumBase {
10
11
  id: string;
11
12
  value?: number;
12
13
  parent?: string;
14
+ categoryLabel?: string;
13
15
  }
@@ -1,64 +1,56 @@
1
1
  import { ChartType } from './Chart';
2
- import { ComputedDatumBase } from './ComputedData';
3
2
  import { ComputedDataSeries, ComputedDatumSeries } from './ComputedDataSeries';
4
3
  import { ComputedDataGrid, ComputedDatumGrid } from './ComputedDataGrid';
5
4
  import { ComputedDataMultiGrid } from './ComputedDataMultiGrid';
6
- import { ComputedDatumMultiValue } from './ComputedDataMultiValue';
7
- import { ComputedNode } from './ComputedDataRelationship';
5
+ import { ComputedDataMultiValue, ComputedDatumMultiValue } from './ComputedDataMultiValue';
6
+ import { ComputedDataRelationship, ComputedNode } from './ComputedDataRelationship';
8
7
  import { ComputedDataTree } from './ComputedDataTree';
9
8
  import { HighlightTarget } from './ChartParams';
10
9
 
11
10
  export type EventName = 'click' | 'mouseover' | 'mousemove' | 'mouseout' | 'dragstart' | 'drag' | 'dragend' | 'resize' | 'transitionMove' | 'transitionEnd';
12
- export type EventTypeMap<T extends ChartType> = T extends 'series' ? EventSeries : T extends 'grid' ? EventGrid : T extends 'multiGrid' ? EventMultiGrid : T extends 'multiValue' ? EventMultiValue : T extends 'relationship' ? EventRelationship : T extends 'tree' ? EventTree : EventBase;
13
- export interface EventBase {
11
+ export type EventTypeMap<T extends ChartType> = T extends 'series' ? EventSeries : T extends 'grid' ? EventGrid : T extends 'multiGrid' ? EventMultiGrid : T extends 'multiValue' ? EventMultiValue : T extends 'relationship' ? EventRelationship : T extends 'tree' ? EventTree : EventBase<any>;
12
+ export interface EventBase<T extends ChartType> {
13
+ type: T;
14
14
  eventName: EventName;
15
15
  pluginName: string;
16
- type: ChartType;
17
16
  event: MouseEvent | undefined;
18
17
  highlightTarget: HighlightTarget;
19
- datum: ComputedDatumBase | null;
20
18
  tween?: number;
21
19
  }
22
- export interface EventSeries extends EventBase {
23
- type: 'series';
24
- data: ComputedDataSeries;
25
- series: ComputedDatumSeries[];
20
+ export interface EventBaseSeriesValue<DatumType, DataType> {
21
+ data: DataType;
22
+ series: DatumType[];
26
23
  seriesIndex: number;
27
24
  seriesLabel: string;
28
- datum: ComputedDatumSeries | null;
25
+ datum: DatumType | null;
29
26
  }
30
- export interface EventGrid extends EventBase {
31
- type: 'grid';
32
- data: ComputedDataGrid;
33
- series: ComputedDatumGrid[];
34
- seriesIndex: number;
35
- seriesLabel: string;
36
- groups: ComputedDatumGrid[];
37
- groupIndex: number;
38
- groupLabel: string;
39
- datum: ComputedDatumGrid | null;
40
- }
41
- export interface EventMultiGrid extends EventBase {
42
- type: 'multiGrid';
43
- data: ComputedDataMultiGrid;
27
+ export interface EventBaseGridValue<DatumType, DataType> {
28
+ data: DataType;
44
29
  gridIndex: number;
45
- series: ComputedDatumGrid[];
30
+ series: DatumType[];
46
31
  seriesIndex: number;
47
32
  seriesLabel: string;
48
- group: ComputedDatumGrid[];
33
+ groups: DatumType[];
49
34
  groupIndex: number;
50
35
  groupLabel: string;
51
- datum: ComputedDatumGrid | null;
36
+ datum: DatumType | null;
37
+ }
38
+ export interface EventBaseCategoryValue<DatumType, DataType> {
39
+ data: DataType;
40
+ category: DatumType[];
41
+ categoryIndex: number;
42
+ categoryLabel: string;
43
+ datum: DatumType | null;
44
+ }
45
+ export interface EventSeries extends EventBase<'series'>, EventBaseSeriesValue<ComputedDatumSeries, ComputedDataSeries> {
46
+ }
47
+ export interface EventGrid extends EventBase<'grid'>, EventBaseGridValue<ComputedDatumGrid, ComputedDataGrid> {
48
+ }
49
+ export interface EventMultiGrid extends EventBase<'multiGrid'>, EventBaseGridValue<ComputedDatumGrid, ComputedDataMultiGrid> {
52
50
  }
53
- export interface EventMultiValue extends EventBase {
54
- type: 'multiValue';
55
- datum: ComputedDatumMultiValue | null;
51
+ export interface EventMultiValue extends EventBase<'multiValue'>, EventBaseCategoryValue<ComputedDatumMultiValue, ComputedDataMultiValue> {
56
52
  }
57
- export interface EventRelationship extends EventBase {
58
- type: 'relationship';
59
- datum: ComputedNode | null;
53
+ export interface EventRelationship extends EventBase<'relationship'>, EventBaseCategoryValue<ComputedNode, ComputedDataRelationship> {
60
54
  }
61
- export interface EventTree extends EventBase {
62
- type: 'tree';
63
- datum: ComputedDataTree | null;
55
+ export interface EventTree extends EventBase<'tree'>, EventBaseCategoryValue<ComputedDataTree, ComputedDataTree> {
64
56
  }
@@ -1,14 +1,17 @@
1
1
  import { Subject, Observable } from 'rxjs';
2
- import { ChartType, ChartParams, ComputedDatumTypeMap } from '../types';
2
+ import { ChartParams, ComputedDatumTypeMap } from '../types';
3
3
 
4
4
  export declare const highlightObservable: ({ datumList$, fullChartParams$, event$ }: {
5
- datumList$: Observable<ComputedDatumTypeMap<"series" | "grid">[]>;
5
+ datumList$: Observable<ComputedDatumTypeMap<"series" | "grid" | "multiValue" | "relationship" | "tree">[]>;
6
6
  fullChartParams$: Observable<ChartParams>;
7
7
  event$: Subject<any>;
8
8
  }) => Observable<string[]>;
9
- export declare const seriesDataMapObservable: <DatumType extends ComputedDatumTypeMap<ChartType>>({ datumList$ }: {
9
+ export declare const seriesDataMapObservable: <DatumType extends ComputedDatumTypeMap<"series" | "grid">>({ datumList$ }: {
10
10
  datumList$: Observable<DatumType[]>;
11
11
  }) => Observable<Map<string, DatumType[]>>;
12
- export declare const groupDataMapObservable: <DatumType extends ComputedDatumTypeMap<ChartType>>({ datumList$ }: {
12
+ export declare const groupDataMapObservable: <DatumType extends ComputedDatumTypeMap<"grid">>({ datumList$ }: {
13
+ datumList$: Observable<DatumType[]>;
14
+ }) => Observable<Map<string, DatumType[]>>;
15
+ export declare const categoryDataMapObservable: <DatumType extends ComputedDatumTypeMap<"multiValue" | "relationship" | "tree">>({ datumList$ }: {
13
16
  datumList$: Observable<DatumType[]>;
14
17
  }) => Observable<Map<string, DatumType[]>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orbcharts/core",
3
- "version": "3.0.0-alpha.36",
3
+ "version": "3.0.0-alpha.38",
4
4
  "description": "OrbCharts is an open source chart library based on d3.js and rx.js",
5
5
  "author": "Blue Planet Inc.",
6
6
  "license": "Apache-2.0",
package/src/defaults.ts CHANGED
@@ -58,7 +58,8 @@ export const CHART_PARAMS_DEFAULT: ChartParams = {
58
58
  colors: {
59
59
  light: {
60
60
  series: ['#67B7DC', '#6794DC', '#6771DC', '#8067DC', '#A367DC', '#C767DC', '#DC67CE', '#DC67AB', '#DC6788', '#DC6967', '#DC8C67', '#DCAF67'],
61
- primary: '#454545',
61
+ // primary: '#454545',
62
+ primary: '#1b1e23',
62
63
  secondary: '#e1e1e1',
63
64
  white: '#ffffff',
64
65
  background: '#ffffff'
@@ -139,7 +140,7 @@ export const DATA_FORMATTER_SERIES_DEFAULT: DataFormatterSeries = {
139
140
  // ...DATA_FORMATTER_WITH_VALUE,
140
141
  type: 'series',
141
142
  visibleFilter: (datum, rowIndex, columnIndex, context) => true,
142
- unitLabel: '',
143
+ // unitLabel: '',
143
144
  seriesLabels: [],
144
145
  // mapSeries: (datum, rowIndex, columnIndex, { data, dataFormatter }) => {
145
146
  // const seriesIndex = rowIndex >= dataFormatter.seriesLabels.length
@@ -200,7 +201,7 @@ export const DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT: DataFormatterMultiGridGrid
200
201
 
201
202
  export const DATA_FORMATTER_MULTI_GRID_DEFAULT: DataFormatterMultiGrid = {
202
203
  type: 'multiGrid',
203
- visibleFilter: (datum, rowIndex, columnIndex, context) => true,
204
+ // visibleFilter: (datum, rowIndex, columnIndex, context) => true,
204
205
  gridList: [
205
206
  {
206
207
  ...DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT
@@ -226,6 +227,7 @@ export const DATA_FORMATTER_TREE_DEFAULT: DataFormatterTree = {
226
227
  type: 'tree',
227
228
  visibleFilter: (datum, rowIndex, columnIndex, context) => true,
228
229
  // labelFormat: (datum: any) => (datum && datum.label) ?? '',
230
+ categoryLabels: []
229
231
  }
230
232
 
231
233
  export const DATA_FORMATTER_RELATIONAL_DEFAULT: DataFormatterRelationship = {
@@ -10,7 +10,7 @@ import {
10
10
  gridGraphicTransformObservable,
11
11
  gridGraphicReverseScaleObservable,
12
12
  gridAxesSizeObservable,
13
- existedSeriesLabelsObservable,
13
+ existSeriesLabelsObservable,
14
14
  gridVisibleComputedDataObservable,
15
15
  isSeriesPositionSeprateObservable,
16
16
  gridContainerObservable } from './gridObservables'
@@ -79,7 +79,7 @@ export const createGridContextObserver: ContextObserverFn<'grid'> = ({ subject,
79
79
  shareReplay(1)
80
80
  )
81
81
 
82
- const existedSeriesLabels$ = existedSeriesLabelsObservable({
82
+ const existSeriesLabels$ = existSeriesLabelsObservable({
83
83
  computedData$: observer.computedData$,
84
84
  })
85
85
 
@@ -116,7 +116,7 @@ export const createGridContextObserver: ContextObserverFn<'grid'> = ({ subject,
116
116
  gridGraphicReverseScale$,
117
117
  gridAxesSize$,
118
118
  gridHighlight$,
119
- existedSeriesLabels$,
119
+ existSeriesLabels$,
120
120
  SeriesDataMap$,
121
121
  GroupDataMap$,
122
122
  visibleComputedData$,
@@ -380,7 +380,7 @@ export const gridAxesSizeObservable = ({ fullDataFormatter$, layout$ }: {
380
380
  // return highlightObservable ({ datumList$, fullChartParams$, event$ })
381
381
  // }
382
382
 
383
- export const existedSeriesLabelsObservable = ({ computedData$ }: { computedData$: Observable<ComputedDataTypeMap<'grid'>> }) => {
383
+ export const existSeriesLabelsObservable = ({ computedData$ }: { computedData$: Observable<ComputedDataTypeMap<'grid'>> }) => {
384
384
  return computedData$.pipe(
385
385
  map(data => {
386
386
  return data
@@ -36,7 +36,7 @@ import {
36
36
  gridGraphicReverseScaleObservable,
37
37
  gridAxesReverseTransformObservable,
38
38
  gridAxesSizeObservable,
39
- existedSeriesLabelsObservable,
39
+ existSeriesLabelsObservable,
40
40
  gridVisibleComputedDataObservable,
41
41
  isSeriesPositionSeprateObservable,
42
42
  gridContainerObservable } from '../grid/gridObservables'
@@ -128,7 +128,7 @@ export const multiGridEachDetailObservable = ({ fullDataFormatter$, computedData
128
128
  shareReplay(1)
129
129
  )
130
130
 
131
- const existedSeriesLabels$ = existedSeriesLabelsObservable({
131
+ const existSeriesLabels$ = existSeriesLabelsObservable({
132
132
  computedData$: gridComputedData$,
133
133
  })
134
134
 
@@ -160,7 +160,7 @@ export const multiGridEachDetailObservable = ({ fullDataFormatter$, computedData
160
160
  gridGraphicReverseScale$,
161
161
  gridAxesSize$,
162
162
  gridHighlight$,
163
- existedSeriesLabels$,
163
+ existSeriesLabels$,
164
164
  SeriesDataMap$,
165
165
  GroupDataMap$,
166
166
  visibleComputedData$,
@@ -24,6 +24,7 @@ export const computeMultiValueData: ComputedDataFn<'multiValue'> = (context) =>
24
24
  description: '',
25
25
  // tooltipContent: '',
26
26
  data: {},
27
+ categoryLabel: '',
27
28
  value: _d
28
29
  }
29
30
  : {
@@ -32,6 +33,7 @@ export const computeMultiValueData: ComputedDataFn<'multiValue'> = (context) =>
32
33
  description: _d.description ?? '',
33
34
  // tooltipContent: _d.tooltipContent ?? '',
34
35
  data: _d.data ?? {},
36
+ categoryLabel: _d.categoryLabel ??'',
35
37
  value: _d.value
36
38
  }
37
39
 
@@ -82,7 +84,7 @@ export const computeMultiValueData: ComputedDataFn<'multiValue'> = (context) =>
82
84
  dataFormatter.yAxis.scaleDomain[0] === 'auto' ? yMinValue : dataFormatter.yAxis.scaleDomain[0],
83
85
  dataFormatter.yAxis.scaleDomain[1] === 'auto' ? yMaxValue : dataFormatter.yAxis.scaleDomain[1]
84
86
  ]
85
- debugger
87
+
86
88
  // 篩選顯示狀態
87
89
  const visibleFilter = (datum: DataMultiValueDatum, rowIndex: number, columnIndex: number, context: DataFormatterContext<"multiValue">) => {
88
90
  // 如果不在scale的範圍內則為false,不再做visibleFilter的判斷
@@ -115,9 +117,12 @@ export const computeMultiValueData: ComputedDataFn<'multiValue'> = (context) =>
115
117
  // tooltipContent: _d.tooltipContent ? _d.tooltipContent : dataFormatter.tooltipContentFormat(_d, i, _i, context),
116
118
  data: _d.data,
117
119
  value: _d.value,
120
+ categoryIndex: 0, // @Q@ 未完成
121
+ categoryLabel: '', // @Q@ 未完成
118
122
  // valueLabel: formatValueToLabel(_d.value, dataFormatter.multiValue[_i].valueFormat),
119
123
  axis: _i == 0 ? xScale(_d.value) : yScale(_d.value),
120
- visible
124
+ visible,
125
+ color: '' // @Q@ 未完成
121
126
  }
122
127
  return computedDatum
123
128
  })
@@ -36,6 +36,9 @@ export const computeRelationshipData: ComputedDataFn<'relationship'> = (context)
36
36
  // tooltipContent: node.tooltipContent ? node.tooltipContent : dataFormatter.tooltipContentFormat(node, 0, i, context), // 0代表node
37
37
  data: node.data ?? {},
38
38
  value: node.value ?? 0,
39
+ categoryIndex: 0, // @Q@ 未完成
40
+ categoryLabel: '', // @Q@ 未完成
41
+ color: '', // @Q@ 未完成
39
42
  startNodes: [], // 後面再取得資料
40
43
  startNodeIds: [], // 後面再取得資料
41
44
  endNodes: [], // 後面再取得資料
@@ -1,9 +1,9 @@
1
1
  import { shareReplay } from 'rxjs'
2
2
  import type { ContextObserverFn } from '../types'
3
3
  import {
4
- highlightObservable,
5
4
  seriesDataMapObservable,
6
5
  groupDataMapObservable } from '../utils/observables'
6
+ import { highlightObservable } from '../utils/observables'
7
7
 
8
8
  export const createSeriesContextObserver: ContextObserverFn<'series'> = ({ subject, observer }) => {
9
9
 
@@ -11,13 +11,14 @@ import {
11
11
  Observable } from 'rxjs'
12
12
  import type {
13
13
  ChartParams,
14
+ ComputedDatumSeries,
14
15
  ComputedDataTypeMap } from '../types'
15
16
  import { highlightObservable } from '../utils/observables'
16
17
 
17
- export const seriesHighlightObservable = ({ computedData$, fullChartParams$, event$ }: {
18
- computedData$: Observable<ComputedDataTypeMap<'series'>>
19
- fullChartParams$: Observable<ChartParams>
20
- event$: Subject<any>
21
- }): Observable<string[]> => {
22
- return highlightObservable ({ datumList$: computedData$, fullChartParams$, event$ })
23
- }
18
+ // export const seriesHighlightObservable = ({ computedData$, fullChartParams$, event$ }: {
19
+ // computedData$: Observable<ComputedDataTypeMap<'series'>>
20
+ // fullChartParams$: Observable<ChartParams>
21
+ // event$: Subject<any>
22
+ // }): Observable<string[]> => {
23
+ // return highlightObservable ({ datumList$: computedData$, fullChartParams$, event$ })
24
+ // }
@@ -2,15 +2,24 @@ import type { DataTree, DataTreeObj, DataTreeDatum } from '../types/DataTree'
2
2
  import type { ComputedDataFn } from '../types/ComputedData'
3
3
  import type { ComputedDataTree } from '../types/ComputedDataTree'
4
4
  import { isPlainObject } from '../utils/commonUtils'
5
+ import { seriesColorPredicate } from '../utils/orbchartsUtils'
5
6
 
6
7
  export const computeTreeData: ComputedDataFn<'tree'> = (context) => {
7
8
  const { data = [], dataFormatter, chartParams } = context
8
9
 
10
+ // <categoryLabel, categoryIndex>
11
+ const CategoryIndexMap = new Map<string, number>(
12
+ dataFormatter.categoryLabels.map((label, index) => [label, index])
13
+ )
14
+
9
15
  let computedBranchData: ComputedDataTree = {
10
16
  id: '',
11
17
  index: 0,
12
18
  label: '',
13
19
  description: '',
20
+ categoryIndex: 0,
21
+ categoryLabel: '',
22
+ color: '',
14
23
  visible: true,
15
24
  // tooltipContent: '',
16
25
  data: {},
@@ -56,6 +65,7 @@ export const computeTreeData: ComputedDataFn<'tree'> = (context) => {
56
65
  data: root.data,
57
66
  // tooltipContent: root.tooltipContent,
58
67
  value: root.value,
68
+ categoryLabel: root.categoryLabel,
59
69
  children: (ChildrenMap.get(root.id) ?? []).map(d => {
60
70
  // 遞迴
61
71
  return createBranchData(d)
@@ -73,23 +83,35 @@ export const computeTreeData: ComputedDataFn<'tree'> = (context) => {
73
83
 
74
84
  let index = 0
75
85
 
76
- const formatBranchData = (branchRoot: DataTreeObj, level: number, seq: number): ComputedDataTree => {
86
+ const formatBranchData = (branch: DataTreeObj, level: number, seq: number): ComputedDataTree => {
77
87
  const childLayer = level + 1
78
- const visible = dataFormatter.visibleFilter(branchRoot, level, seq, context)
88
+ const visible = dataFormatter.visibleFilter(branch, level, seq, context)
89
+ const categoryLabel: string | null = branch.categoryLabel ?? null
90
+ let categoryIndex = 0
91
+ if (categoryLabel != null) {
92
+ if (!CategoryIndexMap.has(categoryLabel)) {
93
+ CategoryIndexMap.set(categoryLabel, CategoryIndexMap.size)
94
+ }
95
+ categoryIndex = CategoryIndexMap.get(categoryLabel) ?? 0
96
+ }
97
+
79
98
  const currentIndex = index
80
99
  index++
81
100
  return {
82
- id: branchRoot.id,
101
+ id: branch.id,
83
102
  index: currentIndex,
84
103
  level,
85
104
  seq,
86
- label: branchRoot.label ?? '',
87
- description: branchRoot.description ?? '',
88
- data: branchRoot.data ?? {},
89
- // tooltipContent: branchRoot.tooltipContent ? branchRoot.tooltipContent : dataFormatter.tooltipContentFormat(branchRoot, level, seq, context),
90
- value: branchRoot.value,
105
+ label: branch.label ?? '',
106
+ description: branch.description ?? '',
107
+ categoryIndex,
108
+ categoryLabel,
109
+ color: seriesColorPredicate(categoryIndex, chartParams),
110
+ data: branch.data ?? {},
111
+ // tooltipContent: branch.tooltipContent ? branch.tooltipContent : dataFormatter.tooltipContentFormat(branch, level, seq, context),
112
+ value: branch.value,
91
113
  visible,
92
- children: (branchRoot.children ?? []).map((d, i) => {
114
+ children: (branch.children ?? []).map((d, i) => {
93
115
  // 遞迴
94
116
  return formatBranchData(d, childLayer, i)
95
117
  })
@@ -1,12 +1,56 @@
1
+ import { map, shareReplay } from 'rxjs'
1
2
  import type { ContextObserverFn } from '../types'
3
+ import { highlightObservable, categoryDataMapObservable } from '../utils/observables'
4
+ import {
5
+ nodeListObservable,
6
+ existCategoryLabelsObservable,
7
+ treeVisibleComputedDataObservable
8
+ } from './treeObservables'
2
9
 
3
10
  export const createTreeContextObserver: ContextObserverFn<'tree'> = ({ subject, observer }) => {
4
11
 
12
+ const nodeList$ = nodeListObservable({
13
+ computedData$: observer.computedData$
14
+ }).pipe(
15
+ shareReplay(1)
16
+ )
17
+
18
+ const treeHighlight$ = highlightObservable({
19
+ datumList$: nodeList$,
20
+ fullChartParams$: observer.fullChartParams$,
21
+ event$: subject.event$
22
+ }).pipe(
23
+ shareReplay(1)
24
+ )
25
+
26
+ const existCategoryLabels$ = existCategoryLabelsObservable({
27
+ nodeList$,
28
+ fullDataFormatter$: observer.fullDataFormatter$
29
+ }).pipe(
30
+ shareReplay(1)
31
+ )
32
+
33
+ const CategoryDataMap$ = categoryDataMapObservable({
34
+ datumList$: nodeList$
35
+ }).pipe(
36
+ shareReplay(1)
37
+ )
38
+
39
+ const visibleComputedData$ = treeVisibleComputedDataObservable({
40
+ computedData$: observer.computedData$
41
+ }).pipe(
42
+ shareReplay(1)
43
+ )
44
+
5
45
  return {
6
46
  fullParams$: observer.fullParams$,
7
47
  fullChartParams$: observer.fullChartParams$,
8
48
  fullDataFormatter$: observer.fullDataFormatter$,
9
49
  computedData$: observer.computedData$,
10
50
  layout$: observer.layout$,
51
+ treeHighlight$,
52
+ existCategoryLabels$,
53
+ CategoryDataMap$,
54
+ visibleComputedData$
11
55
  }
12
56
  }