51 lines
1.4 KiB
JavaScript
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;
|