379 lines
10 KiB
JavaScript
379 lines
10 KiB
JavaScript
import * as ACTIONS from 'constants/action_types';
|
|
|
|
const reducers = {};
|
|
|
|
const defaultState = {
|
|
authenticationIsPending: false,
|
|
userIsPending: false,
|
|
emailNewIsPending: false,
|
|
emailNewErrorMessage: '',
|
|
emailToVerify: '',
|
|
emailAlreadyExists: false,
|
|
emailDoesNotExist: false,
|
|
resendingVerificationEmail: false,
|
|
passwordResetPending: false,
|
|
passwordResetSuccess: false,
|
|
passwordResetError: undefined,
|
|
passwordSetPending: false,
|
|
passwordSetSuccess: false,
|
|
passwordSetError: undefined,
|
|
inviteNewErrorMessage: '',
|
|
inviteNewIsPending: false,
|
|
inviteStatusIsPending: false,
|
|
invitesRemaining: undefined,
|
|
invitees: undefined,
|
|
referralLink: undefined,
|
|
referralCode: undefined,
|
|
user: undefined,
|
|
accessToken: undefined,
|
|
youtubeChannelImportPending: false,
|
|
youtubeChannelImportErrorMessage: '',
|
|
referrerSetIsPending: false,
|
|
referrerSetError: '',
|
|
};
|
|
|
|
reducers[ACTIONS.AUTHENTICATION_STARTED] = state =>
|
|
Object.assign({}, state, {
|
|
authenticationIsPending: true,
|
|
userIsPending: true,
|
|
accessToken: defaultState.accessToken,
|
|
});
|
|
|
|
reducers[ACTIONS.AUTHENTICATION_SUCCESS] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
authenticationIsPending: false,
|
|
userIsPending: false,
|
|
accessToken: action.data.accessToken,
|
|
user: action.data.user,
|
|
});
|
|
|
|
reducers[ACTIONS.AUTHENTICATION_FAILURE] = state =>
|
|
Object.assign({}, state, {
|
|
authenticationIsPending: false,
|
|
userIsPending: false,
|
|
user: null,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_FETCH_STARTED] = state =>
|
|
Object.assign({}, state, {
|
|
userIsPending: true,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_FETCH_SUCCESS] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
userIsPending: false,
|
|
user: action.data.user,
|
|
emailToVerify: action.data.user.has_verified_email ? null : state.emailToVerify,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_FETCH_FAILURE] = state =>
|
|
Object.assign({}, state, {
|
|
userIsPending: true,
|
|
user: null,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_PHONE_NEW_STARTED] = (state, action) => {
|
|
const user = Object.assign({}, state.user);
|
|
user.country_code = action.data.country_code;
|
|
return Object.assign({}, state, {
|
|
phoneNewIsPending: true,
|
|
phoneNewErrorMessage: '',
|
|
user,
|
|
});
|
|
};
|
|
|
|
reducers[ACTIONS.USER_PHONE_NEW_SUCCESS] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
phoneToVerify: action.data.phone,
|
|
phoneNewIsPending: false,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_PHONE_RESET] = state =>
|
|
Object.assign({}, state, {
|
|
phoneToVerify: null,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_PHONE_NEW_FAILURE] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
phoneNewIsPending: false,
|
|
phoneNewErrorMessage: action.data.error,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_PHONE_VERIFY_STARTED] = state =>
|
|
Object.assign({}, state, {
|
|
phoneVerifyIsPending: true,
|
|
phoneVerifyErrorMessage: '',
|
|
});
|
|
|
|
reducers[ACTIONS.USER_PHONE_VERIFY_SUCCESS] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
phoneToVerify: '',
|
|
phoneVerifyIsPending: false,
|
|
user: action.data.user,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_PHONE_VERIFY_FAILURE] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
phoneVerifyIsPending: false,
|
|
phoneVerifyErrorMessage: action.data.error,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_EMAIL_NEW_STARTED] = state =>
|
|
Object.assign({}, state, {
|
|
emailNewIsPending: true,
|
|
emailNewErrorMessage: '',
|
|
emailAlreadyExists: false,
|
|
emailDoesNotExist: false,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_EMAIL_NEW_SUCCESS] = (state, action) => {
|
|
const user = Object.assign({}, state.user);
|
|
user.primary_email = action.data.email;
|
|
return Object.assign({}, state, {
|
|
emailToVerify: action.data.email,
|
|
emailNewIsPending: false,
|
|
user,
|
|
});
|
|
};
|
|
|
|
reducers[ACTIONS.USER_EMAIL_NEW_EXISTS] = state =>
|
|
Object.assign({}, state, {
|
|
emailAlreadyExists: true,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_EMAIL_NEW_DOES_NOT_EXIST] = state =>
|
|
Object.assign({}, state, {
|
|
emailDoesNotExist: true,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_EMAIL_NEW_FAILURE] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
emailNewIsPending: false,
|
|
emailNewErrorMessage: action.data.error,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_EMAIL_NEW_CLEAR_ENTRY] = state => {
|
|
const newUser = { ...state.user };
|
|
delete newUser.primary_email;
|
|
|
|
return Object.assign({}, state, {
|
|
emailNewErrorMessage: null,
|
|
emailAlreadyExists: false,
|
|
emailDoesNotExist: false,
|
|
passwordExistsForUser: false,
|
|
emailToVerify: null,
|
|
user: newUser,
|
|
});
|
|
};
|
|
|
|
reducers[ACTIONS.USER_PASSWORD_SET_CLEAR] = state =>
|
|
Object.assign({}, state, {
|
|
passwordResetSuccess: false,
|
|
passwordResetPending: false,
|
|
passwordResetError: null,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_EMAIL_VERIFY_STARTED] = state =>
|
|
Object.assign({}, state, {
|
|
emailVerifyIsPending: true,
|
|
emailVerifyErrorMessage: '',
|
|
});
|
|
|
|
reducers[ACTIONS.USER_EMAIL_VERIFY_SUCCESS] = (state, action) => {
|
|
const user = Object.assign({}, state.user);
|
|
user.primary_email = action.data.email;
|
|
return Object.assign({}, state, {
|
|
emailToVerify: '',
|
|
emailVerifyIsPending: false,
|
|
user,
|
|
});
|
|
};
|
|
|
|
reducers[ACTIONS.USER_EMAIL_VERIFY_FAILURE] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
emailVerifyIsPending: false,
|
|
emailVerifyErrorMessage: action.data.error,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_EMAIL_VERIFY_SET] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
emailToVerify: action.data.email,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_IDENTITY_VERIFY_STARTED] = state =>
|
|
Object.assign({}, state, {
|
|
identityVerifyIsPending: true,
|
|
identityVerifyErrorMessage: '',
|
|
});
|
|
|
|
reducers[ACTIONS.USER_IDENTITY_VERIFY_SUCCESS] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
identityVerifyIsPending: false,
|
|
identityVerifyErrorMessage: '',
|
|
user: action.data.user,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_IDENTITY_VERIFY_FAILURE] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
identityVerifyIsPending: false,
|
|
identityVerifyErrorMessage: action.data.error,
|
|
});
|
|
|
|
reducers[ACTIONS.FETCH_ACCESS_TOKEN_SUCCESS] = (state, action) => {
|
|
const { token } = action.data;
|
|
|
|
return Object.assign({}, state, {
|
|
accessToken: token,
|
|
});
|
|
};
|
|
|
|
reducers[ACTIONS.USER_INVITE_STATUS_FETCH_STARTED] = state =>
|
|
Object.assign({}, state, {
|
|
inviteStatusIsPending: true,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_INVITE_STATUS_FETCH_SUCCESS] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
inviteStatusIsPending: false,
|
|
invitesRemaining: action.data.invitesRemaining,
|
|
invitees: action.data.invitees,
|
|
referralLink: action.data.referralLink,
|
|
referralCode: action.data.referralCode,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_INVITE_NEW_STARTED] = state =>
|
|
Object.assign({}, state, {
|
|
inviteNewIsPending: true,
|
|
inviteNewErrorMessage: '',
|
|
});
|
|
|
|
reducers[ACTIONS.USER_INVITE_NEW_SUCCESS] = state =>
|
|
Object.assign({}, state, {
|
|
inviteNewIsPending: false,
|
|
inviteNewErrorMessage: '',
|
|
});
|
|
|
|
reducers[ACTIONS.USER_INVITE_NEW_FAILURE] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
inviteNewIsPending: false,
|
|
inviteNewErrorMessage: action.data.error.message,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_INVITE_STATUS_FETCH_FAILURE] = state =>
|
|
Object.assign({}, state, {
|
|
inviteStatusIsPending: false,
|
|
invitesRemaining: null,
|
|
invitees: null,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_YOUTUBE_IMPORT_STARTED] = state =>
|
|
Object.assign({}, state, {
|
|
youtubeChannelImportPending: true,
|
|
youtubeChannelImportErrorMessage: '',
|
|
});
|
|
|
|
reducers[ACTIONS.USER_YOUTUBE_IMPORT_SUCCESS] = (state, action) => {
|
|
const total = action.data.reduce((acc, value) => acc + value.total_published_videos, 0);
|
|
|
|
const complete = action.data.reduce((acc, value) => acc + value.total_transferred, 0);
|
|
|
|
return Object.assign({}, state, {
|
|
youtubeChannelImportPending: false,
|
|
youtubeChannelImportErrorMessage: '',
|
|
youtubeChannelImportTotal: total,
|
|
youtubeChannelImportComplete: complete,
|
|
});
|
|
};
|
|
|
|
reducers[ACTIONS.USER_YOUTUBE_IMPORT_FAILURE] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
youtubeChannelImportPending: false,
|
|
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,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_SET_REFERRER_STARTED] = state =>
|
|
Object.assign({}, state, {
|
|
referrerSetIsPending: true,
|
|
referrerSetError: defaultState.referrerSetError,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_SET_REFERRER_SUCCESS] = state =>
|
|
Object.assign({}, state, {
|
|
referrerSetIsPending: false,
|
|
referrerSetError: defaultState.referrerSetError,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_SET_REFERRER_FAILURE] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
referrerSetIsPending: false,
|
|
referrerSetError: action.data.error.message,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_SET_REFERRER_RESET] = state =>
|
|
Object.assign({}, state, {
|
|
referrerSetIsPending: false,
|
|
referrerSetError: defaultState.referrerSetError,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_PASSWORD_EXISTS] = state =>
|
|
Object.assign({}, state, {
|
|
passwordExistsForUser: true,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_PASSWORD_RESET_STARTED] = state =>
|
|
Object.assign({}, state, {
|
|
passwordResetPending: true,
|
|
passwordResetSuccess: defaultState.passwordResetSuccess,
|
|
passwordResetError: null,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_PASSWORD_RESET_SUCCESS] = state =>
|
|
Object.assign({}, state, {
|
|
passwordResetPending: false,
|
|
passwordResetSuccess: true,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_PASSWORD_RESET_FAILURE] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
passwordResetPending: false,
|
|
passwordResetError: action.data.error,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_PASSWORD_SET_STARTED] = state =>
|
|
Object.assign({}, state, {
|
|
passwordSetPending: true,
|
|
passwordSetSuccess: defaultState.passwordSetSuccess,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_PASSWORD_SET_SUCCESS] = state =>
|
|
Object.assign({}, state, {
|
|
passwordSetPending: false,
|
|
passwordSetSuccess: true,
|
|
});
|
|
|
|
reducers[ACTIONS.USER_PASSWORD_SET_FAILURE] = (state, action) =>
|
|
Object.assign({}, state, {
|
|
passwordSetPending: false,
|
|
passwordSetError: action.data.error,
|
|
});
|
|
|
|
export default function userReducer(state = defaultState, action) {
|
|
const handler = reducers[action.type];
|
|
if (handler) return handler(state, action);
|
|
return state;
|
|
}
|