From 129f9d0c74da577912256a7a67f748fe09f33788 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Sat, 18 Oct 2025 02:43:53 +0000 Subject: [PATCH] Network page incremental enhancements - imports and state cgen-5458eb9a03ef4f60b2c3d5adc954cffe --- client/pages/Network.tsx | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/client/pages/Network.tsx b/client/pages/Network.tsx index 1f89df39..2c5c2470 100644 --- a/client/pages/Network.tsx +++ b/client/pages/Network.tsx @@ -13,15 +13,22 @@ import { import { Button } from "@/components/ui/button"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Badge } from "@/components/ui/badge"; +import { Input } from "@/components/ui/input"; +import { useToast } from "@/hooks/use-toast"; import { aethexSocialService } from "@/lib/aethex-social-service"; import { UserPlus, UserCheck } from "lucide-react"; export default function Network() { const { user, profile, loading } = useAuth(); const navigate = useNavigate(); + const { toast } = useToast(); const [isLoading, setIsLoading] = useState(true); const [recommended, setRecommended] = useState([]); const [following, setFollowing] = useState([]); + const [connections, setConnections] = useState([]); + const [endorsements, setEndorsements] = useState([]); + const [inviteEmail, setInviteEmail] = useState(""); + const [inviteSending, setInviteSending] = useState(false); useEffect(() => { if (!loading && !user) { @@ -37,6 +44,10 @@ export default function Network() { setRecommended(recs); const flw = await aethexSocialService.getFollowing(user.id); setFollowing(flw); + const conns = await aethexSocialService.getConnections(user.id); + setConnections(conns); + const ends = await aethexSocialService.getEndorsements(user.id); + setEndorsements(ends); } finally { setIsLoading(false); } @@ -57,6 +68,35 @@ export default function Network() { } }; + const handleInvite = async () => { + if (!user) return; + const email = inviteEmail.trim(); + if (!email || !/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email)) { + toast({ variant: "destructive", title: "Invalid email" }); + return; + } + setInviteSending(true); + try { + await aethexSocialService.sendInvite(user.id, email, null); + toast({ description: "Invitation sent" }); + setInviteEmail(""); + } catch (e: any) { + toast({ variant: "destructive", title: "Failed to send invite", description: e?.message || "Try again later" }); + } finally { + setInviteSending(false); + } + }; + + const handleEndorse = async (targetId: string, skill: string) => { + if (!user) return; + try { + await aethexSocialService.endorseSkill(user.id, targetId, skill); + toast({ description: `Endorsed for ${skill}` }); + } catch (e: any) { + toast({ variant: "destructive", title: "Failed to endorse", description: e?.message || "Try again later" }); + } + }; + if (loading || isLoading) { return (