ExternalAccountTable.jsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import React, { Fragment } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import dateFnsFormat from 'date-fns/format';
  5. import { createSubscribedElement } from '../../UnstatedUtils';
  6. import AppContainer from '../../../services/AppContainer';
  7. import AdminExternalAccountsContainer from '../../../services/AdminExternalAccountsContainer';
  8. import { toastSuccess, toastError } from '../../../util/apiNotification';
  9. class ExternalAccountTable extends React.Component {
  10. constructor(props) {
  11. super(props);
  12. this.state = {
  13. };
  14. this.removeExtenalAccount = this.removeExtenalAccount.bind(this);
  15. }
  16. // remove external-account
  17. async removeExtenalAccount(externalAccountId) {
  18. const { t } = this.props;
  19. try {
  20. const accountId = await this.props.adminExternalAccountsContainer.removeExternalAccountById(externalAccountId);
  21. toastSuccess(t('toaster.remove_external_user_success', { accountId }));
  22. }
  23. catch (err) {
  24. toastError(err);
  25. }
  26. }
  27. render() {
  28. const { t, adminExternalAccountsContainer } = this.props;
  29. return (
  30. <Fragment>
  31. <table className="table table-bordered table-user-list">
  32. <thead>
  33. <tr>
  34. <th width="120px">{t('admin:user_management.authentication_provider')}</th>
  35. <th><code>accountId</code></th>
  36. <th>{t('admin:user_management.related_username')}<code>username</code></th>
  37. <th>
  38. {t('admin:user_management.password_setting')}
  39. <div
  40. className="text-muted"
  41. data-toggle="popover"
  42. data-placement="top"
  43. data-trigger="hover focus"
  44. tabIndex="0"
  45. role="button"
  46. data-animation="false"
  47. data-html="true"
  48. data-content={t('admin:user_management.password_setting_help')}
  49. >
  50. <small>
  51. <i className="icon-question" aria-hidden="true"></i>
  52. </small>
  53. </div>
  54. </th>
  55. <th width="100px">{t('Created')}</th>
  56. <th width="70px"></th>
  57. </tr>
  58. </thead>
  59. <tbody>
  60. {adminExternalAccountsContainer.state.externalAccounts.map((ea) => {
  61. return (
  62. <tr key={ea._id}>
  63. <td>{ea.providerType}</td>
  64. <td>
  65. <strong>{ea.accountId}</strong>
  66. </td>
  67. <td>
  68. <strong>{ea.user.username}</strong>
  69. </td>
  70. <td>
  71. {ea.user.password
  72. ? (
  73. <span className="label label-info">
  74. {t('admin:user_management.set')}
  75. </span>
  76. )
  77. : (
  78. <span className="badge badge-warning">
  79. {t('admin:user_management.unset')}
  80. </span>
  81. )
  82. }
  83. </td>
  84. <td>{dateFnsFormat(new Date(ea.createdAt), 'yyyy-MM-dd')}</td>
  85. <td>
  86. <div className="btn-group admin-user-menu">
  87. <button type="button" className="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown">
  88. <i className="icon-settings"></i> <span className="caret"></span>
  89. </button>
  90. <ul className="dropdown-menu" role="menu">
  91. <li className="dropdown-header">{t('admin:user_management.user_table.edit_menu')}</li>
  92. <li>
  93. <a role="button" onClick={() => { return this.removeExtenalAccount(ea._id) }}>
  94. <i className="icon-fw icon-fire text-danger"></i> {t('Delete')}
  95. </a>
  96. </li>
  97. </ul>
  98. </div>
  99. </td>
  100. </tr>
  101. );
  102. })}
  103. </tbody>
  104. </table>
  105. </Fragment>
  106. );
  107. }
  108. }
  109. ExternalAccountTable.propTypes = {
  110. t: PropTypes.func.isRequired, // i18next
  111. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  112. adminExternalAccountsContainer: PropTypes.instanceOf(AdminExternalAccountsContainer).isRequired,
  113. };
  114. const ExternalAccountTableWrapper = (props) => {
  115. return createSubscribedElement(ExternalAccountTable, props, [AppContainer, AdminExternalAccountsContainer]);
  116. };
  117. export default withTranslation()(ExternalAccountTableWrapper);