PageList.jsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import React, { useEffect, useCallback, useState } from 'react';
  2. import PropTypes from 'prop-types';
  3. import Page from './PageList/Page';
  4. import { withUnstatedContainers } from './UnstatedUtils';
  5. import AppContainer from '../services/AppContainer';
  6. import PageContainer from '../services/PageContainer';
  7. import PaginationWrapper from './PaginationWrapper';
  8. const PageList = (props) => {
  9. const { appContainer, pageContainer } = props;
  10. const { path } = pageContainer.state;
  11. const [pages, setPages] = useState(null);
  12. const [isLoading, setIsLoading] = useState(false);
  13. const [activePage, setActivePage] = useState(1);
  14. const [totalPages, setTotalPages] = useState(0);
  15. const [limit, setLimit] = useState(null);
  16. function setPageNumber(selectedPageNumber) {
  17. setActivePage(selectedPageNumber);
  18. }
  19. const updatePageList = useCallback(async() => {
  20. const page = activePage;
  21. const res = await appContainer.apiv3Get('/pages/list', { path, page });
  22. setPages(res.data.pages);
  23. setIsLoading(true);
  24. setTotalPages(res.data.totalCount);
  25. setLimit(res.data.limit);
  26. }, [appContainer, path, activePage]);
  27. useEffect(() => {
  28. updatePageList();
  29. }, [updatePageList]);
  30. if (isLoading === false) {
  31. return (
  32. <div className="wiki">
  33. <div className="text-muted test-center">
  34. <i className="fa fa-2x fa-spinner fa-pulse mr-1"></i>
  35. </div>
  36. </div>
  37. );
  38. }
  39. const pageList = pages.map(page => (
  40. <li key={page._id} className="mb-3">
  41. <Page page={page} />
  42. </li>
  43. ));
  44. return (
  45. <div className="page-list-container-create">
  46. <ul className="page-list-ul page-list-ul-flat ml-n4">
  47. {pageList}
  48. </ul>
  49. <PaginationWrapper
  50. activePage={activePage}
  51. changePage={setPageNumber}
  52. totalItemsCount={totalPages}
  53. pagingLimit={limit}
  54. align="center"
  55. />
  56. </div>
  57. );
  58. };
  59. const PageListWrapper = withUnstatedContainers(PageList, [AppContainer, PageContainer]);
  60. PageList.propTypes = {
  61. appContainer: PropTypes.instanceOf(AppContainer),
  62. pageContainer: PropTypes.instanceOf(PageContainer),
  63. };
  64. export default PageListWrapper;