From 5e0bb245ed624105a0ee3ed8590f38b1696ebed8 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Fri, 25 Oct 2019 14:53:13 -0400 Subject: [PATCH] add values for existingUser/resendingVerificationEmail --- dist/bundle.es.js | 48 +++++++++++++++++++-------- dist/bundle.js | 62 +++++++++++++++++++++++++++-------- src/constants/action_types.js | 4 ++- src/index.js | 2 ++ src/redux/actions/user.js | 13 ++++---- src/redux/reducers/user.js | 23 +++++++++++-- src/redux/selectors/user.js | 10 ++++++ 7 files changed, 124 insertions(+), 38 deletions(-) diff --git a/dist/bundle.es.js b/dist/bundle.es.js index 374a9df..bb5142e 100644 --- a/dist/bundle.es.js +++ b/dist/bundle.es.js @@ -24,7 +24,9 @@ const USER_EMAIL_VERIFY_SET = 'USER_EMAIL_VERIFY_SET'; const USER_EMAIL_VERIFY_STARTED = 'USER_EMAIL_VERIFY_STARTED'; const USER_EMAIL_VERIFY_SUCCESS = 'USER_EMAIL_VERIFY_SUCCESS'; const USER_EMAIL_VERIFY_FAILURE = 'USER_EMAIL_VERIFY_FAILURE'; -const USER_EMAIL_VERIFY_RETRY = 'USER_EMAIL_VERIFY_RETRY'; +const USER_EMAIL_VERIFY_RETRY_STARTED = 'USER_EMAIL_VERIFY_RETRY_STARTED'; +const USER_EMAIL_VERIFY_RETRY_FAILURE = 'USER_EMAIL_VERIFY_RETRY_FAILURE'; +const USER_EMAIL_VERIFY_RETRY_SUCCESS = 'USER_EMAIL_VERIFY_RETRY_SUCCESS'; const USER_PHONE_RESET = 'USER_PHONE_RESET'; const USER_PHONE_NEW_STARTED = 'USER_PHONE_NEW_STARTED'; const USER_PHONE_NEW_SUCCESS = 'USER_PHONE_NEW_SUCCESS'; @@ -147,7 +149,9 @@ var action_types = /*#__PURE__*/Object.freeze({ USER_EMAIL_VERIFY_STARTED: USER_EMAIL_VERIFY_STARTED, USER_EMAIL_VERIFY_SUCCESS: USER_EMAIL_VERIFY_SUCCESS, USER_EMAIL_VERIFY_FAILURE: USER_EMAIL_VERIFY_FAILURE, - USER_EMAIL_VERIFY_RETRY: USER_EMAIL_VERIFY_RETRY, + USER_EMAIL_VERIFY_RETRY_STARTED: USER_EMAIL_VERIFY_RETRY_STARTED, + USER_EMAIL_VERIFY_RETRY_FAILURE: USER_EMAIL_VERIFY_RETRY_FAILURE, + USER_EMAIL_VERIFY_RETRY_SUCCESS: USER_EMAIL_VERIFY_RETRY_SUCCESS, USER_PHONE_RESET: USER_PHONE_RESET, USER_PHONE_NEW_STARTED: USER_PHONE_NEW_STARTED, USER_PHONE_NEW_SUCCESS: USER_PHONE_NEW_SUCCESS, @@ -1101,6 +1105,8 @@ const selectState$2 = state => state.user || {}; const selectAuthenticationIsPending = reselect.createSelector(selectState$2, state => state.authenticationIsPending); const selectUserIsPending = reselect.createSelector(selectState$2, state => state.userIsPending); const selectUser = reselect.createSelector(selectState$2, state => state.user); +const selectEmailAlreadyExists = reselect.createSelector(selectState$2, state => state.emailAlreadyExists); +const selectResendingVerificationEmail = reselect.createSelector(selectState$2, state => state.resendingVerificationEmail); const selectUserEmail = reselect.createSelector(selectUser, user => user ? user.primary_email : null); const selectUserPhone = reselect.createSelector(selectUser, user => user ? user.phone_number : null); const selectUserCountryCode = reselect.createSelector(selectUser, user => user ? user.country_code : null); @@ -1363,6 +1369,9 @@ function doUserEmailNew(email) { send_verification_email: true }, 'post').catch(error => { if (error.response && error.response.status === 409) { + dispatch({ + type: USER_EMAIL_NEW_EXISTS + }); return Lbryio.call('user_email', 'resend_token', { email, only_if_expired: true @@ -1376,23 +1385,18 @@ function doUserEmailNew(email) { function doUserResendVerificationEmail(email) { return dispatch => { dispatch({ - type: USER_EMAIL_VERIFY_RETRY, - email + type: USER_EMAIL_VERIFY_RETRY_STARTED }); const success = () => { dispatch({ - type: USER_EMAIL_NEW_SUCCESS, - data: { - email - } + type: USER_EMAIL_VERIFY_RETRY_SUCCESS }); - dispatch(doUserFetch()); }; const failure = error => { dispatch({ - type: USER_EMAIL_NEW_FAILURE, + type: USER_EMAIL_VERIFY_RETRY_FAILURE, data: { error } @@ -2769,6 +2773,8 @@ const defaultState$3 = { emailNewIsPending: false, emailNewErrorMessage: '', emailToVerify: '', + emailAlreadyExists: false, + resendingVerificationEmail: false, inviteNewErrorMessage: '', inviteNewIsPending: false, inviteStatusIsPending: false, @@ -2854,7 +2860,8 @@ reducers$2[USER_PHONE_VERIFY_FAILURE] = (state, action) => Object.assign({}, sta reducers$2[USER_EMAIL_NEW_STARTED] = state => Object.assign({}, state, { emailNewIsPending: true, - emailNewErrorMessage: '' + emailNewErrorMessage: '', + emailAlreadyExists: false }); reducers$2[USER_EMAIL_NEW_SUCCESS] = (state, action) => { @@ -2867,9 +2874,8 @@ reducers$2[USER_EMAIL_NEW_SUCCESS] = (state, action) => { }); }; -reducers$2[USER_EMAIL_NEW_EXISTS] = (state, action) => Object.assign({}, state, { - emailToVerify: action.data.email, - emailNewIsPending: false +reducers$2[USER_EMAIL_NEW_EXISTS] = state => Object.assign({}, state, { + emailAlreadyExists: true }); reducers$2[USER_EMAIL_NEW_FAILURE] = (state, action) => Object.assign({}, state, { @@ -2979,6 +2985,18 @@ reducers$2[USER_YOUTUBE_IMPORT_FAILURE] = (state, action) => Object.assign({}, s youtubeChannelImportErrorMessage: action.data }); +reducers$2[USER_EMAIL_VERIFY_RETRY_STARTED] = state => Object.assign({}, state, { + resendingVerificationEmail: true +}); + +reducers$2[USER_EMAIL_VERIFY_RETRY_SUCCESS] = state => Object.assign({}, state, { + resendingVerificationEmail: false +}); + +reducers$2[USER_EMAIL_VERIFY_RETRY_FAILURE] = state => Object.assign({}, state, { + resendingVerificationEmail: false +}); + function userReducer(state = defaultState$3, action) { const handler = reducers$2[action.type]; if (handler) return handler(state, action); @@ -3430,6 +3448,7 @@ exports.selectClaimedRewardsById = selectClaimedRewardsById; exports.selectClaimedRewardsByTransactionId = selectClaimedRewardsByTransactionId; exports.selectClaimsPendingByType = selectClaimsPendingByType; exports.selectCurrentUploads = selectCurrentUploads; +exports.selectEmailAlreadyExists = selectEmailAlreadyExists; exports.selectEmailNewErrorMessage = selectEmailNewErrorMessage; exports.selectEmailNewIsPending = selectEmailNewIsPending; exports.selectEmailToVerify = selectEmailToVerify; @@ -3458,6 +3477,7 @@ exports.selectPhoneToVerify = selectPhoneToVerify; exports.selectPhoneVerifyErrorMessage = selectPhoneVerifyErrorMessage; exports.selectPhoneVerifyIsPending = selectPhoneVerifyIsPending; exports.selectReferralReward = selectReferralReward; +exports.selectResendingVerificationEmail = selectResendingVerificationEmail; exports.selectRewardContentClaimIds = selectRewardContentClaimIds; exports.selectSetSyncErrorMessage = selectSetSyncErrorMessage; exports.selectSetSyncIsPending = selectSetSyncIsPending; diff --git a/dist/bundle.js b/dist/bundle.js index ca5b398..f2612e3 100644 --- a/dist/bundle.js +++ b/dist/bundle.js @@ -371,6 +371,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selectEmailVerifyErrorMessage", function() { return redux_selectors_user__WEBPACK_IMPORTED_MODULE_30__["selectEmailVerifyErrorMessage"]; }); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selectEmailAlreadyExists", function() { return redux_selectors_user__WEBPACK_IMPORTED_MODULE_30__["selectEmailAlreadyExists"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selectResendingVerificationEmail", function() { return redux_selectors_user__WEBPACK_IMPORTED_MODULE_30__["selectResendingVerificationEmail"]; }); + /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selectPhoneVerifyErrorMessage", function() { return redux_selectors_user__WEBPACK_IMPORTED_MODULE_30__["selectPhoneVerifyErrorMessage"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selectPhoneVerifyIsPending", function() { return redux_selectors_user__WEBPACK_IMPORTED_MODULE_30__["selectPhoneVerifyIsPending"]; }); @@ -531,7 +535,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USER_EMAIL_VERIFY_STARTED", function() { return USER_EMAIL_VERIFY_STARTED; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USER_EMAIL_VERIFY_SUCCESS", function() { return USER_EMAIL_VERIFY_SUCCESS; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USER_EMAIL_VERIFY_FAILURE", function() { return USER_EMAIL_VERIFY_FAILURE; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USER_EMAIL_VERIFY_RETRY", function() { return USER_EMAIL_VERIFY_RETRY; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USER_EMAIL_VERIFY_RETRY_STARTED", function() { return USER_EMAIL_VERIFY_RETRY_STARTED; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USER_EMAIL_VERIFY_RETRY_FAILURE", function() { return USER_EMAIL_VERIFY_RETRY_FAILURE; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USER_EMAIL_VERIFY_RETRY_SUCCESS", function() { return USER_EMAIL_VERIFY_RETRY_SUCCESS; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USER_PHONE_RESET", function() { return USER_PHONE_RESET; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USER_PHONE_NEW_STARTED", function() { return USER_PHONE_NEW_STARTED; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USER_PHONE_NEW_SUCCESS", function() { return USER_PHONE_NEW_SUCCESS; }); @@ -645,7 +651,9 @@ var USER_EMAIL_VERIFY_SET = 'USER_EMAIL_VERIFY_SET'; var USER_EMAIL_VERIFY_STARTED = 'USER_EMAIL_VERIFY_STARTED'; var USER_EMAIL_VERIFY_SUCCESS = 'USER_EMAIL_VERIFY_SUCCESS'; var USER_EMAIL_VERIFY_FAILURE = 'USER_EMAIL_VERIFY_FAILURE'; -var USER_EMAIL_VERIFY_RETRY = 'USER_EMAIL_VERIFY_RETRY'; +var USER_EMAIL_VERIFY_RETRY_STARTED = 'USER_EMAIL_VERIFY_RETRY_STARTED'; +var USER_EMAIL_VERIFY_RETRY_FAILURE = 'USER_EMAIL_VERIFY_RETRY_FAILURE'; +var USER_EMAIL_VERIFY_RETRY_SUCCESS = 'USER_EMAIL_VERIFY_RETRY_SUCCESS'; var USER_PHONE_RESET = 'USER_PHONE_RESET'; var USER_PHONE_NEW_STARTED = 'USER_PHONE_NEW_STARTED'; var USER_PHONE_NEW_SUCCESS = 'USER_PHONE_NEW_SUCCESS'; @@ -2432,6 +2440,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "selectAuthenticationIsPending", function() { return selectAuthenticationIsPending; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "selectUserIsPending", function() { return selectUserIsPending; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "selectUser", function() { return selectUser; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "selectEmailAlreadyExists", function() { return selectEmailAlreadyExists; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "selectResendingVerificationEmail", function() { return selectResendingVerificationEmail; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "selectUserEmail", function() { return selectUserEmail; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "selectUserPhone", function() { return selectUserPhone; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "selectUserCountryCode", function() { return selectUserCountryCode; }); @@ -2477,6 +2487,12 @@ var selectUserIsPending = Object(reselect__WEBPACK_IMPORTED_MODULE_0__["createSe var selectUser = Object(reselect__WEBPACK_IMPORTED_MODULE_0__["createSelector"])(selectState, function (state) { return state.user; }); +var selectEmailAlreadyExists = Object(reselect__WEBPACK_IMPORTED_MODULE_0__["createSelector"])(selectState, function (state) { + return state.emailAlreadyExists; +}); +var selectResendingVerificationEmail = Object(reselect__WEBPACK_IMPORTED_MODULE_0__["createSelector"])(selectState, function (state) { + return state.resendingVerificationEmail; +}); var selectUserEmail = Object(reselect__WEBPACK_IMPORTED_MODULE_0__["createSelector"])(selectUser, function (user) { return user ? user.primary_email : null; }); @@ -2853,6 +2869,9 @@ function doUserEmailNew(email) { send_verification_email: true }, 'post')["catch"](function (error) { if (error.response && error.response.status === 409) { + dispatch({ + type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__["USER_EMAIL_NEW_EXISTS"] + }); return lbryio__WEBPACK_IMPORTED_MODULE_5__["default"].call('user_email', 'resend_token', { email: email, only_if_expired: true @@ -2866,23 +2885,18 @@ function doUserEmailNew(email) { function doUserResendVerificationEmail(email) { return function (dispatch) { dispatch({ - type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__["USER_EMAIL_VERIFY_RETRY"], - email: email + type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__["USER_EMAIL_VERIFY_RETRY_STARTED"] }); var success = function success() { dispatch({ - type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__["USER_EMAIL_NEW_SUCCESS"], - data: { - email: email - } + type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__["USER_EMAIL_VERIFY_RETRY_SUCCESS"] }); - dispatch(doUserFetch()); }; var failure = function failure(error) { dispatch({ - type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__["USER_EMAIL_NEW_FAILURE"], + type: constants_action_types__WEBPACK_IMPORTED_MODULE_1__["USER_EMAIL_VERIFY_RETRY_FAILURE"], data: { error: error } @@ -4410,6 +4424,8 @@ var defaultState = { emailNewIsPending: false, emailNewErrorMessage: '', emailToVerify: '', + emailAlreadyExists: false, + resendingVerificationEmail: false, inviteNewErrorMessage: '', inviteNewIsPending: false, inviteStatusIsPending: false, @@ -4520,7 +4536,8 @@ reducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__["USER_PHONE_VERIFY_ reducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__["USER_EMAIL_NEW_STARTED"]] = function (state) { return Object.assign({}, state, { emailNewIsPending: true, - emailNewErrorMessage: '' + emailNewErrorMessage: '', + emailAlreadyExists: false }); }; @@ -4534,10 +4551,9 @@ reducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__["USER_EMAIL_NEW_SUC }); }; -reducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__["USER_EMAIL_NEW_EXISTS"]] = function (state, action) { +reducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__["USER_EMAIL_NEW_EXISTS"]] = function (state) { return Object.assign({}, state, { - emailToVerify: action.data.email, - emailNewIsPending: false + emailAlreadyExists: true }); }; @@ -4680,6 +4696,24 @@ reducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__["USER_YOUTUBE_IMPOR }); }; +reducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__["USER_EMAIL_VERIFY_RETRY_STARTED"]] = function (state) { + return Object.assign({}, state, { + resendingVerificationEmail: true + }); +}; + +reducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__["USER_EMAIL_VERIFY_RETRY_SUCCESS"]] = function (state) { + return Object.assign({}, state, { + resendingVerificationEmail: false + }); +}; + +reducers[constants_action_types__WEBPACK_IMPORTED_MODULE_0__["USER_EMAIL_VERIFY_RETRY_FAILURE"]] = function (state) { + return Object.assign({}, state, { + resendingVerificationEmail: false + }); +}; + function userReducer() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState; var action = arguments.length > 1 ? arguments[1] : undefined; diff --git a/src/constants/action_types.js b/src/constants/action_types.js index b01704c..9f8b3f5 100644 --- a/src/constants/action_types.js +++ b/src/constants/action_types.js @@ -14,7 +14,9 @@ export const USER_EMAIL_VERIFY_SET = 'USER_EMAIL_VERIFY_SET'; export const USER_EMAIL_VERIFY_STARTED = 'USER_EMAIL_VERIFY_STARTED'; export const USER_EMAIL_VERIFY_SUCCESS = 'USER_EMAIL_VERIFY_SUCCESS'; export const USER_EMAIL_VERIFY_FAILURE = 'USER_EMAIL_VERIFY_FAILURE'; -export const USER_EMAIL_VERIFY_RETRY = 'USER_EMAIL_VERIFY_RETRY'; +export const USER_EMAIL_VERIFY_RETRY_STARTED = 'USER_EMAIL_VERIFY_RETRY_STARTED'; +export const USER_EMAIL_VERIFY_RETRY_FAILURE = 'USER_EMAIL_VERIFY_RETRY_FAILURE'; +export const USER_EMAIL_VERIFY_RETRY_SUCCESS = 'USER_EMAIL_VERIFY_RETRY_SUCCESS'; export const USER_PHONE_RESET = 'USER_PHONE_RESET'; export const USER_PHONE_NEW_STARTED = 'USER_PHONE_NEW_STARTED'; export const USER_PHONE_NEW_SUCCESS = 'USER_PHONE_NEW_SUCCESS'; diff --git a/src/index.js b/src/index.js index 81dad29..6647ac4 100644 --- a/src/index.js +++ b/src/index.js @@ -144,6 +144,8 @@ export { selectPhoneNewIsPending, selectEmailVerifyIsPending, selectEmailVerifyErrorMessage, + selectEmailAlreadyExists, + selectResendingVerificationEmail, selectPhoneVerifyErrorMessage, selectPhoneVerifyIsPending, selectIdentityVerifyIsPending, diff --git a/src/redux/actions/user.js b/src/redux/actions/user.js index b8023f7..5b5d7c8 100644 --- a/src/redux/actions/user.js +++ b/src/redux/actions/user.js @@ -230,6 +230,10 @@ export function doUserEmailNew(email) { Lbryio.call('user_email', 'new', { email, send_verification_email: true }, 'post') .catch(error => { if (error.response && error.response.status === 409) { + dispatch({ + type: ACTIONS.USER_EMAIL_NEW_EXISTS, + }); + return Lbryio.call( 'user_email', 'resend_token', @@ -246,21 +250,18 @@ export function doUserEmailNew(email) { export function doUserResendVerificationEmail(email) { return dispatch => { dispatch({ - type: ACTIONS.USER_EMAIL_VERIFY_RETRY, - email, + type: ACTIONS.USER_EMAIL_VERIFY_RETRY_STARTED, }); const success = () => { dispatch({ - type: ACTIONS.USER_EMAIL_NEW_SUCCESS, - data: { email }, + type: ACTIONS.USER_EMAIL_VERIFY_RETRY_SUCCESS, }); - dispatch(doUserFetch()); }; const failure = error => { dispatch({ - type: ACTIONS.USER_EMAIL_NEW_FAILURE, + type: ACTIONS.USER_EMAIL_VERIFY_RETRY_FAILURE, data: { error }, }); }; diff --git a/src/redux/reducers/user.js b/src/redux/reducers/user.js index 8072bfc..1de781a 100644 --- a/src/redux/reducers/user.js +++ b/src/redux/reducers/user.js @@ -8,6 +8,8 @@ const defaultState = { emailNewIsPending: false, emailNewErrorMessage: '', emailToVerify: '', + emailAlreadyExists: false, + resendingVerificationEmail: false, inviteNewErrorMessage: '', inviteNewIsPending: false, inviteStatusIsPending: false, @@ -107,6 +109,7 @@ reducers[ACTIONS.USER_EMAIL_NEW_STARTED] = state => Object.assign({}, state, { emailNewIsPending: true, emailNewErrorMessage: '', + emailAlreadyExists: false, }); reducers[ACTIONS.USER_EMAIL_NEW_SUCCESS] = (state, action) => { @@ -119,10 +122,9 @@ reducers[ACTIONS.USER_EMAIL_NEW_SUCCESS] = (state, action) => { }); }; -reducers[ACTIONS.USER_EMAIL_NEW_EXISTS] = (state, action) => +reducers[ACTIONS.USER_EMAIL_NEW_EXISTS] = state => Object.assign({}, state, { - emailToVerify: action.data.email, - emailNewIsPending: false, + emailAlreadyExists: true, }); reducers[ACTIONS.USER_EMAIL_NEW_FAILURE] = (state, action) => @@ -248,6 +250,21 @@ reducers[ACTIONS.USER_YOUTUBE_IMPORT_FAILURE] = (state, action) => youtubeChannelImportErrorMessage: action.data, }); +reducers[ACTIONS.USER_EMAIL_VERIFY_RETRY_STARTED] = state => + Object.assign({}, state, { + resendingVerificationEmail: true, + }); + +reducers[ACTIONS.USER_EMAIL_VERIFY_RETRY_SUCCESS] = state => + Object.assign({}, state, { + resendingVerificationEmail: false, + }); + +reducers[ACTIONS.USER_EMAIL_VERIFY_RETRY_FAILURE] = state => + Object.assign({}, state, { + resendingVerificationEmail: false, + }); + export function userReducer(state = defaultState, action) { const handler = reducers[action.type]; if (handler) return handler(state, action); diff --git a/src/redux/selectors/user.js b/src/redux/selectors/user.js index b2b4165..1857926 100644 --- a/src/redux/selectors/user.js +++ b/src/redux/selectors/user.js @@ -11,6 +11,16 @@ export const selectUserIsPending = createSelector(selectState, state => state.us export const selectUser = createSelector(selectState, state => state.user); +export const selectEmailAlreadyExists = createSelector( + selectState, + state => state.emailAlreadyExists +); + +export const selectResendingVerificationEmail = createSelector( + selectState, + state => state.resendingVerificationEmail +); + export const selectUserEmail = createSelector( selectUser, user => (user ? user.primary_email : null)