ComparePathsTable.jsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import { pagePathUtils } from '@growi/core';
  5. import { withUnstatedContainers } from './UnstatedUtils';
  6. import PageContainer from '~/client/services/PageContainer';
  7. const { convertToNewAffiliationPath } = pagePathUtils;
  8. function ComparePathsTable(props) {
  9. const {
  10. subordinatedPages, pageContainer, newPagePath, t,
  11. } = props;
  12. const { path } = pageContainer.state;
  13. return (
  14. <table className="table table-bordered grw-compare-paths-table">
  15. <thead>
  16. <tr className="d-flex">
  17. <th className="w-50">{t('original_path')}</th>
  18. <th className="w-50">{t('new_path')}</th>
  19. </tr>
  20. </thead>
  21. <tbody className="overflow-auto d-block">
  22. {subordinatedPages.map((subordinatedPage) => {
  23. const convertedPath = convertToNewAffiliationPath(path, newPagePath, subordinatedPage.path);
  24. return (
  25. <tr key={subordinatedPage._id} className="d-flex">
  26. <td className="text-break w-50">
  27. <a href={subordinatedPage.path}>
  28. {subordinatedPage.path}
  29. </a>
  30. </td>
  31. <td className="text-break w-50">
  32. {convertedPath}
  33. </td>
  34. </tr>
  35. );
  36. })}
  37. </tbody>
  38. </table>
  39. );
  40. }
  41. /**
  42. * Wrapper component for using unstated
  43. */
  44. const PageDuplicateModallWrapper = withUnstatedContainers(ComparePathsTable, [PageContainer]);
  45. ComparePathsTable.propTypes = {
  46. t: PropTypes.func.isRequired, // i18next
  47. pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
  48. subordinatedPages: PropTypes.array.isRequired,
  49. newPagePath: PropTypes.string.isRequired,
  50. };
  51. export default withTranslation()(PageDuplicateModallWrapper);