button.tsx 736 B

1234567891011121314151617181920212223242526272829303132
  1. import { Button as BootstrapButton } from 'react-bootstrap-5'
  2. import type { ButtonProps } from '@/features/ui/components/types/button-props'
  3. const sizeClasses = new Map<ButtonProps['size'], string>([
  4. ['small', 'btn-sm'],
  5. ['default', ''],
  6. ['large', 'btn-lg'],
  7. ])
  8. // TODO: Display a spinner when `loading` is true
  9. function Button({
  10. variant = 'primary',
  11. size = 'default',
  12. disabled = false,
  13. loading = false,
  14. children,
  15. }: ButtonProps) {
  16. const sizeClass = sizeClasses.get(size)
  17. return (
  18. <BootstrapButton
  19. variant={variant}
  20. className={sizeClass}
  21. disabled={disabled}
  22. {...(loading ? { 'data-ol-loading': true } : null)}
  23. >
  24. {children}
  25. </BootstrapButton>
  26. )
  27. }
  28. export default Button