in packages-rc/console-base-rc-loading/src/rc/loading/index.tsx [68:115]
export default function Loading({
message,
status,
align,
inline,
retry,
...props
}: IPropsLoading): JSX.Element {
const [timesOfRetry, setStateTimesOfRetry] = useState(0);
const handleRetry = useCallback(() => {
const times = timesOfRetry + 1;
retry?.(times);
setStateTimesOfRetry(times);
}, [retry, timesOfRetry, setStateTimesOfRetry]);
let jsxIcon: JSX.Element;
let jsxMessage: string | JSX.Element;
switch (status) {
case 'empty':
jsxIcon = <ScIcon type="empty" />;
jsxMessage = message ?? intl('message:empty');
break;
case 'error':
jsxIcon = <ScIcon type="alert-circle" />;
jsxMessage = message ?? intl(retry ? 'message:failed_retry' : 'message:failed');
if (retry) {
jsxMessage = <ScButtonRetry onClick={handleRetry}>{jsxMessage}</ScButtonRetry>;
}
break;
default:
jsxIcon = <ScIcon type="loading" />;
jsxMessage = message ?? intl('message:loading');
break;
}
return inline ? <ScLoadingInline {...props}>
{jsxIcon}
<span>{jsxMessage}</span>
</ScLoadingInline> : <ScLoading align={align} {...props}>
{jsxIcon}
<span>{jsxMessage}</span>
</ScLoading>;
}