RecentCreated.jsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { createSubscribedElement } 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. getRecentCreatedList(selectPageNumber) {
  26. const { appContainer, pageContainer } = this.props;
  27. const { pageId } = pageContainer.state;
  28. const userId = appContainer.me;
  29. const limit = appContainer.getConfig().recentCreatedLimit;
  30. const offset = (selectPageNumber - 1) * limit;
  31. // pagesList get and pagination calculate
  32. this.props.appContainer.apiGet('/pages.recentCreated', {
  33. page_id: pageId, user: userId, limit, offset,
  34. })
  35. .then((res) => {
  36. const totalPages = res.totalCount;
  37. const pages = res.pages;
  38. const activePage = selectPageNumber;
  39. this.setState({
  40. pages,
  41. activePage,
  42. totalPages,
  43. pagingLimit: limit,
  44. });
  45. });
  46. }
  47. /**
  48. * generate Elements of Page
  49. *
  50. * @param {any} pages Array of pages Model Obj
  51. *
  52. */
  53. generatePageList(pages) {
  54. return pages.map((page) => {
  55. return <Page page={page} key={`recent-created:list-view:${page._id}`} />;
  56. });
  57. }
  58. render() {
  59. const pageList = this.generatePageList(this.state.pages);
  60. return (
  61. <div className="page-list-container-create">
  62. <ul className="page-list-ul page-list-ul-flat">
  63. {pageList}
  64. </ul>
  65. <PaginationWrapper
  66. activePage={this.state.activePage}
  67. changePage={this.handlePage}
  68. totalItemsCount={this.state.totalPages}
  69. pagingLimit={this.state.pagingLimit}
  70. />
  71. </div>
  72. );
  73. }
  74. }
  75. /**
  76. * Wrapper component for using unstated
  77. */
  78. const RecentCreatedWrapper = (props) => {
  79. return createSubscribedElement(RecentCreated, props, [AppContainer, PageContainer]);
  80. };
  81. RecentCreated.propTypes = {
  82. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  83. pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
  84. };
  85. export default RecentCreatedWrapper;