classify web
This commit is contained in:
50
api/AxiosInterceptors.jsx
Normal file
50
api/AxiosInterceptors.jsx
Normal file
@@ -0,0 +1,50 @@
|
||||
import { logoutSuccess } from "@/redux/reducer/authSlice";
|
||||
import { setIsUnauthorized } from "@/redux/reducer/globalStateSlice";
|
||||
import { store } from "@/redux/store";
|
||||
import axios from "axios";
|
||||
|
||||
const Api = axios.create({
|
||||
baseURL: `${process.env.NEXT_PUBLIC_API_URL}${process.env.NEXT_PUBLIC_END_POINT}`,
|
||||
});
|
||||
|
||||
let isUnauthorizedToastShown = false;
|
||||
|
||||
Api.interceptors.request.use(function (config) {
|
||||
let token = undefined;
|
||||
let langCode = undefined;
|
||||
|
||||
if (typeof window !== "undefined") {
|
||||
const state = store.getState();
|
||||
token = state?.UserSignup?.data?.token;
|
||||
langCode = state?.CurrentLanguage?.language?.code;
|
||||
}
|
||||
|
||||
if (token) config.headers.authorization = `Bearer ${token}`;
|
||||
if (langCode) config.headers["Content-Language"] = langCode;
|
||||
|
||||
return config;
|
||||
});
|
||||
|
||||
// Add a response interceptor
|
||||
Api.interceptors.response.use(
|
||||
function (response) {
|
||||
return response;
|
||||
},
|
||||
function (error) {
|
||||
if (error.response && error.response.status === 401) {
|
||||
// Call the logout function if the status code is 401
|
||||
logoutSuccess();
|
||||
if (!isUnauthorizedToastShown) {
|
||||
store.dispatch(setIsUnauthorized(true));
|
||||
isUnauthorizedToastShown = true;
|
||||
// Reset the flag after a certain period
|
||||
setTimeout(() => {
|
||||
isUnauthorizedToastShown = false;
|
||||
}, 3000); // 3 seconds delay before allowing another toast
|
||||
}
|
||||
}
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
export default Api;
|
||||
Reference in New Issue
Block a user