From 9ecf21dab3f7e72549a40ac427eb8211e34fddb1 Mon Sep 17 00:00:00 2001 From: Michael Fatemi <myfatemi04@gmail.com> Date: Tue, 13 Jul 2021 18:33:33 -0400 Subject: [PATCH] give link to new carpool when creating a carpool --- src/components/Event/EventCarpools.tsx | 43 ++++++++++++++++---------- src/components/api.ts | 2 +- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/components/Event/EventCarpools.tsx b/src/components/Event/EventCarpools.tsx index ec7aabf..eb531dc 100644 --- a/src/components/Event/EventCarpools.tsx +++ b/src/components/Event/EventCarpools.tsx @@ -1,12 +1,12 @@ // import CallMergeIcon from '@material-ui/icons/CallMerge'; import EmojiPeopleIcon from '@material-ui/icons/EmojiPeople'; -import { useMemo } from 'react'; -import { useCallback, useState } from 'react'; +import { useCallback, useMemo, useState } from 'react'; import { createCarpool } from '../api'; import { lightgrey } from '../colors'; import { useMe } from '../hooks'; import { IEvent } from '../types'; import UIButton from '../UI/UIButton'; +import UILink from '../UI/UILink'; function CarpoolRow({ carpool }: { carpool: IEvent['carpools'][0] }) { const PADDING = '1rem'; @@ -49,6 +49,8 @@ type CreationStatus = null | 'pending' | 'completed' | 'errored'; export default function Carpools({ event }: { event: IEvent }) { const [creationStatus, setCreationStatus] = useState<CreationStatus>(null); + const [createdCarpoolId, setCreatedCarpoolId] = useState<null | number>(null); + const me = useMe()!; const myCarpool = useMemo( () => @@ -63,14 +65,13 @@ export default function Carpools({ event }: { event: IEvent }) { setCreationStatus('pending'); createCarpool({ name: me.name + "'s Carpool", eventId: event.id }) - .then(() => { + .then(({ id }) => { + setCreatedCarpoolId(id); setCreationStatus('completed'); }) .catch(() => { setCreationStatus('errored'); }); - - setTimeout(() => setCreationStatus('completed'), 1000); }, [event.id, me.name]); return ( @@ -80,20 +81,28 @@ export default function Carpools({ event }: { event: IEvent }) { <span>You are already in a carpool for this event</span> ) : ( <> - <span>Available to drive?</span> {creationStatus !== 'completed' ? ( - <UIButton - onClick={createEmptyCarpool} - style={{ backgroundColor: lightgrey }} - > - {creationStatus === null - ? 'Create Empty Carpool' - : creationStatus === 'pending' - ? 'Creating...' - : 'Errored'} - </UIButton> + <> + <span>Available to drive?</span> + <UIButton + onClick={createEmptyCarpool} + style={{ backgroundColor: lightgrey }} + > + {creationStatus === null + ? 'Create Empty Carpool' + : creationStatus === 'pending' + ? 'Creating...' + : 'Errored'} + </UIButton> + </> ) : ( - 'Created!' + <span> + Created{' '} + <UILink href={`/carpools/${createdCarpoolId}`}> + your carpool + </UILink> + ! + </span> )} </> )} diff --git a/src/components/api.ts b/src/components/api.ts index 1a484ef..0b26b31 100644 --- a/src/components/api.ts +++ b/src/components/api.ts @@ -178,7 +178,7 @@ export async function createCarpool({ }: { eventId: number; name: string; -}) { +}): Promise<{ id: number }> { return await post('/carpools/', { eventId, name }); }