app/src/contexts/Event.js (view raw)
1import React, {
2 createContext,
3 useContext,
4 useEffect,
5 useMemo,
6 useState,
7} from "react";
8import { useStrapi } from "strapi-react-context";
9
10const EventContext = createContext();
11export default EventContext;
12export const useEvent = () => useContext(EventContext);
13
14export const EventProvider = ({ match, children }) => {
15 const strapi = useStrapi();
16 const { eventId } = match.params;
17 const [isEditing, setIsEditing] = useState(false);
18 const [editingEvent, setEditingEvent] = useState({});
19
20 // Fetch event data if not already done
21 useEffect(() => {
22 if (!strapi.stores.events?.find(({ id }) => eventId === id))
23 strapi.services.events.findOne(eventId);
24 }, [eventId, strapi.stores.events, strapi.services.events]);
25
26 // Retrieve event data
27 const event = useMemo(
28 () => strapi.stores.events?.find((e) => e.id === eventId),
29 [eventId, strapi.stores.events]
30 );
31
32 const updateEvent = async () => {
33 const result = await strapi.services.events.update(event.id, editingEvent);
34 setEditingEvent({});
35 return result;
36 };
37
38 return (
39 <EventContext.Provider
40 value={{
41 event,
42 isEditing,
43 setIsEditing,
44 editingEvent,
45 setEditingEvent,
46 updateEvent,
47 }}
48 >
49 {children}
50 </EventContext.Provider>
51 );
52};