diff --git a/app/soapbox/__fixtures__/intlMessages.json b/app/soapbox/__fixtures__/intlMessages.json
index a8217149e..d46a8934c 100644
--- a/app/soapbox/__fixtures__/intlMessages.json
+++ b/app/soapbox/__fixtures__/intlMessages.json
@@ -834,6 +834,7 @@
"registration.lead": "With an account on {instance} you\"ll be able to follow people on any server in the fediverse.",
"registration.sign_up": "Sign up",
"registration.tos": "Terms of Service",
+ "registration.reason": "Reason for Joining",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",
"relative_time.just_now": "now",
diff --git a/app/soapbox/actions/auth.js b/app/soapbox/actions/auth.js
index c241b801f..a8d6d5f0f 100644
--- a/app/soapbox/actions/auth.js
+++ b/app/soapbox/actions/auth.js
@@ -133,15 +133,20 @@ export function logOut() {
export function register(params) {
return (dispatch, getState) => {
const needsConfirmation = getState().getIn(['instance', 'pleroma', 'metadata', 'account_activation_required']);
+ const needsApproval = getState().getIn(['instance', 'approval_required']);
dispatch({ type: AUTH_REGISTER_REQUEST });
return dispatch(createAppAndToken()).then(() => {
return api(getState, 'app').post('/api/v1/accounts', params);
}).then(response => {
dispatch({ type: AUTH_REGISTER_SUCCESS, token: response.data });
dispatch(authLoggedIn(response.data));
- return needsConfirmation
- ? dispatch(showAlert('', 'Check your email for further instructions.'))
- : dispatch(fetchMe());
+ if (needsConfirmation) {
+ return dispatch(showAlert('', 'Check your email for further instructions.'));
+ } else if (needsApproval) {
+ return dispatch(showAlert('', 'Your account has been submitted for approval.'));
+ } else {
+ return dispatch(fetchMe());
+ }
}).catch(error => {
dispatch({ type: AUTH_REGISTER_FAIL, error });
throw error;
diff --git a/app/soapbox/features/forms/index.js b/app/soapbox/features/forms/index.js
index 75feac6d4..471a173f8 100644
--- a/app/soapbox/features/forms/index.js
+++ b/app/soapbox/features/forms/index.js
@@ -68,6 +68,17 @@ LabelInput.propTypes = {
dispatch: PropTypes.func,
};
+export const LabelTextarea = ({ label, dispatch, ...props }) => (
+
+
+
+);
+
+LabelTextarea.propTypes = {
+ label: FormPropTypes.label.isRequired,
+ dispatch: PropTypes.func,
+};
+
export class SimpleInput extends ImmutablePureComponent {
static propTypes = {
@@ -88,6 +99,26 @@ export class SimpleInput extends ImmutablePureComponent {
}
+export class SimpleTextarea extends ImmutablePureComponent {
+
+ static propTypes = {
+ label: FormPropTypes.label,
+ hint: PropTypes.node,
+ }
+
+ render() {
+ const { hint, ...props } = this.props;
+ const Input = this.props.label ? LabelTextarea : 'textarea';
+
+ return (
+
+
+
+ );
+ }
+
+}
+
export class SimpleForm extends ImmutablePureComponent {
static propTypes = {
diff --git a/app/soapbox/features/landing_page/components/registration_form.js b/app/soapbox/features/landing_page/components/registration_form.js
index 36faad103..0d6a9db71 100644
--- a/app/soapbox/features/landing_page/components/registration_form.js
+++ b/app/soapbox/features/landing_page/components/registration_form.js
@@ -9,6 +9,7 @@ import {
SimpleForm,
SimpleInput,
TextInput,
+ SimpleTextarea,
Checkbox,
} from 'soapbox/features/forms';
import { register } from 'soapbox/actions/auth';
@@ -136,6 +137,16 @@ class RegistrationForm extends ImmutablePureComponent {
onChange={this.onInputChange}
required
/>
+ {instance.get('approval_required') &&
+ }
+ hint={}
+ name='reason'
+ maxLength={500}
+ autoComplete='off'
+ onChange={this.onInputChange}
+ required
+ />}