Files
web/api/AxiosInterceptors.jsx
Husanjonazamov 64af77101f classify web
2026-02-24 12:52:49 +05:00

51 lines
1.4 KiB
JavaScript

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;