diff --git a/client/coral-framework/actions/auth.js b/client/coral-framework/actions/auth.js
index 896fb9aab..e25eb4174 100644
--- a/client/coral-framework/actions/auth.js
+++ b/client/coral-framework/actions/auth.js
@@ -30,8 +30,8 @@ export const fetchSignIn = (formData) => dispatch => {
// Sign In - Facebook
const signInFacebookRequest = () => ({type: actions.FETCH_SIGNIN_FACEBOOK_REQUEST});
-const signInFacebookSuccess = (user) => ({type: actions.FETCH_SIGNIN_FACEBOOK_SUCCESS, user});
-const signInFacebookFailure = (error) => ({type: actions.FETCH_SIGNIN_FACEBOOK_FAILURE, error});
+const signInFacebookSuccess = user => ({type: actions.FETCH_SIGNIN_FACEBOOK_SUCCESS, user});
+const signInFacebookFailure = error => ({type: actions.FETCH_SIGNIN_FACEBOOK_FAILURE, error});
export const fetchSignInFacebook = () => dispatch => {
dispatch(signInFacebookRequest());
@@ -58,15 +58,15 @@ export const facebookCallback = (err, data) => dispatch => {
// Sign Up Actions
const signUpRequest = () => ({type: actions.FETCH_SIGNUP_REQUEST});
-const signUpSuccess = () => ({type: actions.FETCH_SIGNUP_SUCCESS});
-const signUpFailure = () => ({type: actions.FETCH_SIGNUP_FAILURE});
+const signUpSuccess = user => ({type: actions.FETCH_SIGNUP_SUCCESS, user});
+const signUpFailure = error => ({type: actions.FETCH_SIGNUP_FAILURE, error});
-export const fetchSignUp = () => dispatch => {
+export const fetchSignUp = formData => dispatch => {
dispatch(signUpRequest());
- fetch(`${base}/auth`, getInit('POST'))
+ fetch(`${base}/user`, getInit('POST', formData))
.then(handleResp)
- .then(() => dispatch(signUpSuccess()))
- .catch(error => dispatch(signUpFailure(error)));
+ .then(({user}) => signUpSuccess(user))
+ .catch((error) => signUpFailure(error));
};
// Forgot Password Actions
@@ -97,3 +97,27 @@ export const logout = () => dispatch => {
.catch(error => dispatch(logOutFailure(error)));
};
+// Availability Checks Actions
+
+const availabilityRequest = () => ({type: actions.FETCH_AVAILABILITY_REQUEST});
+const availabilitySuccess = () => ({type: actions.FETCH_AVAILABILITY_SUCCESS});
+const availabilityFailure = () => ({type: actions.FETCH_AVAILABILITY_FAILURE});
+
+const availableField = field => ({type: actions.AVAILABLE_FIELD, field});
+const unavailableField = field => ({type: actions.UNAVAILABLE_FIELD, field});
+
+export const fetchCheckAvailability = formData => dispatch => {
+ dispatch(availabilityRequest());
+ fetch(`${base}/user/availability`, getInit('POST', formData))
+ .then(handleResp)
+ .then(({status}) => {
+ const [field] = Object.keys(formData);
+ dispatch(availabilitySuccess());
+ if (status === 'available') {
+ return dispatch(availableField(field));
+ }
+ return dispatch(unavailableField(field));
+ })
+ .catch((error) => availabilityFailure(error));
+};
+
diff --git a/client/coral-framework/constants/auth.js b/client/coral-framework/constants/auth.js
index 06558d513..5c0135f58 100644
--- a/client/coral-framework/constants/auth.js
+++ b/client/coral-framework/constants/auth.js
@@ -23,3 +23,10 @@ export const FETCH_FORGOT_PASSWORD_FAILURE = 'FETCH_FORGOT_PASSWORD_FAILURE';
export const LOGOUT_REQUEST = 'LOGOUT_REQUEST';
export const LOGOUT_SUCCESS = 'LOGOUT_SUCCESS';
export const LOGOUT_FAILURE = 'LOGOUT_FAILURE';
+
+export const FETCH_AVAILABILITY_REQUEST = 'FETCH_AVAILABILITY_REQUEST';
+export const FETCH_AVAILABILITY_SUCCESS = 'FETCH_AVAILABILITY_SUCCESS';
+export const FETCH_AVAILABILITY_FAILURE = 'FETCH_AVAILABILITY_FAILURE';
+
+export const AVAILABLE_FIELD = 'AVAILABLE_FIELD';
+export const UNAVAILABLE_FIELD = 'UNAVAILABLE_FIELD';
diff --git a/client/coral-framework/helpers/response.js b/client/coral-framework/helpers/response.js
index bccfc5a04..a18bd155f 100644
--- a/client/coral-framework/helpers/response.js
+++ b/client/coral-framework/helpers/response.js
@@ -20,6 +20,8 @@ export const getInit = (method, body) => {
export const handleResp = res => {
if (res.status === 401) {
throw new Error('Not Authorized to make this request');
+ } else if (res.status === 500) {
+ throw new Error(res.json());
} else if (res.status > 399) {
throw new Error('Error! Status ', res.status);
} else if (res.status === 204) {
diff --git a/client/coral-framework/reducers/auth.js b/client/coral-framework/reducers/auth.js
index 001c98346..10ac121e7 100644
--- a/client/coral-framework/reducers/auth.js
+++ b/client/coral-framework/reducers/auth.js
@@ -10,21 +10,24 @@ import {
FETCH_SIGNIN_SUCCESS,
FETCH_SIGNIN_FACEBOOK_SUCCESS,
FETCH_SIGNIN_FACEBOOK_FAILURE,
- LOGOUT_SUCCESS
+ LOGOUT_SUCCESS,
+ FETCH_SIGNUP_FAILURE,
+ AVAILABLE_FIELD,
+ UNAVAILABLE_FIELD
} from '../constants/auth';
const initialState = Map({
- auth: Map(),
isLoading: false,
loggedIn: false,
user: null,
showSignInDialog: false,
view: 'SIGNIN',
- signInError: ''
+ signInError: '',
+ signUpError: '',
+ emailAvailable: true,
+ displayNameAvailable: true,
});
-export const getEmail = state => state.auth.formData.email;
-
export default function auth (state = initialState, action) {
switch (action.type) {
case SHOW_SIGNIN_DIALOG :
@@ -60,10 +63,20 @@ export default function auth (state = initialState, action) {
return state
.set('error', action.error)
.set('user', null);
+ case FETCH_SIGNUP_FAILURE:
+ console.log(action);
+ return state
+ .set('signUpError', action.error);
case LOGOUT_SUCCESS:
return state
.set('loggedIn', false)
.set('user', null);
+ case AVAILABLE_FIELD:
+ return state
+ .set(`${action.field}Available`, true);
+ case UNAVAILABLE_FIELD:
+ return state
+ .set(`${action.field}Available`, false);
default :
return state;
}
diff --git a/client/coral-sign-in/components/SignInContent.js b/client/coral-sign-in/components/SignInContent.js
index aa3b712fa..2e22c0696 100644
--- a/client/coral-sign-in/components/SignInContent.js
+++ b/client/coral-sign-in/components/SignInContent.js
@@ -1,11 +1,9 @@
import React from 'react';
-import styles from './styles.css';
-
import Button from 'coral-ui/components/Button';
import FormField from './FormField';
import Alert from './Alert';
import Spinner from 'coral-ui/components/Spinner';
-
+import styles from './styles.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import translations from '../translations';
const lang = new I18n(translations);
@@ -27,7 +25,7 @@ const SignInContent = ({handleChange, formData, ...props}) => (
{lang.t('signIn.or')}
- { props.signInError &&