"use client";
import Link from "next/link";
import { Heart, ExternalLink, X } from "lucide-react";
import { useFollows, useRemoveFollow } from "@/lib/hooks/useFollows";
import { useBill } from "@/lib/hooks/useBills";
import { useMember } from "@/lib/hooks/useMembers";
import { FollowButton } from "@/components/shared/FollowButton";
import { billLabel, chamberBadgeColor, cn, formatDate, partyBadgeColor } from "@/lib/utils";
import type { Follow } from "@/lib/types";
// ── Bill row ────────────────────────────────────────────────────────────────
function BillRow({ follow }: { follow: Follow }) {
const { data: bill } = useBill(follow.follow_value);
const label = bill ? billLabel(bill.bill_type, bill.bill_number) : follow.follow_value;
return (
{label}
{bill?.chamber && (
{bill.chamber}
)}
{bill ? (bill.short_title || bill.title || label) :
Loading…}
{bill?.latest_action_text && (
{bill.latest_action_date && {formatDate(bill.latest_action_date)} — }
{bill.latest_action_text}
)}
);
}
// ── Member row ───────────────────────────────────────────────────────────────
function MemberRow({ follow, onRemove }: { follow: Follow; onRemove: () => void }) {
const { data: member } = useMember(follow.follow_value);
return (
{/* Photo */}
{member?.photo_url ? (

) : (
{member ? member.name[0] : "?"}
)}
{/* Info */}
{member?.name ?? follow.follow_value}
{member?.party && (
{member.party}
)}
{(member?.chamber || member?.state || member?.district) && (
{[member.chamber, member.state, member.district ? `District ${member.district}` : null]
.filter(Boolean)
.join(" · ")}
)}
{member?.official_url && (
Official site
)}
{/* Unfollow */}
);
}
// ── Page ─────────────────────────────────────────────────────────────────────
export default function FollowingPage() {
const { data: follows = [], isLoading } = useFollows();
const remove = useRemoveFollow();
const bills = follows.filter((f) => f.follow_type === "bill");
const members = follows.filter((f) => f.follow_type === "member");
const topics = follows.filter((f) => f.follow_type === "topic");
if (isLoading) return Loading...
;
return (
Following
Manage what you follow
{/* Bills */}
Bills ({bills.length})
{!bills.length ? (
No bills followed yet.
) : (
{bills.map((f) => )}
)}
{/* Members */}
Members ({members.length})
{!members.length ? (
No members followed yet.
) : (
{members.map((f) => (
remove.mutate(f.id)} />
))}
)}
{/* Topics */}
Topics ({topics.length})
{!topics.length ? (
No topics followed yet.
) : (
{topics.map((f) => (
{f.follow_value.replace(/-/g, " ")}
))}
)}
);
}