"use client"; import { useState } from "react"; import Link from "next/link"; import { Search, Heart } from "lucide-react"; import { useMembers, useMember } from "@/lib/hooks/useMembers"; import { useFollows } from "@/lib/hooks/useFollows"; import { useAuthStore } from "@/stores/authStore"; import { FollowButton } from "@/components/shared/FollowButton"; import { cn, partyBadgeColor } from "@/lib/utils"; function FollowedMemberRow({ bioguideId }: { bioguideId: string }) { const { data: member } = useMember(bioguideId); if (!member) return null; return (
{member.name}
{member.party && ( {member.party} )} {member.state && {member.state}} {member.chamber && {member.chamber}}
); } export default function MembersPage() { const [q, setQ] = useState(""); const [chamber, setChamber] = useState(""); const [party, setParty] = useState(""); const [page, setPage] = useState(1); const { data, isLoading } = useMembers({ ...(q && { q }), ...(chamber && { chamber }), ...(party && { party }), page, per_page: 50, }); const token = useAuthStore((s) => s.token); const { data: follows } = useFollows(); const followedMemberIds = follows?.filter((f) => f.follow_type === "member").map((f) => f.follow_value) ?? []; return (

Members

Browse current Congress members

{ setQ(e.target.value); setPage(1); }} className="w-full pl-9 pr-3 py-2 text-sm bg-card border border-border rounded-md focus:outline-none" />
{token && followedMemberIds.length > 0 && (

Following ({followedMemberIds.length})

{followedMemberIds.map((id) => ( ))}
)} {isLoading ? (
Loading members...
) : ( <>
{data?.total ?? 0} members
{data?.items?.map((member) => (
{member.name}
{member.party && ( {member.party} )} {member.state && {member.state}} {member.chamber && {member.chamber}}
))}
{data && data.pages > 1 && (
)} )}
); }