97 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import { presetPrimaryColors } from '@ant-design/colors';
 | |
| import devWarning from '../vc-util/devWarning';
 | |
| import type { CircleProps } from './Circle';
 | |
| import type { ProgressProps } from './props';
 | |
| 
 | |
| export function validProgress(progress: number | undefined) {
 | |
|   if (!progress || progress < 0) {
 | |
|     return 0;
 | |
|   }
 | |
|   if (progress > 100) {
 | |
|     return 100;
 | |
|   }
 | |
|   return progress;
 | |
| }
 | |
| 
 | |
| export function getSuccessPercent({ success, successPercent }: ProgressProps) {
 | |
|   let percent = successPercent;
 | |
|   /** @deprecated Use `percent` instead */
 | |
|   if (success && 'progress' in success) {
 | |
|     devWarning(
 | |
|       false,
 | |
|       'Progress',
 | |
|       '`success.progress` is deprecated. Please use `success.percent` instead.',
 | |
|     );
 | |
|     percent = success.progress;
 | |
|   }
 | |
|   if (success && 'percent' in success) {
 | |
|     percent = success.percent;
 | |
|   }
 | |
|   return percent;
 | |
| }
 | |
| 
 | |
| export function getPercentage({ percent, success, successPercent }: ProgressProps) {
 | |
|   const realSuccessPercent = validProgress(getSuccessPercent({ success, successPercent }));
 | |
|   return [realSuccessPercent, validProgress(validProgress(percent) - realSuccessPercent)];
 | |
| }
 | |
| 
 | |
| export function getStrokeColor({
 | |
|   success = {},
 | |
|   strokeColor,
 | |
| }: Partial<CircleProps>): (string | Record<string, string>)[] {
 | |
|   const { strokeColor: successColor } = success;
 | |
|   return [successColor || presetPrimaryColors.green, strokeColor || null!];
 | |
| }
 | |
| 
 | |
| export const getSize = (
 | |
|   size: ProgressProps['size'],
 | |
|   type: ProgressProps['type'] | 'step',
 | |
|   extra?: {
 | |
|     steps?: number;
 | |
|     strokeWidth?: number;
 | |
|   },
 | |
| ): { width: number; height: number } => {
 | |
|   let width = -1;
 | |
|   let height = -1;
 | |
|   if (type === 'step') {
 | |
|     const steps = extra!.steps!;
 | |
|     const strokeWidth = extra!.strokeWidth!;
 | |
|     if (typeof size === 'string' || typeof size === 'undefined') {
 | |
|       width = size === 'small' ? 2 : 14;
 | |
|       height = strokeWidth ?? 8;
 | |
|     } else if (typeof size === 'number') {
 | |
|       [width, height] = [size, size];
 | |
|     } else {
 | |
|       [width = 14, height = 8] = size;
 | |
|     }
 | |
|     width *= steps;
 | |
|   } else if (type === 'line') {
 | |
|     const strokeWidth = extra?.strokeWidth;
 | |
|     if (typeof size === 'string' || typeof size === 'undefined') {
 | |
|       height = strokeWidth || (size === 'small' ? 6 : 8);
 | |
|     } else if (typeof size === 'number') {
 | |
|       [width, height] = [size, size];
 | |
|     } else {
 | |
|       [width = -1, height = 8] = size;
 | |
|     }
 | |
|   } else if (type === 'circle' || type === 'dashboard') {
 | |
|     if (typeof size === 'string' || typeof size === 'undefined') {
 | |
|       [width, height] = size === 'small' ? [60, 60] : [120, 120];
 | |
|     } else if (typeof size === 'number') {
 | |
|       [width, height] = [size, size];
 | |
|     } else {
 | |
|       if (process.env.NODE_ENV !== 'production') {
 | |
|         devWarning(
 | |
|           false,
 | |
|           'Progress',
 | |
|           'Type "circle" and "dashboard" do not accept array as `size`, please use number or preset size instead.',
 | |
|         );
 | |
|       }
 | |
| 
 | |
|       width = size[0] ?? size[1] ?? 120;
 | |
|       height = size[0] ?? size[1] ?? 120;
 | |
|     }
 | |
|   }
 | |
|   return { width, height };
 | |
| };
 |