1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-25 12:56:41 +07:00
vault-frontend/src/redux/auth/handlers.ts
2021-03-19 14:15:04 +07:00

121 lines
2.9 KiB
TypeScript

import { AUTH_USER_ACTIONS } from '~/redux/auth/constants';
import * as ActionCreators from '~/redux/auth/actions';
import { IAuthState } from '~/redux/auth/types';
interface ActionHandler<T> {
(state: IAuthState, payload: T extends (...args: any[]) => infer R ? R : any): IAuthState;
}
const setLoginError: ActionHandler<typeof ActionCreators.userSetLoginError> = (
state,
{ error }
) => ({
...state,
login: {
...state.login,
error,
},
});
const setUser: ActionHandler<typeof ActionCreators.authSetUser> = (state, { profile }) => ({
...state,
user: {
...state.user,
...profile,
},
});
const setState: ActionHandler<typeof ActionCreators.authSetState> = (state, { payload }) => ({
...state,
...payload,
});
const setToken: ActionHandler<typeof ActionCreators.authSetToken> = (state, { token }) => ({
...state,
token,
});
const setProfile: ActionHandler<typeof ActionCreators.authSetProfile> = (state, { profile }) => ({
...state,
profile: {
...state.profile,
...profile,
},
});
const setUpdates: ActionHandler<typeof ActionCreators.authSetUpdates> = (state, { updates }) => ({
...state,
updates: {
...state.updates,
...updates,
},
});
const setLastSeenMessages: ActionHandler<typeof ActionCreators.authSetLastSeenMessages> = (
state,
{ last_seen_messages }
) => ({
...state,
user: {
...state.user,
last_seen_messages,
},
});
const setRestore: ActionHandler<typeof ActionCreators.authSetRestore> = (state, { restore }) => ({
...state,
restore: {
...state.restore,
...restore,
},
});
const setSocials: ActionHandler<typeof ActionCreators.authSetSocials> = (state, { socials }) => ({
...state,
profile: {
...state.profile,
socials: {
...state.profile.socials,
...socials,
},
},
});
const setRegisterSocial: ActionHandler<typeof ActionCreators.authSetRegisterSocial> = (
state,
{ register_social }
) => ({
...state,
register_social: {
...state.register_social,
...register_social,
},
});
const setRegisterSocialErrors: ActionHandler<typeof ActionCreators.authSetRegisterSocialErrors> = (
state,
{ errors }
) => ({
...state,
register_social: {
...state.register_social,
errors: {
...state.register_social.errors,
...errors,
},
},
});
export const AUTH_USER_HANDLERS = {
[AUTH_USER_ACTIONS.SET_LOGIN_ERROR]: setLoginError,
[AUTH_USER_ACTIONS.SET_USER]: setUser,
[AUTH_USER_ACTIONS.SET_STATE]: setState,
[AUTH_USER_ACTIONS.SET_TOKEN]: setToken,
[AUTH_USER_ACTIONS.SET_PROFILE]: setProfile,
[AUTH_USER_ACTIONS.SET_UPDATES]: setUpdates,
[AUTH_USER_ACTIONS.SET_LAST_SEEN_MESSAGES]: setLastSeenMessages,
[AUTH_USER_ACTIONS.SET_RESTORE]: setRestore,
[AUTH_USER_ACTIONS.SET_SOCIALS]: setSocials,
[AUTH_USER_ACTIONS.SET_REGISTER_SOCIAL]: setRegisterSocial,
[AUTH_USER_ACTIONS.SET_REGISTER_SOCIAL_ERRORS]: setRegisterSocialErrors,
};