PageTree.tsx 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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();
  17. // for delete modal
  18. const [isDeleteModalOpen, setDeleteModalOpen] = useState(false);
  19. const [pagesToDelete, setPagesToDelete] = useState<IPageForPageDeleteModal[]>([]);
  20. if (!migrationStatus?.isV5Compatible) {
  21. // TODO : improve design
  22. // Story : https://redmine.weseek.co.jp/issues/83755
  23. return (
  24. <>
  25. <div className="grw-sidebar-content-header p-3">
  26. <h3 className="mb-0">{t('Page Tree')}</h3>
  27. </div>
  28. <div className="mt-5 mx-2 text-center">
  29. <h3 className="text-gray">{t('admin:v5_page_migration.page_tree_not_avaliable')}</h3>
  30. <a href="/admin">{t('admin:v5_page_migration.go_to_settings')}</a>
  31. </div>
  32. </>
  33. );
  34. }
  35. /*
  36. * dependencies
  37. */
  38. if (isGuestUser == null) {
  39. return null;
  40. }
  41. const onClickDeleteByPage = (page: IPageForPageDeleteModal) => {
  42. setDeleteModalOpen(true);
  43. setPagesToDelete([page]);
  44. };
  45. const onCloseDelete = () => {
  46. setDeleteModalOpen(false);
  47. };
  48. const path = currentPath || '/';
  49. return (
  50. <>
  51. <div className="grw-sidebar-content-header p-3">
  52. <h3 className="mb-0">{t('Page Tree')}</h3>
  53. </div>
  54. <div className="grw-sidebar-content-body">
  55. <ItemsTree
  56. isEnableActions={!isGuestUser}
  57. targetPath={path}
  58. targetId={targetId}
  59. targetAndAncestorsData={targetAndAncestorsData}
  60. isDeleteModalOpen={isDeleteModalOpen}
  61. pagesToDelete={pagesToDelete}
  62. isAbleToDeleteCompletely={false} // TODO: pass isAbleToDeleteCompletely
  63. isDeleteCompletelyModal={false} // TODO: pass isDeleteCompletelyModal
  64. onCloseDelete={onCloseDelete}
  65. onClickDeleteByPage={onClickDeleteByPage}
  66. />
  67. </div>
  68. {!isGuestUser && migrationStatus?.migratablePagesCount != null && migrationStatus.migratablePagesCount !== 0 && (
  69. <div className="grw-pagetree-footer border-top p-3 w-100">
  70. <PrivateLegacyPages />
  71. </div>
  72. )}
  73. </>
  74. );
  75. });
  76. export default PageTree;