33 lines
870 B
TypeScript
33 lines
870 B
TypeScript
import { gql, useQuery } from '@apollo/client';
|
|
import { useEffect } from 'react';
|
|
import { authClient } from '../../apollo';
|
|
|
|
export const GET_TOKEN = gql`
|
|
fragment Payload on REST {
|
|
refreshToken: String
|
|
}
|
|
query jwt($input: Payload) {
|
|
token(input: $input) @rest(type: "string", path: "/token", method: "POST") {
|
|
accessToken
|
|
}
|
|
}
|
|
`;
|
|
|
|
export const useRefreshToken = () => {
|
|
const refreshToken = localStorage.getItem('refreshToken');
|
|
const { data, loading, error } = useQuery(GET_TOKEN, {
|
|
client: authClient,
|
|
variables: { input: { refreshToken } },
|
|
});
|
|
useEffect(() => {
|
|
if (!loading && !error) {
|
|
const accessToken = data.token.accessToken;
|
|
if (accessToken) {
|
|
localStorage.setItem('accessToken', accessToken || '');
|
|
}
|
|
}
|
|
}, [data, refreshToken, loading, error]);
|
|
|
|
return { loading, error };
|
|
};
|