icon-button.tsx 941 B

123456789101112131415161718192021222324252627282930313233
  1. import { useTranslation } from 'react-i18next'
  2. import MaterialIcon from '@/shared/components/material-icon'
  3. import Button from './button'
  4. import type { IconButtonProps } from '@/features/ui/components/types/icon-button-props'
  5. import classNames from 'classnames'
  6. export default function IconButton({
  7. icon,
  8. isLoading = false,
  9. size = 'default',
  10. ...props
  11. }: IconButtonProps) {
  12. const { t } = useTranslation()
  13. const iconButtonClassName = `icon-button-${size}`
  14. const iconSizeClassName =
  15. size === 'large'
  16. ? 'leading-trailing-icon-large'
  17. : 'leading-trailing-icon-small'
  18. const materialIconClassName = classNames(iconSizeClassName, {
  19. 'button-content-hidden': isLoading,
  20. })
  21. return (
  22. <Button className={iconButtonClassName} isLoading={isLoading} {...props}>
  23. <MaterialIcon
  24. accessibilityLabel={t('add')}
  25. className={materialIconClassName}
  26. type={icon}
  27. />
  28. </Button>
  29. )
  30. }