@@ -168,48 +168,62 @@ export const getPath = (config: RenderOptions) => {
168
168
* @returns
169
169
*/
170
170
export const getMeta = (
171
- options : Pick < ScatterOptions , 'meta' | 'xField' | 'yField' | 'data' > ,
172
- dims : string [ ] = [ 'x' , 'y' ]
171
+ options : Pick < ScatterOptions , 'meta' | 'xField' | 'yField' | 'data' >
173
172
) : ScatterOptions [ 'meta' ] => {
174
173
const { meta = { } , xField, yField, data } = options ;
175
174
const xFieldValue = data [ 0 ] [ xField ] ;
176
175
const yFieldValue = data [ 0 ] [ yField ] ;
177
176
const xIsPositiveNumber = xFieldValue > 0 ;
178
177
const yIsPositiveNumber = yFieldValue > 0 ;
179
178
180
- const getValue = ( field : string , type : 'min' | 'max' , axis : 'x' | 'y' ) => {
181
- const customValue = get ( meta , [ field , type ] ) ;
182
- if ( isNumber ( customValue ) ) {
183
- return customValue ;
179
+ /**
180
+ * 获得对应字段的 min max scale 配置
181
+ */
182
+ function getMetaMinMax ( field : string , axis : 'x' | 'y' ) {
183
+ const fieldMeta = get ( meta , [ field ] ) ;
184
+
185
+ function getCustomValue ( type : 'min' | 'max' ) {
186
+ return get ( fieldMeta , type ) ;
184
187
}
188
+
189
+ const range = { } ;
190
+
185
191
if ( axis === 'x' ) {
186
- const rangeX = {
187
- min : xIsPositiveNumber ? 0 : xFieldValue * 2 ,
188
- max : xIsPositiveNumber ? xFieldValue * 2 : 0 ,
189
- } ;
190
- return rangeX [ type ] ;
192
+ if ( isNumber ( xFieldValue ) ) {
193
+ if ( ! isNumber ( getCustomValue ( 'min' ) ) ) {
194
+ range [ 'min' ] = xIsPositiveNumber ? 0 : xFieldValue * 2 ;
195
+ }
196
+
197
+ if ( ! isNumber ( getCustomValue ( 'max' ) ) ) {
198
+ range [ 'max' ] = xIsPositiveNumber ? xFieldValue * 2 : 0 ;
199
+ }
200
+ }
201
+
202
+ return range ;
191
203
}
192
- const rangeY = {
193
- min : yIsPositiveNumber ? 0 : yFieldValue * 2 ,
194
- max : yIsPositiveNumber ? yFieldValue * 2 : 0 ,
195
- } ;
196
- return rangeY [ type ] ;
197
- } ;
204
+
205
+ if ( isNumber ( yFieldValue ) ) {
206
+ if ( ! isNumber ( getCustomValue ( 'min' ) ) ) {
207
+ range [ 'min' ] = yIsPositiveNumber ? 0 : yFieldValue * 2 ;
208
+ }
209
+
210
+ if ( ! isNumber ( getCustomValue ( 'max' ) ) ) {
211
+ range [ 'max' ] = yIsPositiveNumber ? yFieldValue * 2 : 0 ;
212
+ }
213
+ }
214
+
215
+ return range ;
216
+ }
217
+
198
218
return {
199
219
...meta ,
200
- [ xField ] : dims . includes ( 'x' )
201
- ? {
202
- ...meta [ xField ] ,
203
- min : getValue ( xField , 'min' , 'x' ) ,
204
- max : getValue ( xField , 'max' , 'x' ) ,
205
- }
206
- : { } ,
207
- [ yField ] : dims . includes ( 'y' )
208
- ? {
209
- ...meta [ yField ] ,
210
- min : getValue ( yField , 'min' , 'y' ) ,
211
- max : getValue ( yField , 'max' , 'y' ) ,
212
- }
213
- : { } ,
220
+ [ xField ] : {
221
+ ...meta [ xField ] ,
222
+ ...getMetaMinMax ( xField , 'x' ) ,
223
+ } ,
224
+ [ yField ] : {
225
+ ...meta [ yField ] ,
226
+ ...getMetaMinMax ( yField , 'y' ) ,
227
+ } ,
214
228
} ;
215
229
} ;
0 commit comments