all repos — caroster @ e3f8c146e8fd76e38f0100b8d59720069ebdde4e

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

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};