import { Progress, Tooltip } from 'antd'; import React, { memo, useEffect, useMemo } from 'react'; const RenderProgress = memo( (props: { defaultOpen?: boolean; percent: number; steps?: number; download?: boolean; label?: React.ReactNode; successPercent?: number; successColor?: string; }) => { const { defaultOpen, percent, download, label, successPercent } = props; const [open, setOpen] = React.useState(false); const strokeColor = useMemo(() => { if (download) { return 'var(--ant-color-primary)'; } if (percent <= 50) { return 'var(--ant-color-success)'; } if (percent <= 80) { return 'var(--ant-color-warning)'; } return 'var(--ant-color-error)'; }, [percent]); useEffect(() => { setOpen(defaultOpen || false); }, [defaultOpen]); const renderProgress = useMemo(() => { return ( { return ( {percent}% ); }} percent={percent} success={{ percent: successPercent, strokeColor: 'var(--ant-geekblue-3)' }} strokeColor={strokeColor} > ); }, [percent, successPercent, strokeColor]); return ( <> {label ? ( {renderProgress} ) : ( renderProgress )} ); } ); export default RenderProgress;