PageTree.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import React, { FC, memo, useState } from 'react';
  2. import { useTranslation } from 'react-i18next';
  3. import { useSWRxV5MigrationStatus } from '~/stores/page-listing';
  4. import {
  5. useCurrentPagePath, useCurrentPageId, useTargetAndAncestors, useIsGuestUser,
  6. } from '~/stores/context';
  7. import ItemsTree from './PageTree/ItemsTree';
  8. import PrivateLegacyPages from './PageTree/PrivateLegacyPages';
  9. import { IPageForPageDeleteModal } from '../PageDeleteModal';
  10. const PageTree: FC = memo(() => {
  11. const { t } = useTranslation();
  12. const { data: isGuestUser } = useIsGuestUser();
  13. const { data: currentPath } = useCurrentPagePath();
  14. const { data: targetId } = useCurrentPageId();
  15. const { data: targetAndAncestorsData } = useTargetAndAncestors();
  16. const { data: migrationStatus } = useSWRxV5MigrationStatus(!isGuestUser);
  17. // for delete modal
  18. const [isDeleteModalOpen, setDeleteModalOpen] = useState(false);
  19. const [pagesToDelete, setPagesToDelete] = useState<IPageForPageDeleteModal[]>([]);
  20. /*
  21. * dependencies
  22. */
  23. if (isGuestUser == null) {
  24. return null;
  25. }
  26. const onClickDeleteByPage = (page: IPageForPageDeleteModal) => {
  27. setDeleteModalOpen(true);
  28. setPagesToDelete([page]);
  29. };
  30. const onCloseDelete = () => {
  31. setDeleteModalOpen(false);
  32. };
  33. const path = currentPath || '/';
  34. return (
  35. <>
  36. <div className="grw-sidebar-content-header p-3">
  37. <h3 className="mb-0">{t('Page Tree')}</h3>
  38. </div>
  39. <div className="grw-sidebar-content-body">
  40. <ItemsTree
  41. isEnableActions={!isGuestUser}
  42. targetPath={path}
  43. targetId={targetId}
  44. targetAndAncestorsData={targetAndAncestorsData}
  45. isDeleteModalOpen={isDeleteModalOpen}
  46. pagesToDelete={pagesToDelete}
  47. isAbleToDeleteCompletely={false} // TODO: pass isAbleToDeleteCompletely
  48. isDeleteCompletelyModal={false} // TODO: pass isDeleteCompletelyModal
  49. onCloseDelete={onCloseDelete}
  50. onClickDeleteByPage={onClickDeleteByPage}
  51. />
  52. </div>
  53. {!isGuestUser && migrationStatus?.migratablePagesCount != null && migrationStatus.migratablePagesCount !== 0 && (
  54. <div className="grw-pagetree-footer border-top p-3 w-100">
  55. <PrivateLegacyPages />
  56. </div>
  57. )}
  58. </>
  59. );
  60. });
  61. export default PageTree;