import { useMemo } from 'react'; interface IRest { data: { filter: string | number; filterName: string; type: string | number; [key: string]: any; }[]; xField: string; yField: string; [key: string]: any; } export default ( value: (string | number)[], rest: IRest, onlyPercent: boolean, ) => { // 是否能多选过滤条件 const multiple = useMemo(() => { if (rest.data?.length) { const data = rest.data; return !(data[0].filter && data[0].type); } return true; }, [rest.data]); // 过滤后的数据 const data = useMemo(() => { if (!rest.data) return []; return rest.data.filter(item => { return value.includes(item.filter); }); }, [rest.data, value]); // 默认的配置 const config = useMemo(() => { if (multiple) { rest.seriesField = 'filterName'; } if (onlyPercent) { rest.yAxis = { ...rest.yAxis, label: { formatter: (v: number | string) => Number(v).mul(100) + '%' }, min: 0, }; } if (rest.annotations && value) { rest.annotations = rest.annotations.filter((item: any) => { return value.includes(item.position.filter); }); } return rest; }, [onlyPercent, value]); // 生成默认的tooltip格式函数 const tooltipFormatter = useMemo(() => { const seriesField = rest.seriesField; if (seriesField === 'filterName') { return { tooltip: { fields: [seriesField, rest.yField, rest.xField, 'percent'], formatter: (data: any) => { const isPercent = !!data.percent; return { name: data.filterName, value: isPercent ? Number(data[rest.yField]).mul(100) + '%' : Number(data[rest.yField])._toThousands(), }; }, }, }; } else if (!config.tooltip) { return { tooltip: { fields: [seriesField, rest.yField, rest.xField, 'percent'], formatter: (data: any) => { const isPercent = !!data.percent; return { name: data[seriesField], value: isPercent ? Number(data[rest.yField]).mul(100) + '%' : Number(data[rest.yField])._toThousands(), }; }, }, }; } return {}; }, [config]); return { multiple, data, config, tooltipFormatter, }; };