From 1d9a623a1421bce647830e62d11b2339a2533b87 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Fri, 14 Nov 2025 22:25:03 +0000 Subject: [PATCH] completionId: cgen-681aaab683f9401eb87bcf192db52e35 cgen-681aaab683f9401eb87bcf192db52e35 --- client/pages/Feed.tsx | 54 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/client/pages/Feed.tsx b/client/pages/Feed.tsx index 38b6df3d..ad839504 100644 --- a/client/pages/Feed.tsx +++ b/client/pages/Feed.tsx @@ -128,6 +128,8 @@ export default function Feed() { >("all"); const [selectedArms, setSelectedArms] = useState([]); const [showPostComposer, setShowPostComposer] = useState(false); + const [followedArms, setFollowedArms] = useState([]); + const [showArmFollowManager, setShowArmFollowManager] = useState(false); const mapPostsToFeedItems = useCallback( (source: any[]): FeedItem[] => @@ -198,7 +200,57 @@ export default function Feed() { if (selectedArms.length === 0) { setSelectedArms(ARMS.map((a) => a.id)); } - }, []); + + // Load user's followed arms + if (user?.id) { + loadFollowedArms(); + } + }, [user?.id]); + + const loadFollowedArms = async () => { + if (!user?.id) return; + try { + const response = await fetch(`/api/user/arm-follows?user_id=${user.id}`); + if (response.ok) { + const { arms } = await response.json(); + setFollowedArms(arms || []); + } + } catch (error) { + console.warn("Failed to load followed arms:", error); + } + }; + + const toggleFollowArm = async (arm: ArmType) => { + if (!user?.id) { + toast({ description: "Please sign in to manage arm follows." }); + return; + } + + try { + if (followedArms.includes(arm)) { + // Unfollow + await fetch(`/api/user/arm-follows?user_id=${user.id}`, { + method: "DELETE", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ arm_affiliation: arm }), + }); + setFollowedArms((state) => state.filter((a) => a !== arm)); + toast({ description: `Unfollowed ${ARMS.find((a) => a.id === arm)?.label}` }); + } else { + // Follow + await fetch(`/api/user/arm-follows?user_id=${user.id}`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ arm_affiliation: arm }), + }); + setFollowedArms((state) => Array.from(new Set([...state, arm]))); + toast({ description: `Following ${ARMS.find((a) => a.id === arm)?.label}!` }); + } + } catch (error) { + console.error("Failed to update arm follow:", error); + toast({ variant: "destructive", description: "Failed to update preference" }); + } + }; useEffect(() => { fetchFeed();