45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import { Action } from "redux";
|
|
import { User } from "../../types/user";
|
|
import { SET_CURRENT_USER, setCurrentUserAction } from "../actions/auth";
|
|
import { FETCH_PROFILE_SUCCESS, fetchProfileSuccessAction } from "../actions/profile";
|
|
|
|
export interface AuthState {
|
|
isAuthenticated: boolean
|
|
currentUser: User
|
|
}
|
|
|
|
const defaultState = {
|
|
isAuthenticated: false,
|
|
currentUser: null,
|
|
};
|
|
|
|
export function authReducer(state = defaultState, action: Action): AuthState {
|
|
switch (action.type) {
|
|
case SET_CURRENT_USER:
|
|
return handleSetCurrentUser(state, action as setCurrentUserAction);
|
|
case FETCH_PROFILE_SUCCESS:
|
|
return handleFetchProfileSuccess(state, action as fetchProfileSuccessAction);
|
|
|
|
}
|
|
return state;
|
|
}
|
|
|
|
function handleSetCurrentUser(state: AuthState, { email }: setCurrentUserAction): AuthState {
|
|
return {
|
|
...state,
|
|
isAuthenticated: true,
|
|
currentUser: {
|
|
email
|
|
}
|
|
};
|
|
};
|
|
|
|
function handleFetchProfileSuccess(state: AuthState, { profile }: fetchProfileSuccessAction): AuthState {
|
|
return {
|
|
...state,
|
|
isAuthenticated: true,
|
|
currentUser: {
|
|
...profile,
|
|
}
|
|
};
|
|
}; |