all repos — caroster @ 46303167ec1138b375af3513350eb491415bb6a1

[Octree] Group carpool to your event https://caroster.io

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;