PageHistory.jsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import React, { useCallback } from 'react';
  2. import PropTypes from 'prop-types';
  3. import loggerFactory from '@alias/logger';
  4. import { withUnstatedContainers } from './UnstatedUtils';
  5. import { toastError } from '../util/apiNotification';
  6. import { withLoadingSppiner } from './SuspenseUtils';
  7. import PageRevisionList from './PageHistory/PageRevisionList';
  8. import PageHistroyContainer from '../services/PageHistoryContainer';
  9. import PaginationWrapper from './PaginationWrapper';
  10. const logger = loggerFactory('growi:PageHistory');
  11. function PageHistory(props) {
  12. const { pageHistoryContainer } = props;
  13. const handlePage = useCallback(async(selectedPage) => {
  14. try {
  15. await props.pageHistoryContainer.retrieveRevisions(selectedPage);
  16. }
  17. catch (err) {
  18. toastError(err);
  19. props.pageHistoryContainer.setState({ errorMessage: err.message });
  20. logger.error(err);
  21. }
  22. }, [props.pageHistoryContainer]);
  23. if (pageHistoryContainer.state.errorMessage != null) {
  24. return (
  25. <div className="my-5">
  26. <div className="text-danger">{pageHistoryContainer.state.errorMessage}</div>
  27. </div>
  28. );
  29. }
  30. if (pageHistoryContainer.state.revisions === pageHistoryContainer.dummyRevisions) {
  31. throw new Promise(async() => {
  32. try {
  33. await props.pageHistoryContainer.retrieveRevisions(1);
  34. }
  35. catch (err) {
  36. toastError(err);
  37. pageHistoryContainer.setState({ errorMessage: err.message });
  38. logger.error(err);
  39. }
  40. });
  41. }
  42. function pager() {
  43. return (
  44. <PaginationWrapper
  45. activePage={pageHistoryContainer.state.activePage}
  46. changePage={handlePage}
  47. totalItemsCount={pageHistoryContainer.state.totalPages}
  48. pagingLimit={pageHistoryContainer.state.pagingLimit}
  49. align="center"
  50. />
  51. );
  52. }
  53. return (
  54. <div>
  55. <PageRevisionList
  56. revisions={pageHistoryContainer.state.revisions}
  57. diffOpened={pageHistoryContainer.state.diffOpened}
  58. getPreviousRevision={pageHistoryContainer.getPreviousRevision}
  59. onDiffOpenClicked={pageHistoryContainer.onDiffOpenClicked}
  60. />
  61. {pager()}
  62. </div>
  63. );
  64. }
  65. const RenderPageHistoryWrapper = withUnstatedContainers(withLoadingSppiner(PageHistory), [PageHistroyContainer]);
  66. PageHistory.propTypes = {
  67. pageHistoryContainer: PropTypes.instanceOf(PageHistroyContainer).isRequired,
  68. };
  69. export default RenderPageHistoryWrapper;