58 lines
1.3 KiB
TypeScript
58 lines
1.3 KiB
TypeScript
// store/slices/authSlice.ts
|
|
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
import { LoginResponse } from '../api/loginApi';
|
|
|
|
interface AuthState {
|
|
token: string | null;
|
|
refreshToken: string | null;
|
|
id: number;
|
|
username: string;
|
|
email: string;
|
|
firstName: string;
|
|
lastName: string;
|
|
gender: string;
|
|
image: string;
|
|
}
|
|
|
|
const initialState: AuthState = {
|
|
token: null,
|
|
refreshToken: null,
|
|
id: 0,
|
|
username: '',
|
|
email: '',
|
|
firstName: '',
|
|
lastName: '',
|
|
gender: '',
|
|
image: '',
|
|
};
|
|
|
|
const authSlice = createSlice({
|
|
name: 'auth',
|
|
initialState,
|
|
reducers: {
|
|
setAuthTokens: (
|
|
state,
|
|
action: PayloadAction<{ token: string; refreshToken: string }>
|
|
) => {
|
|
state.token = action.payload.token;
|
|
state.refreshToken = action.payload.refreshToken;
|
|
localStorage.setItem('token', action.payload.token);
|
|
localStorage.setItem('refreshToken', action.payload.refreshToken);
|
|
},
|
|
clearAuthTokens: (state) => {
|
|
state.token = null;
|
|
state.refreshToken = null;
|
|
localStorage.removeItem('token');
|
|
localStorage.removeItem('refreshToken');
|
|
},
|
|
setUserDetails: (state, action: PayloadAction<LoginResponse>) => {
|
|
state = action.payload;
|
|
},
|
|
},
|
|
});
|
|
|
|
export const { setAuthTokens, clearAuthTokens, setUserDetails } =
|
|
authSlice.actions;
|
|
|
|
export default authSlice.reducer;
|