disabled_account_banner.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { connect } from 'react-redux';
  4. import { Link } from 'react-router-dom';
  5. import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
  6. import { disabledAccountId, movedToAccountId, domain } from 'mastodon/initial_state';
  7. import { openModal } from 'mastodon/actions/modal';
  8. import { logOut } from 'mastodon/utils/log_out';
  9. const messages = defineMessages({
  10. logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' },
  11. logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' },
  12. });
  13. const mapStateToProps = (state) => ({
  14. disabledAcct: state.getIn(['accounts', disabledAccountId, 'acct']),
  15. movedToAcct: movedToAccountId ? state.getIn(['accounts', movedToAccountId, 'acct']) : undefined,
  16. });
  17. const mapDispatchToProps = (dispatch, { intl }) => ({
  18. onLogout () {
  19. dispatch(openModal('CONFIRM', {
  20. message: intl.formatMessage(messages.logoutMessage),
  21. confirm: intl.formatMessage(messages.logoutConfirm),
  22. closeWhenConfirm: false,
  23. onConfirm: () => logOut(),
  24. }));
  25. },
  26. });
  27. export default @injectIntl
  28. @connect(mapStateToProps, mapDispatchToProps)
  29. class DisabledAccountBanner extends React.PureComponent {
  30. static propTypes = {
  31. disabledAcct: PropTypes.string.isRequired,
  32. movedToAcct: PropTypes.string,
  33. onLogout: PropTypes.func.isRequired,
  34. intl: PropTypes.object.isRequired,
  35. };
  36. handleLogOutClick = e => {
  37. e.preventDefault();
  38. e.stopPropagation();
  39. this.props.onLogout();
  40. return false;
  41. }
  42. render () {
  43. const { disabledAcct, movedToAcct } = this.props;
  44. const disabledAccountLink = (
  45. <Link to={`/@${disabledAcct}`}>
  46. {disabledAcct}@{domain}
  47. </Link>
  48. );
  49. return (
  50. <div className='sign-in-banner'>
  51. <p>
  52. {movedToAcct ? (
  53. <FormattedMessage
  54. id='moved_to_account_banner.text'
  55. defaultMessage='Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.'
  56. values={{
  57. disabledAccount: disabledAccountLink,
  58. movedToAccount: <Link to={`/@${movedToAcct}`}>{movedToAcct.includes('@') ? movedToAcct : `${movedToAcct}@${domain}`}</Link>,
  59. }}
  60. />
  61. ) : (
  62. <FormattedMessage
  63. id='disabled_account_banner.text'
  64. defaultMessage='Your account {disabledAccount} is currently disabled.'
  65. values={{
  66. disabledAccount: disabledAccountLink,
  67. }}
  68. />
  69. )}
  70. </p>
  71. <a href='/auth/edit' className='button button--block'>
  72. <FormattedMessage id='disabled_account_banner.account_settings' defaultMessage='Account settings' />
  73. </a>
  74. <button type='button' className='button button--block button-tertiary' onClick={this.handleLogOutClick}>
  75. <FormattedMessage id='confirmations.logout.confirm' defaultMessage='Log out' />
  76. </button>
  77. </div>
  78. );
  79. }
  80. };