@orbcharts/core 3.0.0-alpha.33 → 3.0.0-alpha.34

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.
@@ -84,6 +84,18 @@ function resizeObservable(elem: HTMLElement | Element): Observable<DOMRectReadOn
84
84
  })
85
85
  }
86
86
 
87
+ function mergeDataFormatter <T>(dataFormatter: any, defaultDataFormatter: T, chartType: ChartType): T {
88
+ const mergedData = mergeOptionsWithDefault(dataFormatter, defaultDataFormatter)
89
+
90
+ if (chartType === 'multiGrid' && (dataFormatter as DataFormatterPartialTypeMap<'multiGrid'>).gridList != null) {
91
+ // multiGrid欄位為陣列,需要各別來merge預設值
92
+ (mergedData as DataFormatterTypeMap<'multiGrid'>).gridList = (dataFormatter as DataFormatterPartialTypeMap<'multiGrid'>).gridList.map(d => {
93
+ return mergeOptionsWithDefault(d, (defaultDataFormatter as DataFormatterTypeMap<'multiGrid'>).gridList[0])
94
+ })
95
+ }
96
+ return mergedData
97
+ }
98
+
87
99
  export const createBaseChart: CreateBaseChart = <T extends ChartType>({ defaultDataFormatter, computedDataFn, contextObserverFn }: {
88
100
  defaultDataFormatter: DataFormatterTypeMap<T>
89
101
  computedDataFn: ComputedDataFn<T>
@@ -127,12 +139,14 @@ export const createBaseChart: CreateBaseChart = <T extends ChartType>({ defaultD
127
139
  const mergedPresetWithDefault: Preset<T> = ((options) => {
128
140
  const _options = options ? options : CHART_OPTIONS_DEFAULT as ChartOptionsPartial<T>
129
141
  const preset = _options.preset ? _options.preset : {} as PresetPartial<T>
142
+
130
143
  return {
131
144
  chartParams: preset.chartParams
132
145
  ? mergeOptionsWithDefault(preset.chartParams, CHART_PARAMS_DEFAULT)
133
146
  : CHART_PARAMS_DEFAULT,
134
147
  dataFormatter: preset.dataFormatter
135
- ? mergeOptionsWithDefault(preset.dataFormatter, defaultDataFormatter)
148
+ // ? mergeOptionsWithDefault(preset.dataFormatter, defaultDataFormatter)
149
+ ? mergeDataFormatter(preset.dataFormatter, defaultDataFormatter, chartType)
136
150
  : defaultDataFormatter,
137
151
  allPluginParams: preset.allPluginParams
138
152
  ? preset.allPluginParams
@@ -147,15 +161,16 @@ export const createBaseChart: CreateBaseChart = <T extends ChartType>({ defaultD
147
161
  takeUntil(destroy$),
148
162
  startWith({}),
149
163
  map((dataFormatter) => {
150
- const mergedData = mergeOptionsWithDefault(dataFormatter, mergedPresetWithDefault.dataFormatter)
164
+ // const mergedData = mergeOptionsWithDefault(dataFormatter, mergedPresetWithDefault.dataFormatter)
151
165
 
152
- if (chartType === 'multiGrid' && (dataFormatter as DataFormatterPartialTypeMap<'multiGrid'>).gridList != null) {
153
- // multiGrid欄位為陣列,需要各別來merge預設值
154
- (mergedData as DataFormatterTypeMap<'multiGrid'>).gridList = (dataFormatter as DataFormatterPartialTypeMap<'multiGrid'>).gridList.map(d => {
155
- return mergeOptionsWithDefault(d, (mergedPresetWithDefault.dataFormatter as DataFormatterTypeMap<'multiGrid'>).gridList[0])
156
- })
157
- }
158
- return mergedData
166
+ // if (chartType === 'multiGrid' && (dataFormatter as DataFormatterPartialTypeMap<'multiGrid'>).gridList != null) {
167
+ // // multiGrid欄位為陣列,需要各別來merge預設值
168
+ // (mergedData as DataFormatterTypeMap<'multiGrid'>).gridList = (dataFormatter as DataFormatterPartialTypeMap<'multiGrid'>).gridList.map(d => {
169
+ // return mergeOptionsWithDefault(d, (mergedPresetWithDefault.dataFormatter as DataFormatterTypeMap<'multiGrid'>).gridList[0])
170
+ // })
171
+ // }
172
+ // return mergedData
173
+ return mergeDataFormatter(dataFormatter, mergedPresetWithDefault.dataFormatter, chartType)
159
174
  }),
160
175
  shareReplay(1)
161
176
  )
package/src/defaults.ts CHANGED
@@ -34,7 +34,6 @@ export const CHART_OPTIONS_DEFAULT: ChartOptionsPartial<any> = {
34
34
  // }
35
35
 
36
36
  // export const COLORS_DEFAULT = ['#67B7DC', '#6794DC', '#6771DC', '#8067DC', '#A367DC', '#C767DC', '#DC67CE', '#DC67AB', '#DC6788', '#DC6967', '#DC8C67', '#DCAF67']
37
- // @Q@ 桃園儀表板
38
37
  // ['#ff7ab9', '#66dec8', '#84c8ff', '#30ad1b', '#f8c43e', '#fa5640', '#9d79d7', '#ea4f98']
39
38
 
40
39
  export const PADDING_DEFAULT: Padding = {
@@ -82,6 +82,7 @@ export const computeMultiValueData: ComputedDataFn<'multiValue'> = (context) =>
82
82
  dataFormatter.yAxis.scaleDomain[0] === 'auto' ? yMinValue : dataFormatter.yAxis.scaleDomain[0],
83
83
  dataFormatter.yAxis.scaleDomain[1] === 'auto' ? yMaxValue : dataFormatter.yAxis.scaleDomain[1]
84
84
  ]
85
+ debugger
85
86
  // 篩選顯示狀態
86
87
  const visibleFilter = (datum: DataMultiValueDatum, rowIndex: number, columnIndex: number, context: DataFormatterContext<"multiValue">) => {
87
88
  // 如果不在scale的範圍內則為false,不再做visibleFilter的判斷
@@ -1,7 +1,7 @@
1
1
  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
- import { isObject } from '../utils/commonUtils'
4
+ import { isPlainObject } from '../utils/commonUtils'
5
5
 
6
6
  export const computeTreeData: ComputedDataFn<'tree'> = (context) => {
7
7
  const { data = [], dataFormatter, chartParams } = context
@@ -23,7 +23,7 @@ export const computeTreeData: ComputedDataFn<'tree'> = (context) => {
23
23
  try {
24
24
  // 建立樹狀結構資料
25
25
  const dataTreeObj: DataTreeObj = (function () {
26
- if (isObject(data) === true) {
26
+ if (isPlainObject(data) === true) {
27
27
  // 原本就是樹狀結構則直接複製
28
28
  return structuredClone(data) as DataTreeObj
29
29
  } else if (Array.isArray(data) === false) {
@@ -1,7 +1,7 @@
1
1
  // import * as d3 from 'd3'
2
2
 
3
- // 是否為物件
4
- export function isObject(variable: any) {
3
+ // 是否為原始物件
4
+ export function isPlainObject(variable: any) {
5
5
  return Object.prototype.toString.call(variable) === "[object Object]";
6
6
  }
7
7
 
@@ -12,7 +12,7 @@ export function isFunction(fn: any) {
12
12
 
13
13
  // 將可選的參數和預設值合併
14
14
  export function mergeOptionsWithDefault<Options extends { [key: string]: any; }> (options: {[key: string]: any}, defaultOptions: Options): Options {
15
- if (isObject(options) === false || isObject(defaultOptions) === false) {
15
+ if (isPlainObject(options) === false || isPlainObject(defaultOptions) === false) {
16
16
  return Object.assign({}, defaultOptions)
17
17
  }
18
18
  const mergeObjColumns = (_options: {[key: string]: any}, _defaultOptions: {[key: string]: any}) => {
@@ -22,12 +22,12 @@ export function mergeOptionsWithDefault<Options extends { [key: string]: any; }>
22
22
  continue
23
23
  }
24
24
  let objValue: any = undefined
25
- // 下一層的object
26
- if (isObject(_options[key]) && isObject(_defaultOptions[key])) {
25
+ // 下一層的plain object
26
+ if (isPlainObject(_options[key]) && isPlainObject(_defaultOptions[key])) {
27
27
  objValue = mergeObjColumns(_options[key], _defaultOptions[key])
28
28
  obj[key as keyof Options] = objValue
29
29
  }
30
- // 不是object直接賦值
30
+ // 不是plain object直接賦值
31
31
  else {
32
32
  obj[key as keyof Options] = _options[key]
33
33
  }
@@ -13,7 +13,7 @@ import type { ComputedDatumGrid, ComputedDataGrid } from '../types/ComputedDataG
13
13
  import type { ComputedDataMultiGrid } from '../types/ComputedDataMultiGrid'
14
14
  import type { Layout } from '../types/Layout'
15
15
  // import type { ComputedDatumMultiGrid } from '../types/ComputedDataMultiGrid'
16
- import { isObject } from './commonUtils'
16
+ import { isPlainObject } from './commonUtils'
17
17
 
18
18
  export function formatValueToLabel (value: any, valueFormatter: string | ((text: d3.NumberValue) => string)) {
19
19
  if (valueFormatter! instanceof Function == true) {
@@ -103,7 +103,7 @@ export function getMinAndMaxSeries (data: DataSeries): [number, number] {
103
103
  ? data.flat()
104
104
  : data as (DataSeriesValue | DataSeriesDatum)[]
105
105
  const arr = flatData
106
- .filter(d => (d == null || (isObject(d) && (d as DataSeriesDatum).value == null)) === false) // 過濾掉null &
106
+ .filter(d => (d == null || (isPlainObject(d) && (d as DataSeriesDatum).value == null)) === false) // 過濾掉null &
107
107
  .map(d => typeof d === 'number' ? d : d.value )
108
108
  return getMinAndMax(arr)
109
109
  }
@@ -112,7 +112,7 @@ export function getMinAndMaxSeries (data: DataSeries): [number, number] {
112
112
  export function getMinAndMaxGrid (data: DataGrid): [number, number] {
113
113
  const flatData: (DataGridValue | DataGridDatum)[] = data.flat()
114
114
  const arr = flatData
115
- .filter(d => (d == null || (isObject(d) && (d as DataGridDatum).value == null)) === false) // 過濾掉null
115
+ .filter(d => (d == null || (isPlainObject(d) && (d as DataGridDatum).value == null)) === false) // 過濾掉null
116
116
  .map(d => typeof d === 'number' ? d : d.value )
117
117
  return getMinAndMax(arr)
118
118
  }
@@ -121,7 +121,7 @@ export function getMinAndMaxGrid (data: DataGrid): [number, number] {
121
121
  export function getMinAndMaxMultiGrid (data: DataMultiGrid): [number, number] {
122
122
  const flatData: (DataGridValue | DataGridDatum)[] = data.flat().flat()
123
123
  const arr = flatData
124
- .filter(d => (d == null || (isObject(d) && (d as DataGridDatum).value == null)) === false) // 過濾掉null
124
+ .filter(d => (d == null || (isPlainObject(d) && (d as DataGridDatum).value == null)) === false) // 過濾掉null
125
125
  .map(d => typeof d === 'number' ? d : d.value )
126
126
  return getMinAndMax(arr)
127
127
  }
@@ -130,7 +130,7 @@ export function getMinAndMaxMultiGrid (data: DataMultiGrid): [number, number] {
130
130
  export function getMinAndMaxMultiValue (data: DataMultiValue, valueIndex: number = 2): [number, number] {
131
131
  const flatData: (DataMultiValueDatum | DataMultiValueValue)[] = data.flat().filter((d, i) => i == valueIndex)
132
132
  const arr = flatData
133
- .filter(d => (d == null || (isObject(d) && (d as DataMultiValueDatum).value == null)) === false) // 過濾掉null
133
+ .filter(d => (d == null || (isPlainObject(d) && (d as DataMultiValueDatum).value == null)) === false) // 過濾掉null
134
134
  .map(d => typeof d === 'number' ? d : d.value )
135
135
  return getMinAndMax(arr)
136
136
  }