DisassociateModal.jsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import Modal from 'react-bootstrap/es/Modal';
  5. import { toastSuccess, toastError } from '../../util/apiNotification';
  6. import { createSubscribedElement } from '../UnstatedUtils';
  7. import AppContainer from '../../services/AppContainer';
  8. import PersonalContainer from '../../services/PersonalContainer';
  9. class DisassociateModal extends React.Component {
  10. constructor(props) {
  11. super(props);
  12. this.onClickDisassociateBtn = this.onClickDisassociateBtn.bind(this);
  13. }
  14. async onClickDisassociateBtn() {
  15. const { t, personalContainer } = this.props;
  16. try {
  17. await personalContainer.disassociateLdapAccount();
  18. this.props.onClose();
  19. toastSuccess(t('security_setting.updated_general_security_setting'));
  20. }
  21. catch (err) {
  22. toastError(err);
  23. }
  24. }
  25. render() {
  26. const { t, accountForDisassociate } = this.props;
  27. const { providerType, accountId } = accountForDisassociate;
  28. return (
  29. <Modal show={this.props.isOpen} onHide={this.props.onClose}>
  30. <Modal.Header className="bg-info" closeButton>
  31. <Modal.Title className="text-white">
  32. {t('personal_settings.disassociate_external_account')}
  33. </Modal.Title>
  34. </Modal.Header>
  35. <Modal.Body>
  36. {/* eslint-disable-next-line react/no-danger */}
  37. <p dangerouslySetInnerHTML={{ __html: t('personal_settings.disassociate_external_account_desc', { providerType, accountId }) }} />
  38. </Modal.Body>
  39. <Modal.Footer>
  40. <button type="button" className="btn btn-sm btn-default" onClick={this.props.onClose}>
  41. { t('Cancel') }
  42. </button>
  43. <button type="button" className="btn btn-sm btn-danger" onClick={this.onClickDisassociateBtn}>
  44. <i className="ti-unlink"></i>
  45. { t('Disassociate') }
  46. </button>
  47. </Modal.Footer>
  48. </Modal>
  49. );
  50. }
  51. }
  52. const DisassociateModalWrapper = (props) => {
  53. return createSubscribedElement(DisassociateModal, props, [AppContainer, PersonalContainer]);
  54. };
  55. DisassociateModal.propTypes = {
  56. t: PropTypes.func.isRequired, // i18next
  57. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  58. personalContainer: PropTypes.instanceOf(PersonalContainer).isRequired,
  59. isOpen: PropTypes.bool.isRequired,
  60. onClose: PropTypes.func.isRequired,
  61. accountForDisassociate: PropTypes.object.isRequired,
  62. };
  63. export default withTranslation()(DisassociateModalWrapper);