Переписываю спорные решения
This commit is contained in:
20
src/hooks/useLogout.js
Normal file
20
src/hooks/useLogout.js
Normal file
@ -0,0 +1,20 @@
|
||||
import React from "react";
|
||||
import {useDispatch, useSelector} from "react-redux";
|
||||
import {getRole} from "../redux/roleSlice";
|
||||
import {useNavigate} from "react-router-dom";
|
||||
import {auth} from "../redux/outstaffingSlice";
|
||||
|
||||
export const useLogout = () => {
|
||||
const dispatch = useDispatch();
|
||||
const userRole = useSelector(getRole);
|
||||
const navigate = useNavigate();
|
||||
|
||||
const logout = () => {
|
||||
localStorage.clear();
|
||||
dispatch(auth(false));
|
||||
console.log('logout')
|
||||
navigate(userRole === 'ROLE_DEV' ? '/authdev' : '/auth')
|
||||
};
|
||||
|
||||
return {logout}
|
||||
};
|
64
src/hooks/useRequest.js
Normal file
64
src/hooks/useRequest.js
Normal file
@ -0,0 +1,64 @@
|
||||
import React from "react";
|
||||
import axios from 'axios';
|
||||
import {getToken, urlHasParams} from "../helper";
|
||||
import {useNavigate} from "react-router";
|
||||
import {useLogout} from "./useLogout";
|
||||
|
||||
|
||||
const instance = axios.create({
|
||||
baseURL: process.env.REACT_APP_API_URL,
|
||||
validateStatus(status) {
|
||||
return status;
|
||||
},
|
||||
});
|
||||
|
||||
export const useRequest = () => {
|
||||
|
||||
|
||||
const {logout} = useLogout();
|
||||
|
||||
const apiRequest = (url, {
|
||||
method = 'get', params, data,
|
||||
headers = {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
} = {}) => {
|
||||
const fullHeaders = {...headers, ...getToken()};
|
||||
let urWithParams = urlHasParams(url);
|
||||
|
||||
|
||||
return instance
|
||||
.request({
|
||||
url: urWithParams,
|
||||
method,
|
||||
params,
|
||||
data,
|
||||
headers: {...fullHeaders},
|
||||
})
|
||||
.then(response => new Promise(resolve => {
|
||||
if (response.data.redirect || response.status === 401) {
|
||||
console.log(response, 'LOGUTATAT')
|
||||
logout()
|
||||
}
|
||||
return resolve(response)
|
||||
}))
|
||||
.then(response => new Promise(resolve => resolve(response.data)))
|
||||
};
|
||||
|
||||
const RequestError = (code, msg, data) => {
|
||||
const description = msg ? `- ${msg}` : '';
|
||||
|
||||
this.name = 'RequestError';
|
||||
this.message = `API returned: ${code}${description}.`;
|
||||
this.code = code;
|
||||
this.description = msg;
|
||||
this.data = data;
|
||||
};
|
||||
|
||||
RequestError.prototype = Object.create(Error.prototype);
|
||||
RequestError.prototype.constructor = RequestError;
|
||||
|
||||
|
||||
return {apiRequest}
|
||||
};
|
Reference in New Issue
Block a user