import { useEffect, useState } from 'react'; import { CLS_PREFIX } from '../../common/constants'; import { DrillDownDimensionType, FilterItemType } from '../../common/type'; import { queryDrillDownDimensions } from '../../service'; import { Dropdown, Menu } from 'antd'; import { DownOutlined } from '@ant-design/icons'; import classNames from 'classnames'; type Props = { modelId: number; metricId?: number; drillDownDimension?: DrillDownDimensionType; isMetricCard?: boolean; originDimensions?: DrillDownDimensionType[]; dimensionFilters?: FilterItemType[]; onSelectDimension: (dimension?: DrillDownDimensionType) => void; }; const MAX_DIMENSION_COUNT = 20; const DEFAULT_DIMENSION_COUNT = 5; const DrillDownDimensions: React.FC = ({ modelId, metricId, drillDownDimension, isMetricCard, originDimensions, dimensionFilters, onSelectDimension, }) => { const [dimensions, setDimensions] = useState([]); const prefixCls = `${CLS_PREFIX}-drill-down-dimensions`; const initData = async () => { const res = await queryDrillDownDimensions(modelId, metricId); setDimensions( res.data.dimensions .filter( dimension => !dimensionFilters?.some(filter => filter.name === dimension.name) && (!originDimensions || !originDimensions.some(item => item.id === dimension.id)) ) .slice(0, MAX_DIMENSION_COUNT) ); }; useEffect(() => { initData(); }, []); const cancelDrillDown = () => { onSelectDimension(undefined); }; const defaultDimensions = dimensions.slice(0, DEFAULT_DIMENSION_COUNT); const drillDownDimensionsSectionClass = classNames(`${prefixCls}-section`, { [`${prefixCls}-metric-card`]: isMetricCard, }); return (
推荐下钻维度:
{defaultDimensions.map((dimension, index) => { const itemNameClass = classNames(`${prefixCls}-content-item-name`, { [`${prefixCls}-content-item-active`]: drillDownDimension?.id === dimension.id, }); return (
{ onSelectDimension( drillDownDimension?.id === dimension.id ? undefined : dimension ); }} > {dimension.name} {index !== defaultDimensions.length - 1 && }
); })} {dimensions.length > DEFAULT_DIMENSION_COUNT && (
{dimensions.slice(DEFAULT_DIMENSION_COUNT).map(dimension => { const itemNameClass = classNames({ [`${prefixCls}-menu-item-active`]: drillDownDimension?.id === dimension.id, }); return ( { onSelectDimension(dimension); }} > {dimension.name} ); })} } > 更多
)} {drillDownDimension && (
取消下钻
)}
); }; export default DrillDownDimensions;