You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.6 KiB
111 lines
3.6 KiB
import { isFunction, isNumber, isObject } from '@antv/util';
|
|
import { parseSize } from './size';
|
|
/**
|
|
* Format value with multiple types into a function returns number.
|
|
* @param defaultValue default value when value is invalid
|
|
* @param value value to be formatted
|
|
* @returns formatted result, a function returns number
|
|
*/
|
|
export function formatNumberFn(defaultValue, value) {
|
|
let resultFunc;
|
|
if (isFunction(value)) {
|
|
resultFunc = value;
|
|
}
|
|
else if (isNumber(value)) {
|
|
// value is number
|
|
resultFunc = () => value;
|
|
}
|
|
else {
|
|
// value is not number and function
|
|
resultFunc = () => defaultValue;
|
|
}
|
|
return resultFunc;
|
|
}
|
|
/**
|
|
* Format size config with multiple types into a function returns number
|
|
* @param defaultValue default value when value is invalid
|
|
* @param value value to be formatted
|
|
* @param resultIsNumber whether returns number
|
|
* @returns formatted result, a function returns number
|
|
*/
|
|
export function formatSizeFn(defaultValue, value, resultIsNumber = true) {
|
|
if (!value && value !== 0) {
|
|
return (d) => {
|
|
const { size } = d.data || {};
|
|
if (size) {
|
|
if (Array.isArray(size))
|
|
return resultIsNumber ? Math.max(...size) || defaultValue : size;
|
|
if (isObject(size) &&
|
|
size.width &&
|
|
size.height) {
|
|
return resultIsNumber
|
|
? Math.max(size.width, size.height) || defaultValue
|
|
: [size.width, size.height];
|
|
}
|
|
return size;
|
|
}
|
|
return defaultValue;
|
|
};
|
|
}
|
|
if (isFunction(value))
|
|
return value;
|
|
if (isNumber(value))
|
|
return () => value;
|
|
if (Array.isArray(value)) {
|
|
return () => {
|
|
if (resultIsNumber)
|
|
return Math.max(...value) || defaultValue;
|
|
return value;
|
|
};
|
|
}
|
|
if (isObject(value) && value.width && value.height) {
|
|
return () => {
|
|
if (resultIsNumber)
|
|
return Math.max(value.width, value.height) || defaultValue;
|
|
return [value.width, value.height];
|
|
};
|
|
}
|
|
return () => defaultValue;
|
|
}
|
|
/**
|
|
* format the props nodeSize and nodeSpacing to a function
|
|
* @param nodeSize
|
|
* @param nodeSpacing
|
|
* @returns
|
|
*/
|
|
export const formatNodeSizeToNumber = (nodeSize, nodeSpacing, defaultNodeSize = 10) => {
|
|
let nodeSizeFunc;
|
|
const nodeSpacingFunc = typeof nodeSpacing === 'function' ? nodeSpacing : () => nodeSpacing || 0;
|
|
if (!nodeSize) {
|
|
nodeSizeFunc = (d) => {
|
|
var _a, _b, _c;
|
|
if ((_a = d.data) === null || _a === void 0 ? void 0 : _a.bboxSize)
|
|
return (_b = d.data) === null || _b === void 0 ? void 0 : _b.bboxSize;
|
|
if ((_c = d.data) === null || _c === void 0 ? void 0 : _c.size) {
|
|
const dataSize = d.data.size;
|
|
if (Array.isArray(dataSize))
|
|
return dataSize;
|
|
if (isObject(dataSize))
|
|
return [dataSize.width, dataSize.height];
|
|
return dataSize;
|
|
}
|
|
return defaultNodeSize;
|
|
};
|
|
}
|
|
else if (Array.isArray(nodeSize)) {
|
|
nodeSizeFunc = (d) => nodeSize;
|
|
}
|
|
else if (isFunction(nodeSize)) {
|
|
nodeSizeFunc = nodeSize;
|
|
}
|
|
else {
|
|
nodeSizeFunc = (d) => nodeSize;
|
|
}
|
|
const func = (d) => {
|
|
const nodeSize = nodeSizeFunc(d);
|
|
const nodeSpacing = nodeSpacingFunc(d);
|
|
return Math.max(...parseSize(nodeSize)) + nodeSpacing;
|
|
};
|
|
return func;
|
|
};
|
|
//# sourceMappingURL=function.js.map
|