split-button.tsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. align,
  13. id,
  14. items,
  15. text,
  16. variant,
  17. ...props
  18. }: SplitButtonProps) {
  19. const buttonClassName = classNames('split-button')
  20. return (
  21. <div>
  22. <Dropdown align={align}>
  23. <Button className={buttonClassName} variant={variant} {...props}>
  24. <span className="split-button-content">{text}</span>
  25. </Button>
  26. <DropdownToggle
  27. bsPrefix="dropdown-button-toggle"
  28. id={id}
  29. variant={variant}
  30. {...props}
  31. >
  32. <MaterialIcon className="split-button-caret" type="expand_more" />
  33. </DropdownToggle>
  34. <DropdownMenu>
  35. {items.map((item, index) => (
  36. <DropdownItem key={index} eventKey={item.eventKey}>
  37. {item.label}
  38. </DropdownItem>
  39. ))}
  40. </DropdownMenu>
  41. </Dropdown>
  42. </div>
  43. )
  44. }