PageList.jsx 2.1 KB

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