all repos — caroster @ 9079b470260a87959da56f303e6682211cb847d1

[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  // Fetch event cars on load
27  useEffect(() => {
28    strapi.services.cars.find({ event: eventId });
29  }, [eventId]); // eslint-disable-line react-hooks/exhaustive-deps
30
31  // Retrieve event data
32  const event = useMemo(
33    () => strapi.stores.events?.find((e) => e.id === eventId),
34    [eventId, strapi.stores.events]
35  );
36
37  const updateEvent = async () => {
38    const result = await strapi.services.events.update(event.id, editingEvent);
39    setEditingEvent({});
40    return result;
41  };
42
43  return (
44    <EventContext.Provider
45      value={{
46        event,
47        isEditing,
48        setIsEditing,
49        editingEvent,
50        setEditingEvent,
51        updateEvent,
52      }}
53    >
54      {children}
55    </EventContext.Provider>
56  );
57};