split-button.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import classNames from 'classnames'
  2. import Button from './button'
  3. import {
  4. Dropdown,
  5. DropdownItem,
  6. DropdownMenu,
  7. DropdownToggle,
  8. } from './dropdown-menu'
  9. import MaterialIcon from '@/shared/components/material-icon'
  10. import type { SplitButtonProps } from '@/features/ui/components/types/split-button-props'
  11. export function SplitButton({
  12. accessibilityLabel,
  13. align,
  14. id,
  15. items,
  16. text,
  17. variant,
  18. ...props
  19. }: SplitButtonProps) {
  20. const buttonClassName = classNames('split-button')
  21. return (
  22. <div>
  23. <Dropdown align={align}>
  24. <Button className={buttonClassName} variant={variant} {...props}>
  25. <span className="split-button-content">{text}</span>
  26. </Button>
  27. <DropdownToggle
  28. bsPrefix="dropdown-button-toggle"
  29. id={id}
  30. variant={variant}
  31. {...props}
  32. >
  33. <MaterialIcon
  34. className="split-button-caret"
  35. type="expand_more"
  36. accessibilityLabel={accessibilityLabel}
  37. />
  38. </DropdownToggle>
  39. <DropdownMenu>
  40. {items.map((item, index) => (
  41. <li key={index}>
  42. <DropdownItem eventKey={item.eventKey}>{item.label}</DropdownItem>
  43. </li>
  44. ))}
  45. </DropdownMenu>
  46. </Dropdown>
  47. </div>
  48. )
  49. }