@antv/g2plot
Version:
An interactive and responsive charting library
71 lines (64 loc) • 2.03 kB
text/typescript
import { Types } from '@antv/g2';
import { isArray, isNumber } from '@antv/util';
/**
* 把 padding 转换成统一的数组写法
* @param padding
*/
export function normalPadding(padding: number | number[] | 'auto'): [number, number, number, number] {
if (isNumber(padding)) {
return [padding, padding, padding, padding];
}
if (isArray(padding)) {
const length = padding.length;
if (length === 1) {
return [padding[0], padding[0], padding[0], padding[0]];
}
if (length === 2) {
return [padding[0], padding[1], padding[0], padding[1]];
}
if (length === 3) {
return [padding[0], padding[1], padding[2], padding[1]];
}
if (length === 4) {
return padding as [number, number, number, number];
}
}
return [0, 0, 0, 0];
}
/**
* 获取调整的 appendPadding
*/
export function getAdjustAppendPadding(padding: Types.ViewAppendPadding, position = 'bottom', append = 25) {
const currentAppendPadding = normalPadding(padding);
const PADDING = [
position.startsWith('top') ? append : 0,
position.startsWith('right') ? append : 0,
position.startsWith('bottom') ? append : 0,
position.startsWith('left') ? append : 0,
];
return [
currentAppendPadding[0] + PADDING[0],
currentAppendPadding[1] + PADDING[1],
currentAppendPadding[2] + PADDING[2],
currentAppendPadding[3] + PADDING[3],
];
}
/**
* 根据图表的 padding 和 appendPadding 计算出图表的最终 padding
* @param array
*/
export function resolveAllPadding(paddings: Types.ViewPadding[]) {
// 先把数组里的 padding 全部转换成 normal
const normalPaddings = paddings.map((item) => normalPadding(item));
let finalPadding = [0, 0, 0, 0];
if (normalPaddings.length > 0) {
finalPadding = finalPadding.map((item, index) => {
// 有几个 padding 数组就遍历几次,累加
normalPaddings.forEach((d, i) => {
item += normalPaddings[i][index];
});
return item;
});
}
return finalPadding;
}