fetch sent invites and requests on load

This commit is contained in:
Michael Fatemi 2021-07-14 08:36:35 -04:00
parent 66ec0019c1
commit 0f3d477dc3
3 changed files with 31 additions and 8 deletions

View File

@ -2,18 +2,18 @@ import CancelIcon from '@material-ui/icons/Cancel';
import CheckIcon from '@material-ui/icons/Check'; import CheckIcon from '@material-ui/icons/Check';
import EmojiPeopleIcon from '@material-ui/icons/EmojiPeople'; import EmojiPeopleIcon from '@material-ui/icons/EmojiPeople';
import { useCallback, useContext, useMemo, useState } from 'react'; import { useCallback, useContext, useMemo, useState } from 'react';
import { createCarpool } from '../api';
import { lightgrey } from '../../lib/colors'; 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 { import {
useCancelCarpoolRequest, useCancelCarpoolRequest,
useInvitationState, useInvitationState,
useSendCarpoolRequest, useSendCarpoolRequest,
} from '../../state/Notifications/NotificationsHooks'; } 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({ function CarpoolRow({
carpool, carpool,

View File

@ -201,3 +201,7 @@ export async function sendCarpoolRequest(carpoolId: number) {
export async function cancelCarpoolRequest(carpoolId: number) { export async function cancelCarpoolRequest(carpoolId: number) {
return await delete$('/carpools/' + carpoolId + '/request'); return await delete$('/carpools/' + carpoolId + '/request');
} }
export async function getSentRequestsAndInvites() {
return (await get('/users/@me/sent_requests_and_invites')) as IInvitation[];
}

View File

@ -1,6 +1,7 @@
import { createContext, ReactNode, useCallback, useState } from 'react'; import { createContext, ReactNode, useCallback, useState } from 'react';
import * as immutable from 'immutable'; import * as immutable from 'immutable';
import * as api from '../../components/api'; import * as api from '../../components/api';
import { useEffect } from 'react';
export const NotificationsContext = createContext({ export const NotificationsContext = createContext({
invitedCarpoolIds: immutable.Set<number>(), invitedCarpoolIds: immutable.Set<number>(),
@ -18,8 +19,7 @@ export default function NotificationsProvider({
}: { }: {
children: ReactNode; children: ReactNode;
}) { }) {
// eslint-disable-next-line const [invitedCarpoolIds, setInvitedCarpoolIds] = useState(
const [invitedCarpoolIds, _setInvitedCarpoolIds] = useState(
immutable.Set<number>() immutable.Set<number>()
); );
@ -27,6 +27,25 @@ export default function NotificationsProvider({
immutable.Set<number>() immutable.Set<number>()
); );
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) => { const sendCarpoolRequest = useCallback((carpoolId: number) => {
api api
.sendCarpoolRequest(carpoolId) .sendCarpoolRequest(carpoolId)