app/src/hooks/useProfile.js (view raw)
1import {useState, useEffect} from 'react';
2import {useStrapi, useAuth} from 'strapi-react-context';
3
4export default () => {
5 const strapi = useStrapi();
6 const {token, authState} = useAuth();
7 const [profile, setProfile] = useState();
8
9 useEffect(() => {
10 const getProfile = async () => {
11 try {
12 const fetchedProfile = await strapi.services.users.findOne('me');
13 setProfile(fetchedProfile);
14 } catch (error) {
15 console.error(error);
16 setProfile(null);
17 }
18 };
19 if (authState) getProfile();
20 else setProfile(null);
21 }, [authState, strapi.services.users]);
22
23 const addEvent = async event => {
24 try {
25 if (!profile)
26 throw new Error(`Can't add event to logged user: profile empty`);
27 if (!profile?.events?.some(({id}) => id === event.id))
28 await strapi.services.users.update('me', {
29 events: [...profile.events, event.id],
30 });
31 } catch (error) {
32 console.error(error);
33 }
34 };
35
36 return {
37 profile,
38 addEvent,
39 connected: !!token,
40 user: authState?.user,
41 isReady: typeof profile !== 'undefined',
42 };
43};