BookmarkFolderItemControl.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import React, { useState } from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import {
  4. Dropdown, DropdownItem, DropdownMenu, DropdownToggle,
  5. } from 'reactstrap';
  6. export const BookmarkFolderItemControl: React.FC<{
  7. children?: React.ReactNode
  8. onClickMoveToRoot?: () => Promise<void>
  9. onClickRename: () => void
  10. onClickDelete: () => void
  11. }> = ({
  12. children,
  13. onClickMoveToRoot,
  14. onClickRename,
  15. onClickDelete,
  16. }): JSX.Element => {
  17. const { t } = useTranslation();
  18. const [isOpen, setIsOpen] = useState(false);
  19. return (
  20. <Dropdown isOpen={isOpen} toggle={() => setIsOpen(!isOpen)}>
  21. { children ?? (
  22. <DropdownToggle color="transparent" className="border-0 rounded btn-page-item-control d-flex align-items-center justify-content-center">
  23. <i className="icon-options"></i>
  24. </DropdownToggle>
  25. ) }
  26. <DropdownMenu
  27. modifiers={{ preventOverflow: { boundariesElement: 'viewport' } }}
  28. container="body"
  29. style={{ zIndex: 1055 }} /* make it larger than $zindex-modal of bootstrap */
  30. >
  31. {onClickMoveToRoot && (
  32. <DropdownItem
  33. onClick={onClickMoveToRoot}
  34. className="grw-page-control-dropdown-item"
  35. >
  36. <i className="fa fa-fw fa-bookmark-o grw-page-control-dropdown-icon"></i>
  37. {t('bookmark_folder.move_to_root')}
  38. </DropdownItem>
  39. )}
  40. <DropdownItem
  41. onClick={onClickRename}
  42. className="grw-page-control-dropdown-item"
  43. >
  44. <i className="icon-fw icon-action-redo grw-page-control-dropdown-icon"></i>
  45. {t('Rename')}
  46. </DropdownItem>
  47. <DropdownItem divider />
  48. <DropdownItem
  49. className="pt-2 grw-page-control-dropdown-item text-danger"
  50. onClick={onClickDelete}
  51. >
  52. <i className="icon-fw icon-trash grw-page-control-dropdown-icon"></i>
  53. {t('Delete')}
  54. </DropdownItem>
  55. </DropdownMenu>
  56. </Dropdown>
  57. );
  58. };