Initial commit

This commit is contained in:
2025-10-04 18:22:24 +03:00
commit 2852c2c054
291 changed files with 38109 additions and 0 deletions

View File

@@ -0,0 +1,105 @@
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import { baseApi } from "redux/api/apiSlice";
import { AppThunk } from "redux/store";
import { ACCESS_TOKEN, USER_NAME } from "utils/constants";
import { LoginResponseType, UserType } from "utils/types/appTypes";
export type AuthState = {
user: UserType | undefined;
isActivated: boolean;
loading: boolean;
loginFailed: boolean;
expiredToken: boolean;
error: string;
token: string;
loaded: boolean;
};
const initialState: AuthState = {
user: undefined,
isActivated: !!localStorage.getItem(ACCESS_TOKEN),
loaded: false,
loading: false,
loginFailed: false,
expiredToken: false,
error: "",
token: localStorage.getItem(ACCESS_TOKEN) || "",
};
export const authSlice = createSlice({
name: "auth",
initialState,
reducers: {
resetState: () => initialState,
initialLoadStart(state) {
state.loading = true;
state.isActivated = false;
},
initialLoadSuccess(state) {
state.loading = false;
state.isActivated = true;
},
loginStart(state) {
state.loading = true;
state.loginFailed = false;
state.loaded = false;
},
loginSuccess(state, action: PayloadAction<LoginResponseType>) {
if (action.payload.token) {
localStorage.setItem(ACCESS_TOKEN, action.payload.token);
state.token = action.payload.token;
if (state.user?.username)
localStorage.setItem(USER_NAME, state.user.username);
state.isActivated = true;
state.loading = false;
state.loginFailed = false;
state.expiredToken = false;
state.error = "";
state.loaded = true;
}
},
logout: (state) => {
localStorage.removeItem(ACCESS_TOKEN);
state.isActivated = false;
state.token = "";
state.user = undefined;
},
failedWithError(state, action: PayloadAction<string>) {
state.loading = false;
state.loginFailed = true;
state.error = action.payload;
},
resetLoadedStatus(state) {
state.loaded = false;
},
setUser(state, action: PayloadAction<any>) {
state.user = action.payload;
},
tokenExpired(state) {
state.expiredToken = true;
},
},
});
export const {
resetState,
initialLoadStart,
initialLoadSuccess,
loginStart,
loginSuccess,
failedWithError,
tokenExpired,
logout,
setUser,
resetLoadedStatus,
} = authSlice.actions;
export default authSlice.reducer;
export const logoutThunk = (): AppThunk => (dispatch) => {
if (localStorage.getItem(ACCESS_TOKEN)) {
localStorage.clear();
dispatch(baseApi.util.resetApiState());
dispatch(logout());
}
};