all repos — caroster @ v5.0

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