From 4d628bbb8937a287c8f79331672c7cb5ed4ff903 Mon Sep 17 00:00:00 2001 From: calebyhan Date: Mon, 15 Jun 2026 09:28:21 -0400 Subject: [PATCH] fix contact page to load senators/districts even if leadership API fails --- frontend/src/app/senators/contact/page.tsx | 44 ++++++++++++++++------ 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/frontend/src/app/senators/contact/page.tsx b/frontend/src/app/senators/contact/page.tsx index 1a7e623..97c9402 100644 --- a/frontend/src/app/senators/contact/page.tsx +++ b/frontend/src/app/senators/contact/page.tsx @@ -33,24 +33,46 @@ export default function ContactPage() { useEffect(() => { async function loadData() { - try { - const [senatorsData, districtsData, leadershipData] = await Promise.all( - [getSenators(), getDistricts(), getLeadership()], - ); - setSenators(senatorsData); - setDistricts(districtsData); + const [senatorsResult, districtsResult, leadershipResult] = + await Promise.allSettled([ + getSenators(), + getDistricts(), + getLeadership(), + ]); + + if (senatorsResult.status === "fulfilled") { + setSenators(senatorsResult.value); + } else { + console.error("Failed to load senators", senatorsResult.reason); + } + + if (districtsResult.status === "fulfilled") { + setDistricts(districtsResult.value); + } else { + console.error("Failed to load districts", districtsResult.reason); + } - const currentSpeaker = leadershipData.find( + if (leadershipResult.status === "fulfilled") { + const currentSpeaker = leadershipResult.value.find( (l) => l.is_current && l.title.toLowerCase().includes("speaker"), ); if (currentSpeaker) { setSpeaker(currentSpeaker); } - } catch (err) { - console.error("Failed to load contact data", err); - } finally { - setIsLoadingSenators(false); + } else { + console.error("Failed to load leadership", leadershipResult.reason); } + + if ( + senatorsResult.status === "rejected" || + districtsResult.status === "rejected" + ) { + setError( + "Some senator information could not be loaded. You can still send a message to speaker@unc.edu directly.", + ); + } + + setIsLoadingSenators(false); } loadData(); }, []);