import { useMountState } from '@ringcentral/juno'; import clsx from 'clsx'; import type { FunctionComponent } from 'react'; import React, { useState } from 'react'; import styles from './styles.scss'; export interface ButtonProps { className?: string; tooltip?: string; disabled?: boolean; onClick?(e?: React.MouseEvent): void | Promise; dataSign?: string; tabIndex?: number; } export const Button: FunctionComponent = ({ className, children, tooltip, dataSign, onClick, tabIndex = 0, disabled = false, }) => { const isMountedRef = useMountState(); const [isWaiting, setIsWaiting] = useState(false); const disableButton = disabled || isWaiting; return (
{ if (typeof onClick === 'function' && !disableButton) { setIsWaiting(true); await onClick(e); if (isMountedRef.current) { setIsWaiting(false); } } }} title={tooltip} > {children}
); };