PageHistory.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import React, { useState, useEffect } from 'react';
  2. import { IRevisionHasPageId } from '@growi/core';
  3. import { useCurrentPageId } from '~/stores/context';
  4. import { useSWRxPageRevisions } from '~/stores/page';
  5. import loggerFactory from '~/utils/logger';
  6. import { PageRevisionTable } from './PageHistory/PageRevisionTable';
  7. import PaginationWrapper from './PaginationWrapper';
  8. import { RevisionComparer } from './RevisionComparer/RevisionComparer';
  9. const logger = loggerFactory('growi:PageHistory');
  10. export const PageHistory = (): JSX.Element => {
  11. const [activePage, setActivePage] = useState(1);
  12. const { data: currentPageId } = useCurrentPageId();
  13. const { data: revisionsData, mutate: mutatePageRevisions } = useSWRxPageRevisions(activePage, 10, currentPageId);
  14. const [sourceRevision, setSourceRevision] = useState<IRevisionHasPageId>();
  15. const [targetRevision, setTargetRevision] = useState<IRevisionHasPageId>();
  16. useEffect(() => {
  17. if (revisionsData != null) {
  18. setSourceRevision(revisionsData.revisions[0]);
  19. setTargetRevision(revisionsData.revisions[0]);
  20. }
  21. }, [revisionsData]);
  22. useEffect(() => {
  23. mutatePageRevisions();
  24. });
  25. const pagingLimit = 10;
  26. if (revisionsData == null || sourceRevision == null || targetRevision == null || currentPageId == null) {
  27. return (
  28. <div className="text-muted text-center">
  29. <i className="fa fa-2x fa-spinner fa-pulse mt-3"></i>
  30. </div>
  31. );
  32. }
  33. const pager = () => {
  34. return (
  35. <PaginationWrapper
  36. activePage={activePage}
  37. changePage={setActivePage}
  38. totalItemsCount={revisionsData.totalCounts}
  39. pagingLimit={pagingLimit}
  40. align="center"
  41. />
  42. );
  43. };
  44. return (
  45. <div className="revision-history" data-testid="page-history">
  46. <PageRevisionTable
  47. revisions={revisionsData.revisions}
  48. pagingLimit={pagingLimit}
  49. sourceRevision={sourceRevision}
  50. targetRevision={targetRevision}
  51. onChangeSourceInvoked={setSourceRevision}
  52. onChangeTargetInvoked={setTargetRevision}
  53. />
  54. <div className="my-3">
  55. {pager()}
  56. </div>
  57. <RevisionComparer
  58. sourceRevision={sourceRevision}
  59. targetRevision={targetRevision}
  60. currentPageId={currentPageId}
  61. />
  62. </div>
  63. );
  64. };