- {
- !props.auth.isLoading ?
-
- :
-
- }
+const SignInContent = ({
+ handleChange,
+ handleChangeEmail,
+ emailToBeResent,
+ handleResendConfirmation,
+ emailConfirmationLoading,
+ emailConfirmationSuccess,
+ formData,
+ ...props
+}) => {
+
+ return (
+
+
+
+ {props.auth.emailConfirmationFailure ? lang.t('signIn.emailConfirmCTA') : lang.t('signIn.signIn')}
+
+
+
+
+
+
+
+ {lang.t('signIn.or')}
+
+
+ { props.auth.error &&
{props.auth.error} }
+ {
+ props.auth.emailConfirmationFailure
+ ?
+ :
+ }
+
-
-
-
-);
+ );
+};
+
+SignInContent.propTypes = {
+ emailConfirmationLoading: PropTypes.bool.isRequired,
+ emailConfirmationSuccess: PropTypes.bool.isRequired,
+ handleResendConfirmation: PropTypes.func.isRequired,
+ handleChangeEmail: PropTypes.func.isRequired,
+ emailToBeResent: PropTypes.string.isRequired
+};
export default SignInContent;
diff --git a/client/coral-sign-in/components/SignUpContent.js b/client/coral-sign-in/components/SignUpContent.js
index 4144b1d2f..246d9d884 100644
--- a/client/coral-sign-in/components/SignUpContent.js
+++ b/client/coral-sign-in/components/SignUpContent.js
@@ -1,9 +1,6 @@
import React from 'react';
-import FormField from './FormField';
import Alert from './Alert';
-import Button from 'coral-ui/components/Button';
-import Spinner from 'coral-ui/components/Spinner';
-import Success from 'coral-ui/components/Success';
+import {Button, FormField, Spinner, Success} from 'coral-ui';
import styles from './styles.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import translations from '../translations';
diff --git a/client/coral-sign-in/components/styles.css b/client/coral-sign-in/components/styles.css
index f1a7bace3..08146f73f 100644
--- a/client/coral-sign-in/components/styles.css
+++ b/client/coral-sign-in/components/styles.css
@@ -14,28 +14,6 @@
font-size: 1.2em;
}
-.formField {
- margin-top: 15px;
-}
-
-.formField label {
- font-size: 1.08em;
- font-weight: bold;
- margin-bottom: 5px;
-}
-
-.formField input {
- width: 100%;
- display: block;
- border: none;
- outline: none;
- border: 1px solid rgba(0,0,0,.12);
- padding: 10px 6px;
- box-sizing: border-box;
- border-radius: 2px;
- margin: 5px auto;
-}
-
.footer {
margin: 20px auto 10px;
text-align: center;
@@ -150,3 +128,15 @@ input.error{
background-color: 1px solid coral;
padding: 10px;
}
+
+.emailConfirmDialog {
+ margin-top: 15px;
+}
+
+.confirmLabel {
+ display: block;
+}
+
+.confirmSubmit {
+
+}
diff --git a/client/coral-sign-in/containers/SignInContainer.js b/client/coral-sign-in/containers/SignInContainer.js
index 9e9ca1f72..2435cdcfd 100644
--- a/client/coral-sign-in/containers/SignInContainer.js
+++ b/client/coral-sign-in/containers/SignInContainer.js
@@ -16,6 +16,7 @@ import {
hideSignInDialog,
fetchSignInFacebook,
fetchForgotPassword,
+ requestConfirmEmail,
facebookCallback,
invalidForm,
validForm,
@@ -30,6 +31,7 @@ class SignInContainer extends Component {
password: '',
confirmPassword: ''
},
+ emailToBeResent: '',
errors: {},
showErrors: false
};
@@ -38,9 +40,10 @@ class SignInContainer extends Component {
super(props);
this.state = this.initialState;
this.handleChange = this.handleChange.bind(this);
+ this.handleChangeEmail = this.handleChangeEmail.bind(this);
+ this.handleResendConfirmation = this.handleResendConfirmation.bind(this);
this.handleSignUp = this.handleSignUp.bind(this);
this.handleSignIn = this.handleSignIn.bind(this);
- this.handleClose = this.handleClose.bind(this);
this.addError = this.addError.bind(this);
}
@@ -71,6 +74,23 @@ class SignInContainer extends Component {
});
}
+ handleChangeEmail(e) {
+ const {value} = e.target;
+ this.setState({emailToBeResent: value});
+ }
+
+ handleResendConfirmation(e) {
+ e.preventDefault();
+ this.props.requestConfirmEmail(this.state.emailToBeResent)
+ .then(() => {
+ setTimeout(() => {
+
+ // allow success UI to be shown for a second, and then close the modal
+ this.props.handleClose();
+ }, 2500);
+ });
+ }
+
addError(name, error) {
return this.setState(state => ({
errors: {
@@ -124,12 +144,9 @@ class SignInContainer extends Component {
this.props.fetchSignIn(this.state.formData);
}
- handleClose() {
- this.props.hideSignInDialog();
- }
-
render() {
const {auth, showSignInDialog, noButton, offset} = this.props;
+ const {emailConfirmationLoading, emailConfirmationSuccess} = auth;
return (
{!noButton &&