import { createReducer } from '@reduxjs/toolkit'; import { login } from './thunk'; import { UserData } from '@interfaces'; import { updateProfile } from '../../../features/editProfile/thunk'; 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; }) // Sync auth user_data after a successful profile update .addCase(updateProfile.fulfilled, (acc, action) => { if (acc.user_data && action.payload.user_data) { acc.user_data = { ...acc.user_data, ...action.payload.user_data }; } }); }); export default authReducer;