Users.jsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import React, { Fragment } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import PaginationWrapper from '../../PaginationWrapper';
  5. import InviteUserControl from './InviteUserControl';
  6. import UserTable from './UserTable';
  7. import { createSubscribedElement } from '../../UnstatedUtils';
  8. import AppContainer from '../../../services/AppContainer';
  9. class UserPage extends React.Component {
  10. constructor(props) {
  11. super();
  12. this.state = {
  13. users: [],
  14. activePage: 1,
  15. pagingLimit: Infinity,
  16. };
  17. }
  18. // TODO unstatedContainerを作ってそこにリファクタすべき
  19. componentDidMount() {
  20. const jsonData = document.getElementById('admin-user-page');
  21. const users = JSON.parse(jsonData.getAttribute('users'));
  22. this.setState({
  23. users,
  24. });
  25. }
  26. render() {
  27. const { t } = this.props;
  28. return (
  29. <Fragment>
  30. <p>
  31. <InviteUserControl />
  32. <a className="btn btn-default btn-outline ml-2" href="/admin/users/external-accounts">
  33. <i className="icon-user-follow" aria-hidden="true"></i>
  34. { t('user_management.external_account') }
  35. </a>
  36. </p>
  37. <UserTable
  38. users={this.state.users}
  39. />
  40. <PaginationWrapper
  41. activePage={this.state.activePage}
  42. changePage={this.handlePage}
  43. totalItemsCount={this.state.totalUsers}
  44. pagingLimit={this.state.pagingLimit}
  45. >
  46. </PaginationWrapper>
  47. </Fragment>
  48. );
  49. }
  50. }
  51. const UserPageWrapper = (props) => {
  52. return createSubscribedElement(UserPage, props, [AppContainer]);
  53. };
  54. UserPage.propTypes = {
  55. t: PropTypes.func.isRequired, // i18next
  56. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  57. };
  58. export default withTranslation()(UserPageWrapper);