frontend/hooks/useProfile.ts (view raw)
1import {useEffect, useState} from 'react';
2import {ProfileDocument, UsersPermissionsUser} from '../generated/graphql';
3import {initializeApollo} from '../lib/apolloClient';
4import {useSession} from 'next-auth/react';
5
6const useProfile = () => {
7 const session = useSession();
8 const [isReady, setIsReady] = useState(false);
9 const [profile, setProfile] = useState<UsersPermissionsUser | null>(null);
10 const [userId, setUserId] = useState<string | null>(null);
11
12 const fetchProfile = async () => {
13 const apolloClient = initializeApollo('', session);
14
15 try {
16 const {data} = await apolloClient.query({
17 query: ProfileDocument,
18 });
19 const fetchedProfile = data?.me?.profile;
20 setProfile(fetchedProfile);
21 setUserId(data?.me?.id);
22 } catch (error) {
23 console.error(error);
24 } finally {
25 setIsReady(true);
26 }
27 };
28
29 useEffect(() => {
30 if (session.status === 'authenticated') fetchProfile();
31 else if (session.status === 'unauthenticated') setIsReady(true);
32 }, [session]);
33
34 return {
35 profile,
36 userId,
37 connected: session.status === 'authenticated',
38 isReady,
39 };
40};
41
42export default useProfile;