PageTree.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. <div className="grw-sidebar-content-footer">
  54. {
  55. !isGuestUser && migrationStatus?.migratablePagesCount != null && migrationStatus.migratablePagesCount !== 0 && (
  56. <PrivateLegacyPages />
  57. )
  58. }
  59. </div>
  60. </>
  61. );
  62. });
  63. export default PageTree;