chore: lint

This commit is contained in:
karishmas6
2024-09-24 12:10:04 +05:30
parent 044031260c
commit 4ad5b46fd3

View File

@@ -3,101 +3,101 @@ import axios from 'axios';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
interface ProviderProps { interface ProviderProps {
children: React.ReactNode; children: React.ReactNode;
} }
interface ActionType { interface ActionType {
type: 'LOGIN' | 'LOGOUT'; type: 'LOGIN' | 'LOGOUT';
payload?: any; payload?: any;
} }
type InitialStateType = { type InitialStateType = {
user: any; user: any;
}; };
const initialState = { const initialState = {
user: null, user: null,
}; };
const Context = createContext<{ const Context = createContext<{
state: InitialStateType; state: InitialStateType;
dispatch: any; dispatch: any;
}>({ }>({
state: initialState, state: initialState,
dispatch: () => null, dispatch: () => null,
}); });
const reducer = (state: InitialStateType, action: ActionType) => { const reducer = (state: InitialStateType, action: ActionType) => {
switch (action.type) { switch (action.type) {
case 'LOGIN': case 'LOGIN':
return { return {
...state, ...state,
user: action.payload, user: action.payload,
}; };
case 'LOGOUT': case 'LOGOUT':
return { return {
...state, ...state,
user: null, user: null,
}; };
default: default:
return state; return state;
} }
}; };
const Provider = ({ children }: ProviderProps) => { const Provider = ({ children }: ProviderProps) => {
const [state, dispatch] = useReducer(reducer, initialState); const [state, dispatch] = useReducer(reducer, initialState);
const navigate = useNavigate(); const navigate = useNavigate();
// get user info from local storage // get user info from local storage
useEffect(() => { useEffect(() => {
dispatch({ dispatch({
type: 'LOGIN', type: 'LOGIN',
payload: JSON.parse(window.localStorage.getItem('user') || 'null'), payload: JSON.parse(window.localStorage.getItem('user') || 'null'),
});
}, []);
axios.interceptors.response.use(
function (response) {
// any status code that lies within the range of 2XX causes this function to trigger
return response;
},
function (error) {
// any status codes that fall outside the range of 2XX cause this function to trigger
let res = error.response;
if (res.status === 401 && res.config && !res.config.__isRetryRequest) {
return new Promise((resolve, reject) => {
axios
.get('/api/logout')
.then((data) => {
console.log('/401 error > logout');
dispatch({ type: 'LOGOUT' });
window.localStorage.removeItem('user');
navigate('/login'); // Replace router.push with navigate
})
.catch((err) => {
console.log('AXIOS INTERCEPTORS ERROR:', err);
reject(error);
});
}); });
} }, []);
return Promise.reject(error);
}
);
// csrf - include tokens in the axios header every time a request is made
useEffect(() => {
const getCsrfToken = async () => {
const { data } = await axios.get('/api/csrf-token');
console.log('CSRFFFFF =>>>>', data);
(axios.defaults.headers as any)['X-CSRF-TOKEN'] = data.getCsrfToken;
};
getCsrfToken();
}, []);
return ( axios.interceptors.response.use(
<Context.Provider value={{ state, dispatch }}>{children}</Context.Provider> function (response) {
); // any status code that lies within the range of 2XX causes this function to trigger
return response;
},
function (error) {
// any status codes that fall outside the range of 2XX cause this function to trigger
let res = error.response;
if (res.status === 401 && res.config && !res.config.__isRetryRequest) {
return new Promise((resolve, reject) => {
axios
.get('/api/logout')
.then((data) => {
console.log('/401 error > logout');
dispatch({ type: 'LOGOUT' });
window.localStorage.removeItem('user');
navigate('/login'); // Replace router.push with navigate
})
.catch((err) => {
console.log('AXIOS INTERCEPTORS ERROR:', err);
reject(error);
});
});
}
return Promise.reject(error);
}
);
// csrf - include tokens in the axios header every time a request is made
useEffect(() => {
const getCsrfToken = async () => {
const { data } = await axios.get('/api/csrf-token');
console.log('CSRFFFFF =>>>>', data);
(axios.defaults.headers as any)['X-CSRF-TOKEN'] = data.getCsrfToken;
};
getCsrfToken();
}, []);
return (
<Context.Provider value={{ state, dispatch }}>{children}</Context.Provider>
);
}; };
export { Context, Provider }; export { Context, Provider };