PageHistory.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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 } = 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. const pagingLimit = 10;
  23. if (revisionsData == null || sourceRevision == null || targetRevision == null || currentPageId == null) {
  24. return (
  25. <div className="text-muted text-center">
  26. <i className="fa fa-2x fa-spinner fa-pulse mt-3"></i>
  27. </div>
  28. );
  29. }
  30. const pager = () => {
  31. return (
  32. <PaginationWrapper
  33. activePage={activePage}
  34. changePage={setActivePage}
  35. totalItemsCount={revisionsData.totalCounts}
  36. pagingLimit={pagingLimit}
  37. align="center"
  38. />
  39. );
  40. };
  41. return (
  42. <div className="revision-history" data-testid="page-history">
  43. <PageRevisionTable
  44. revisions={revisionsData.revisions}
  45. pagingLimit={pagingLimit}
  46. sourceRevision={sourceRevision}
  47. targetRevision={targetRevision}
  48. onChangeSourceInvoked={setSourceRevision}
  49. onChangeTargetInvoked={setTargetRevision}
  50. />
  51. <div className="my-3">
  52. {pager()}
  53. </div>
  54. <RevisionComparer
  55. sourceRevision={sourceRevision}
  56. targetRevision={targetRevision}
  57. currentPageId={currentPageId}
  58. />
  59. </div>
  60. );
  61. };