From 0f3d477dc3029efd325e55c1ff57d782c2ea3b65 Mon Sep 17 00:00:00 2001 From: Michael Fatemi Date: Wed, 14 Jul 2021 08:36:35 -0400 Subject: [PATCH] fetch sent invites and requests on load --- src/components/Event/EventCarpools.tsx | 12 +++++----- src/components/api.ts | 4 ++++ .../Notifications/NotificationsProvider.tsx | 23 +++++++++++++++++-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/components/Event/EventCarpools.tsx b/src/components/Event/EventCarpools.tsx index 09d2068..0807733 100644 --- a/src/components/Event/EventCarpools.tsx +++ b/src/components/Event/EventCarpools.tsx @@ -2,18 +2,18 @@ import CancelIcon from '@material-ui/icons/Cancel'; import CheckIcon from '@material-ui/icons/Check'; import EmojiPeopleIcon from '@material-ui/icons/EmojiPeople'; import { useCallback, useContext, useMemo, useState } from 'react'; -import { createCarpool } from '../api'; import { lightgrey } from '../../lib/colors'; -import { useMe } from '../hooks'; -import { IEvent } from '../types'; -import UIButton from '../UI/UIButton'; -import UILink from '../UI/UILink'; -import EventContext from './EventContext'; import { useCancelCarpoolRequest, useInvitationState, useSendCarpoolRequest, } from '../../state/Notifications/NotificationsHooks'; +import { createCarpool } from '../api'; +import { useMe } from '../hooks'; +import { IEvent } from '../types'; +import UIButton from '../UI/UIButton'; +import UILink from '../UI/UILink'; +import EventContext from './EventContext'; function CarpoolRow({ carpool, diff --git a/src/components/api.ts b/src/components/api.ts index 99303bd..61fd027 100644 --- a/src/components/api.ts +++ b/src/components/api.ts @@ -201,3 +201,7 @@ export async function sendCarpoolRequest(carpoolId: number) { export async function cancelCarpoolRequest(carpoolId: number) { return await delete$('/carpools/' + carpoolId + '/request'); } + +export async function getSentRequestsAndInvites() { + return (await get('/users/@me/sent_requests_and_invites')) as IInvitation[]; +} diff --git a/src/state/Notifications/NotificationsProvider.tsx b/src/state/Notifications/NotificationsProvider.tsx index be3d119..8c7e069 100644 --- a/src/state/Notifications/NotificationsProvider.tsx +++ b/src/state/Notifications/NotificationsProvider.tsx @@ -1,6 +1,7 @@ import { createContext, ReactNode, useCallback, useState } from 'react'; import * as immutable from 'immutable'; import * as api from '../../components/api'; +import { useEffect } from 'react'; export const NotificationsContext = createContext({ invitedCarpoolIds: immutable.Set(), @@ -18,8 +19,7 @@ export default function NotificationsProvider({ }: { children: ReactNode; }) { - // eslint-disable-next-line - const [invitedCarpoolIds, _setInvitedCarpoolIds] = useState( + const [invitedCarpoolIds, setInvitedCarpoolIds] = useState( immutable.Set() ); @@ -27,6 +27,25 @@ export default function NotificationsProvider({ immutable.Set() ); + useEffect(() => { + api.getSentRequestsAndInvites().then((invitations) => { + setInvitedCarpoolIds((ids) => + ids.concat( + invitations + .filter((invite) => !invite.isRequest) + .map((invite) => invite.carpool.id) + ) + ); + setRequestedCarpoolIds((ids) => + ids.concat( + invitations + .filter((invite) => invite.isRequest) + .map((invite) => invite.carpool.id) + ) + ); + }); + }, []); + const sendCarpoolRequest = useCallback((carpoolId: number) => { api .sendCarpoolRequest(carpoolId)