all repos — caroster @ 65bcb7d208677b65df7ba31f656ee6ee0cfb1d1d

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

frontend/containers/CreateEvent/index.tsx (view raw)

 1import {useState, useReducer} from 'react';
 2import useAddToEvents from '../../hooks/useAddToEvents';
 3import Step1 from './Step1';
 4import Step2 from './Step2';
 5import {ProfileDocument, useCreateEventMutation} from '../../generated/graphql';
 6
 7const STEPS = [Step1, Step2];
 8
 9const CreateEvent = () => {
10  const [step, setStep] = useState(0);
11  const [event, addToEvent] = useReducer(eventReducer, {});
12  const [sendEvent] = useCreateEventMutation();
13  const {addToEvent: addToUserEvents} = useAddToEvents();
14  const Step = STEPS[step];
15
16  const createEvent = async eventData => {
17    try {
18      const variables = {
19        ...event,
20        ...eventData,
21      };
22      const {data} = await sendEvent({
23        variables,
24        refetchQueries: [ProfileDocument],
25      });
26      const {id, attributes} = data.createEvent.data;
27      addToUserEvents(id);
28      return {id, ...attributes};
29    } catch (err) {
30      console.error(err);
31      return false;
32    }
33  };
34
35  return (
36    <Step
37      event={event}
38      addToEvent={addToEvent}
39      createEvent={createEvent}
40      nextStep={() => setStep(step + 1)}
41      previousStep={() => setStep(step - 1)}
42      id="NewEvent"
43    />
44  );
45};
46
47const eventReducer = (state, item) => ({...state, ...item});
48
49export default CreateEvent;