fix(component): loading in button should be white for primary variant (#10073)

close AF-2178
This commit is contained in:
CatsJuice
2025-02-13 08:55:11 +00:00
parent 312f9b1ecd
commit 7c04ef4f4e
2 changed files with 19 additions and 3 deletions

View File

@@ -6,7 +6,7 @@ import type {
ReactElement,
SVGAttributes,
} from 'react';
import { cloneElement, forwardRef, useCallback } from 'react';
import { cloneElement, forwardRef, useCallback, useMemo } from 'react';
import { useAutoFocus } from '../../hooks';
import { Loading } from '../loading';
@@ -78,16 +78,28 @@ const IconSlot = ({
icon,
loading,
className,
variant,
...attrs
}: {
icon?: ReactElement<SVGAttributes<SVGElement>>;
loading?: boolean;
variant?: ButtonType;
} & HTMLAttributes<HTMLElement>) => {
const showLoadingHere = loading !== undefined;
const visible = icon || loading;
const loadingStrokeColor = useMemo(() => {
const usePureWhite =
variant &&
(['primary', 'error', 'success'] as ButtonType[]).includes(variant);
return usePureWhite ? '#fff' : undefined;
}, [variant]);
return visible ? (
<div className={clsx(styles.icon, className)} {...attrs}>
{showLoadingHere && loading ? <Loading size="100%" /> : null}
{showLoadingHere && loading ? (
<Loading size="100%" strokeColor={loadingStrokeColor} />
) : null}
{icon && !loading
? cloneElement(icon, {
width: '100%',
@@ -174,6 +186,7 @@ export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
loading={loading}
className={prefixClassName}
style={prefixStyle}
variant={variant}
/>
{children ? (
<span