export default function Loading()

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>;
}