about summary refs log tree commit diff
path: root/app/javascript/mastodon/features/interaction_modal/index.js
diff options
context:
space:
mode:
authorClaire <claire.github-309c@sitedethib.com>2022-10-26 19:35:55 +0200
committerGitHub <noreply@github.com>2022-10-26 19:35:55 +0200
commit2277913f3f01d3bdb9a1661f019221b1cb185fbb (patch)
tree38ea4adede32a32492b81cc3e0d5fe8fc18ca4cf /app/javascript/mastodon/features/interaction_modal/index.js
parentaafbc82d88d54ad9c70c6fca0186fb48b423f338 (diff)
Add closed registrations modal (#19437)
Diffstat (limited to 'app/javascript/mastodon/features/interaction_modal/index.js')
-rw-r--r--app/javascript/mastodon/features/interaction_modal/index.js33
1 files changed, 31 insertions, 2 deletions
diff --git a/app/javascript/mastodon/features/interaction_modal/index.js b/app/javascript/mastodon/features/interaction_modal/index.js
index 6a7aa9c1c..9f7747903 100644
--- a/app/javascript/mastodon/features/interaction_modal/index.js
+++ b/app/javascript/mastodon/features/interaction_modal/index.js
@@ -5,11 +5,19 @@ import { registrationsOpen } from 'mastodon/initial_state';
 import { connect } from 'react-redux';
 import Icon from 'mastodon/components/icon';
 import classNames from 'classnames';
+import { openModal, closeModal } from 'mastodon/actions/modal';
 
 const mapStateToProps = (state, { accountId }) => ({
   displayNameHtml: state.getIn(['accounts', accountId, 'display_name_html']),
 });
 
+const mapDispatchToProps = (dispatch) => ({
+  onSignupClick() {
+    dispatch(closeModal());
+    dispatch(openModal('CLOSED_REGISTRATIONS'));
+  },
+});
+
 class Copypaste extends React.PureComponent {
 
   static propTypes = {
@@ -66,15 +74,20 @@ class Copypaste extends React.PureComponent {
 
 }
 
-export default @connect(mapStateToProps)
+export default @connect(mapStateToProps, mapDispatchToProps)
 class InteractionModal extends React.PureComponent {
 
   static propTypes = {
     displayNameHtml: PropTypes.string,
     url: PropTypes.string,
     type: PropTypes.oneOf(['reply', 'reblog', 'favourite', 'follow']),
+    onSignupClick: PropTypes.func.isRequired,
   };
 
+  handleSignupClick = () => {
+    this.props.onSignupClick();
+  }
+
   render () {
     const { url, type, displayNameHtml } = this.props;
 
@@ -105,6 +118,22 @@ class InteractionModal extends React.PureComponent {
       break;
     }
 
+    let signupButton;
+
+    if (registrationsOpen) {
+      signupButton = (
+        <a href='/auth/sign_up' className='button button--block button-tertiary'>
+          <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
+        </a>
+      );
+    } else {
+      signupButton = (
+        <button className='button button--block button-tertiary' onClick={this.handleSignupClick}>
+          <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
+        </button>
+      );
+    }
+
     return (
       <div className='modal-root__modal interaction-modal'>
         <div className='interaction-modal__lead'>
@@ -116,7 +145,7 @@ class InteractionModal extends React.PureComponent {
           <div className='interaction-modal__choices__choice'>
             <h3><FormattedMessage id='interaction_modal.on_this_server' defaultMessage='On this server' /></h3>
             <a href='/auth/sign_in' className='button button--block'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Sign in' /></a>
-            <a href={registrationsOpen ? '/auth/sign_up' : 'https://joinmastodon.org/servers'} className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' /></a>
+            {signupButton}
           </div>
 
           <div className='interaction-modal__choices__choice'>