RecentCreated.jsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withUnstatedContainers } from '../UnstatedUtils';
  4. import AppContainer from '../../services/AppContainer';
  5. import PageContainer from '../../services/PageContainer';
  6. import PaginationWrapper from '../PaginationWrapper';
  7. import Page from '../PageList/Page';
  8. class RecentCreated extends React.Component {
  9. constructor(props) {
  10. super(props);
  11. this.state = {
  12. pages: [],
  13. activePage: 1,
  14. totalPages: 0,
  15. pagingLimit: Infinity,
  16. };
  17. this.handlePage = this.handlePage.bind(this);
  18. }
  19. componentWillMount() {
  20. this.getRecentCreatedList(1);
  21. }
  22. async handlePage(selectedPage) {
  23. await this.getRecentCreatedList(selectedPage);
  24. }
  25. async getRecentCreatedList(selectPageNumber) {
  26. const { appContainer, pageContainer } = this.props;
  27. const { creator } = pageContainer.state;
  28. const limit = appContainer.getConfig().recentCreatedLimit;
  29. const offset = (selectPageNumber - 1) * limit;
  30. // pagesList get and pagination calculate
  31. const res = await appContainer.apiv3Get(`/users/${creator._id}/recent`, { offset, limit });
  32. const { totalCount, pages } = res.data;
  33. console.log(res.data);
  34. this.setState({
  35. pages,
  36. activePage: selectPageNumber,
  37. totalPages: totalCount,
  38. pagingLimit: limit,
  39. });
  40. }
  41. /**
  42. * generate Elements of Page
  43. *
  44. * @param {any} pages Array of pages Model Obj
  45. *
  46. */
  47. generatePageList(pages) {
  48. return pages.map(page => (
  49. <li key={`recent-created:list-view:${page._id}`}>
  50. <Page page={page} />
  51. </li>
  52. ));
  53. }
  54. render() {
  55. const pageList = this.generatePageList(this.state.pages);
  56. return (
  57. <div className="page-list-container-create">
  58. <ul className="page-list-ul page-list-ul-flat mb-3">
  59. {pageList}
  60. </ul>
  61. <PaginationWrapper
  62. activePage={this.state.activePage}
  63. changePage={this.handlePage}
  64. totalItemsCount={this.state.totalPages}
  65. pagingLimit={this.state.pagingLimit}
  66. />
  67. </div>
  68. );
  69. }
  70. }
  71. /**
  72. * Wrapper component for using unstated
  73. */
  74. const RecentCreatedWrapper = withUnstatedContainers(RecentCreated, [AppContainer, PageContainer]);
  75. RecentCreated.propTypes = {
  76. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  77. pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
  78. };
  79. export default RecentCreatedWrapper;