UserGroupPageList.jsx 2.6 KB

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