IdenticalPathPage.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import React, {
  2. FC,
  3. } from 'react';
  4. import { useTranslation } from 'react-i18next';
  5. import { DevidedPagePath } from '@growi/core';
  6. import { useCurrentPagePath } from '~/stores/context';
  7. import PageListItem from './Page/PageListItem';
  8. type IdenticalPathAlertProps = {
  9. path? : string | null,
  10. }
  11. const IdenticalPathAlert : FC<IdenticalPathAlertProps> = (props: IdenticalPathAlertProps) => {
  12. const { path } = props;
  13. const { t } = useTranslation();
  14. let _path = '――';
  15. let _pageName = '――';
  16. if (path != null) {
  17. const devidedPath = new DevidedPagePath(path);
  18. _path = devidedPath.isFormerRoot ? '/' : devidedPath.former;
  19. _pageName = devidedPath.latter;
  20. }
  21. return (
  22. <div className="alert alert-warning py-3">
  23. <h5 className="font-weight-bold mt-1">{t('duplicated_page_alert.same_page_name_exists', { pageName: _pageName })}</h5>
  24. <p>
  25. {t('duplicated_page_alert.same_page_name_exists_at_path',
  26. { path: _path, pageName: _pageName })}<br />
  27. <p
  28. // eslint-disable-next-line react/no-danger
  29. dangerouslySetInnerHTML={{ __html: t('See_more_detail_on_new_schema', { url: t('GROWI.5.0_new_schema') }) }}
  30. />
  31. </p>
  32. <p className="mb-1">{t('duplicated_page_alert.select_page_to_see')}</p>
  33. </div>
  34. );
  35. };
  36. type IdenticalPathPageProps= {
  37. // add props and types here
  38. }
  39. const jsonNull = 'null';
  40. const IdenticalPathPage:FC<IdenticalPathPageProps> = (props: IdenticalPathPageProps) => {
  41. const identicalPageDocument = document.getElementById('identical-path-page');
  42. const pageDataList = JSON.parse(identicalPageDocument?.getAttribute('data-identical-page-data-list') || jsonNull);
  43. const shortbodyMap = JSON.parse(identicalPageDocument?.getAttribute('data-shortody-map') || jsonNull);
  44. const { data: currentPath } = useCurrentPagePath();
  45. return (
  46. <div className="d-flex flex-column flex-lg-row-reverse">
  47. <div className="grw-side-contents-container">
  48. <div className="grw-side-contents-sticky-container">
  49. <div className="border-bottom pb-1">
  50. {/* <PageAccessories isNotFoundPage={!isPageExist} /> */}
  51. </div>
  52. </div>
  53. </div>
  54. <div className="flex-grow-1 flex-basis-0 mw-0">
  55. <IdenticalPathAlert path={currentPath} />
  56. <div className="page-list">
  57. <ul className="page-list-ul list-group-flush border px-3">
  58. {pageDataList.map((data) => {
  59. return (
  60. <PageListItem
  61. key={data.pageData._id}
  62. page={data}
  63. isSelected={false}
  64. isChecked={false}
  65. isEnableActions
  66. shortBody={shortbodyMap[data.pageData._id]}
  67. // Todo: add onClickDeleteButton when delete feature implemented
  68. />
  69. );
  70. })}
  71. </ul>
  72. </div>
  73. </div>
  74. </div>
  75. );
  76. };
  77. export default IdenticalPathPage;