import { createAction, createReducer } from '@reduxjs/toolkit'; import { login } from './thunk'; import { UserData } from '@interfaces'; // Patch user_data in auth state after a successful profile update export const updateUserData = createAction>('auth/updateUserData'); export interface LoginState { loginSuccess: boolean; loginLoading: boolean; status: boolean; is_twofactor: boolean; user_data: UserData | null; token: string | null; loginError: string | null; loginMessage: string | null; } const initialState: LoginState = { loginSuccess: false, loginLoading: false, status: false, is_twofactor: false, user_data: null, token: null, loginError: null, loginMessage: null, }; export const authReducer = createReducer(initialState, builder => { builder .addCase(login.pending, acc => { acc.loginLoading = true; acc.loginError = null; acc.loginMessage = null; }) .addCase(login.fulfilled, (acc, action) => { acc.loginLoading = false; acc.status = action.payload.status; acc.is_twofactor = action.payload.is_twofactor; acc.user_data = action.payload.user_data; acc.token = action.payload.token; acc.loginSuccess = true; acc.loginError = null; acc.loginMessage = null; }) .addCase(login.rejected, (acc, { error, payload }) => { acc.loginLoading = false; acc.loginError = (payload as string) ?? error.message ?? 'Login failed'; acc.loginMessage = (payload as string) ?? error.message ?? 'Login failed'; acc.loginSuccess = false; }) .addCase(updateUserData, (acc, action) => { if (acc.user_data) { acc.user_data = { ...acc.user_data, ...action.payload }; } }); }); export default authReducer;