PageList.jsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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(appContainer.getConfig().recentCreatedLimit);
  16. const [offset, setOffset] = useState(0);
  17. function setPageNumber(selectedPageNumber) {
  18. setActivePage(selectedPageNumber);
  19. setOffset((selectedPageNumber - 1) * limit);
  20. }
  21. const updatePageList = useCallback(async() => {
  22. const res = await appContainer.apiv3Get('/pages/list', { path, limit, offset });
  23. setPages(res.data.pages);
  24. setIsLoading(true);
  25. setTotalPages(res.data.totalCount);
  26. setLimit(res.data.limit);
  27. setOffset(res.data.offset);
  28. }, [appContainer, path, limit, offset]);
  29. useEffect(() => {
  30. updatePageList();
  31. }, [updatePageList]);
  32. if (isLoading === false) {
  33. return (
  34. <div className="wiki">
  35. <div className="text-muted test-center">
  36. <i className="fa fa-2x fa-spinner fa-pulse mr-1"></i>
  37. </div>
  38. </div>
  39. );
  40. }
  41. const pageList = pages.map(page => (
  42. <li key={page._id}>
  43. <Page page={page} />
  44. </li>
  45. ));
  46. return (
  47. <div className="page-list-container-create">
  48. <ul className="page-list-ul page-list-ul-flat mb-3">
  49. {pageList}
  50. </ul>
  51. <PaginationWrapper
  52. activePage={activePage}
  53. changePage={setPageNumber}
  54. totalItemsCount={totalPages}
  55. pagingLimit={limit}
  56. />
  57. </div>
  58. );
  59. };
  60. const PageListWrapper = withUnstatedContainers(PageList, [AppContainer, PageContainer]);
  61. PageList.propTypes = {
  62. appContainer: PropTypes.instanceOf(AppContainer),
  63. pageContainer: PropTypes.instanceOf(PageContainer),
  64. };
  65. export default PageListWrapper;