import { createReducer } from '@reduxjs/toolkit'; import { LoginResponse, VerifyOtpResponse } from '../../../interfaces'; import { loginWithPhone, verifyOtp } from './thunk'; import { User } from '@interfaces/auth'; // ─── State ─────────────────────────────────────────────────────────────────── export interface AuthState { loginData: LoginResponse | null; user: User | null; accessToken: string | null; refreshToken: string | null; isNewUser: boolean | null; error: string | null; isLoading: boolean; } const initialState: AuthState = { loginData: null, user: null, accessToken: null, refreshToken: null, isNewUser: null, isLoading: false, error: null, }; // ─── Reducer ───────────────────────────────────────────────────────────────── const authReducer = createReducer(initialState, builder => { builder // Login .addCase(loginWithPhone.pending, state => { state.isLoading = true; state.error = null; }) .addCase(loginWithPhone.fulfilled, (state, action) => { state.loginData = action.payload; state.isLoading = false; state.error = null; }) .addCase(loginWithPhone.rejected, (state, action) => { state.isLoading = false; state.error = action.payload as string; }) // Verify OTP .addCase(verifyOtp.pending, state => { state.isLoading = true; state.error = null; }) .addCase(verifyOtp.fulfilled, (state, action) => { const { user, accessToken, refreshToken, isNewUser } = action.payload; state.user = user; state.accessToken = accessToken; state.refreshToken = refreshToken; state.isNewUser = isNewUser; state.isLoading = false; state.error = null; }) .addCase(verifyOtp.rejected, (state, action) => { state.isLoading = false; state.error = action.payload as string; }); }); export default authReducer;