PageSelectModal.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import React, { FC } from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import {
  4. Modal, ModalHeader, ModalBody, ModalFooter, Button,
  5. } from 'reactstrap';
  6. import { useTargetAndAncestors, useIsGuestUser, useIsReadOnlyUser } from '~/stores/context';
  7. import { usePageSelectModal } from '~/stores/modal';
  8. import { useCurrentPagePath, useCurrentPageId } from '~/stores/page';
  9. import { ItemsTree } from '../ItemsTree';
  10. import { TreeItemForModal } from './TreeItemForModal';
  11. export const PageSelectModal: FC = () => {
  12. const {
  13. data: PageSelectModalData,
  14. close: closeModal,
  15. } = usePageSelectModal();
  16. const isOpened = PageSelectModalData?.isOpened ?? false;
  17. const { t } = useTranslation();
  18. const { data: isGuestUser } = useIsGuestUser();
  19. const { data: isReadOnlyUser } = useIsReadOnlyUser();
  20. const { data: currentPath } = useCurrentPagePath();
  21. const { data: targetId } = useCurrentPageId();
  22. const { data: targetAndAncestorsData } = useTargetAndAncestors();
  23. const targetPathOrId = targetId || currentPath;
  24. if (isGuestUser == null) {
  25. return null;
  26. }
  27. const path = currentPath || '/';
  28. return (
  29. <Modal
  30. isOpen={isOpened}
  31. toggle={() => closeModal()}
  32. centered
  33. size="sm"
  34. >
  35. <ModalHeader toggle={closeModal}>{t('page_select_modal.select_page_location')}</ModalHeader>
  36. <ModalBody>
  37. <ItemsTree
  38. CustomTreeItem={TreeItemForModal}
  39. isEnableActions={!isGuestUser}
  40. isReadOnlyUser={!!isReadOnlyUser}
  41. targetPath={path}
  42. targetPathOrId={targetPathOrId}
  43. targetAndAncestorsData={targetAndAncestorsData}
  44. />
  45. </ModalBody>
  46. <ModalFooter>
  47. <Button color="primary" onClick={closeModal}>{t('Done')}</Button>{' '}
  48. </ModalFooter>
  49. </Modal>
  50. );
  51. };