UserGroupPageList.jsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import React, { Fragment } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import Page from '../../PageList/Page';
  5. import PaginationWrapper from '../../PaginationWrapper';
  6. import { withUnstatedContainers } from '../../UnstatedUtils';
  7. import AppContainer from '../../../services/AppContainer';
  8. import AdminUserGroupDetailContainer from '../../../services/AdminUserGroupDetailContainer';
  9. import { toastError } from '../../../util/apiNotification';
  10. class UserGroupPageList extends React.Component {
  11. constructor(props) {
  12. super(props);
  13. this.state = {
  14. currentPages: [],
  15. activePage: 1,
  16. total: 0,
  17. pagingLimit: 10,
  18. };
  19. this.handlePageChange = this.handlePageChange.bind(this);
  20. }
  21. async componentDidMount() {
  22. await this.handlePageChange(this.state.activePage);
  23. }
  24. async handlePageChange(pageNum) {
  25. const limit = this.state.pagingLimit;
  26. const offset = (pageNum - 1) * limit;
  27. try {
  28. const res = await this.props.appContainer.apiv3.get(`/user-groups/${this.props.adminUserGroupDetailContainer.state.userGroup._id}/pages`, {
  29. limit,
  30. offset,
  31. });
  32. const { total, pages } = res.data;
  33. this.setState({
  34. total: total || 0,
  35. activePage: pageNum,
  36. currentPages: pages,
  37. });
  38. }
  39. catch (err) {
  40. toastError(err);
  41. }
  42. }
  43. render() {
  44. const { t, adminUserGroupDetailContainer } = this.props;
  45. return (
  46. <Fragment>
  47. <ul className="page-list-ul page-list-ul-flat mb-3">
  48. {this.state.currentPages.map(page => <li key={page._id}><Page page={page} /></li>)}
  49. </ul>
  50. {adminUserGroupDetailContainer.state.relatedPages.length === 0 ? <p>{t('admin:user_group_management.no_pages')}</p> : null}
  51. <PaginationWrapper
  52. activePage={this.state.activePage}
  53. changePage={this.handlePageChange}
  54. totalItemsCount={this.state.total}
  55. pagingLimit={this.state.pagingLimit}
  56. />
  57. </Fragment>
  58. );
  59. }
  60. }
  61. UserGroupPageList.propTypes = {
  62. t: PropTypes.func.isRequired, // i18next
  63. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  64. adminUserGroupDetailContainer: PropTypes.instanceOf(AdminUserGroupDetailContainer).isRequired,
  65. };
  66. /**
  67. * Wrapper component for using unstated
  68. */
  69. const UserGroupPageListWrapper = withUnstatedContainers(UserGroupPageList, [AppContainer, AdminUserGroupDetailContainer]);
  70. export default withTranslation()(UserGroupPageListWrapper);