PageSelectModal.tsx 1.9 KB

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