Untitled
unknown
plain_text
21 days ago
1.7 kB
3
Indexable
import { ReactNode } from 'react' import { useTheme } from '@mui/material' import { ButtonContainer, ButtonStyled, ErrorText, Loading, Progress } from './styled' import { BasicButtonProps, ButtonSizes, ButtonVariants } from './models' import { getSizeStyles, getVariantStyles } from './utils' type BaseButtonProps = BasicButtonProps & { children: ReactNode onClick?: () => void } export const Button = ({ size = ButtonSizes.Large, variant = ButtonVariants.Primary, isDisabled = false, isLoading = false, error = '', progress = 0, onClick, children, }: BaseButtonProps) => { const theme = useTheme() const sizeStyles = getSizeStyles(size, theme) const variantStyles = getVariantStyles(variant, isLoading, isDisabled, progress, error, theme) return ( <ButtonContainer onClick={!isDisabled ? onClick : undefined}> <ButtonStyled isDisabled={isDisabled} isLoading={isLoading} sx={{ ...sizeStyles, ...variantStyles, }} > {isLoading && ( <Loading className="loading" initial={{ left: '0' }} animate={{ left: '-35%' }} transition={{ duration: 1, repeat: Infinity, ease: 'linear', }} /> )} {progress > 0 && ( <Progress className="progress" initial={{ width: '0%' }} animate={{ width: `${progress}%` }} transition={{ duration: 0.5, ease: 'easeInOut', }} /> )} {children} </ButtonStyled> <ErrorText>{error}</ErrorText> </ButtonContainer> ) }
Editor is loading...
Leave a Comment