UserGroupPageList.jsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. size="sm"
  57. />
  58. </Fragment>
  59. );
  60. }
  61. }
  62. UserGroupPageList.propTypes = {
  63. t: PropTypes.func.isRequired, // i18next
  64. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  65. adminUserGroupDetailContainer: PropTypes.instanceOf(AdminUserGroupDetailContainer).isRequired,
  66. };
  67. /**
  68. * Wrapper component for using unstated
  69. */
  70. const UserGroupPageListWrapper = withUnstatedContainers(UserGroupPageList, [AppContainer, AdminUserGroupDetailContainer]);
  71. export default withTranslation()(UserGroupPageListWrapper);