DropendMenu.tsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import React from 'react';
  2. import { useTranslation } from 'react-i18next';
  3. import { DropdownMenu, DropdownItem } from 'reactstrap';
  4. import type { LabelType } from '~/interfaces/template';
  5. type DropendMenuProps = {
  6. onClickCreateNewPage: () => Promise<void>
  7. onClickCreateTodaysMemo: () => Promise<void>
  8. onClickCreateTemplate?: (label: LabelType) => Promise<void>
  9. todaysPath: string | null,
  10. }
  11. export const DropendMenu = React.memo((props: DropendMenuProps): JSX.Element => {
  12. const {
  13. onClickCreateNewPage,
  14. onClickCreateTodaysMemo,
  15. onClickCreateTemplate,
  16. todaysPath,
  17. } = props;
  18. const { t } = useTranslation('commons');
  19. return (
  20. <DropdownMenu
  21. container="body"
  22. data-testid="grw-page-create-button-dropend-menu"
  23. >
  24. <DropdownItem
  25. onClick={onClickCreateNewPage}
  26. >
  27. {t('create_page_dropdown.new_page')}
  28. </DropdownItem>
  29. { todaysPath != null && (
  30. <>
  31. <DropdownItem divider />
  32. <li><span className="text-muted px-3">{t('create_page_dropdown.todays.desc')}</span></li>
  33. <DropdownItem
  34. onClick={onClickCreateTodaysMemo}
  35. >
  36. {todaysPath}
  37. </DropdownItem>
  38. </>
  39. )}
  40. { onClickCreateTemplate != null && (
  41. <>
  42. <DropdownItem divider />
  43. <li><span className="text-muted text-nowrap px-3">{t('create_page_dropdown.template.desc')}</span></li>
  44. <DropdownItem
  45. onClick={() => onClickCreateTemplate('_template')}
  46. >
  47. {t('create_page_dropdown.template.children')}
  48. </DropdownItem>
  49. <DropdownItem
  50. onClick={() => onClickCreateTemplate('__template')}
  51. >
  52. {t('create_page_dropdown.template.descendants')}
  53. </DropdownItem>
  54. </>
  55. ) }
  56. </DropdownMenu>
  57. );
  58. });
  59. DropendMenu.displayName = 'DropendMenu';