43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
|
|
|
interface AuthState {
|
|
isAuthenticated: boolean;
|
|
userId: number | null;
|
|
username: string | null;
|
|
loading: boolean;
|
|
}
|
|
|
|
const initialState: AuthState = {
|
|
isAuthenticated: localStorage.getItem("isAuthenticated") === "true",
|
|
userId: null,
|
|
username: localStorage.getItem("username") || null,
|
|
loading: false,
|
|
};
|
|
|
|
const authSlice = createSlice({
|
|
name: "auth",
|
|
initialState,
|
|
reducers: {
|
|
setAuth: (
|
|
state,
|
|
action: PayloadAction<{ userId: number; username: string }>
|
|
) => {
|
|
state.isAuthenticated = true;
|
|
state.userId = action.payload.userId;
|
|
state.username = action.payload.username;
|
|
localStorage.setItem("isAuthenticated", "true");
|
|
localStorage.setItem("username", action.payload.username);
|
|
},
|
|
clearAuth: (state) => {
|
|
state.isAuthenticated = false;
|
|
state.userId = null;
|
|
state.username = null;
|
|
localStorage.removeItem("isAuthenticated");
|
|
localStorage.removeItem("username");
|
|
},
|
|
},
|
|
});
|
|
|
|
export const { setAuth, clearAuth } = authSlice.actions;
|
|
export default authSlice.reducer;
|