From e10030e18b87840e4c2707f773f6e54736e5d2d7 Mon Sep 17 00:00:00 2001 From: mihaic195 Date: Wed, 30 Jun 2021 16:48:34 +0300 Subject: [PATCH] fix api 500 and redirect to login if not authenticated when accessing /settings/team --- pages/api/teams.ts | 4 ++-- pages/settings/teams.tsx | 30 ++++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/pages/api/teams.ts b/pages/api/teams.ts index 1ab69adb..ef900fbe 100644 --- a/pages/api/teams.ts +++ b/pages/api/teams.ts @@ -30,8 +30,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) } }); - return res.status(201).setHeader('Location', process.env.BASE_URL + '/api/teams/1').send(null); + return res.status(201).json({ message: 'Team created' }); } - res.status(404).send(null); + res.status(404).json({ message: 'Team not found' }); } diff --git a/pages/settings/teams.tsx b/pages/settings/teams.tsx index e4d1dc5f..12719250 100644 --- a/pages/settings/teams.tsx +++ b/pages/settings/teams.tsx @@ -1,3 +1,4 @@ +import { GetServerSideProps } from "next"; import Head from 'next/head'; import prisma from '../../lib/prisma'; import Modal from '../../components/Modal'; @@ -18,14 +19,16 @@ export default function Teams(props) { const [invites, setInvites] = useState([]); const [showCreateTeamModal, setShowCreateTeamModal] = useState(false); - const loadTeams = () => fetch('/api/user/membership').then((res: any) => res.json()).then( + const loadData = () => fetch('/api/user/membership').then((res: any) => res.json()).then( (data) => { - setTeams(data.membership.filter((m) => m.role !== "INVITEE")); - setInvites(data.membership.filter((m) => m.role === "INVITEE")); + setTeams(data.membership && data.membership.filter((m) => m.role !== "INVITEE")); + setInvites(data.membership && data.membership.filter((m) => m.role === "INVITEE")); } ); - useEffect(() => { loadTeams(); }, []); + useEffect(() => { + loadData(); + }, []); if (loading) { return

Loading...

; @@ -40,7 +43,7 @@ export default function Teams(props) { 'Content-Type': 'application/json' } }).then(() => { - loadTeams(); + loadData(); setShowCreateTeamModal(false); }); } @@ -86,14 +89,14 @@ export default function Teams(props) {
{!!teams.length && - + } {!!invites.length &&

Open Invitations

    - {invites.map((team) => )} + {invites.map((team) => )}
}
@@ -153,4 +156,15 @@ export default function Teams(props) { ); -} \ No newline at end of file +} + +export const getServerSideProps: GetServerSideProps = async (context) => { + const session = await getSession(context); + if (!session) { + return { redirect: { permanent: false, destination: "/auth/login" } }; + } + + return { + props: { }, // will be passed to the page component as props + }; +};