"use client"; import { useState } from "react"; import type { Segment } from "@/actions/harvest-reach/segments"; import { AdminButton, AdminIconButton, AdminSearchInput } from "@/components/admin/design-system"; // Icon components const Icons = { Plus: ({ className }: { className: string }) => ( ), trash: (className: string) => ( ), }; type Props = { segments: Segment[]; activeSegmentId?: string; onSelect: (segment: Segment) => void; onNew: () => void; onDelete: (segmentId: string) => void; }; export default function SegmentListSidebar({ segments, activeSegmentId, onSelect, onNew, onDelete }: Props) { const [search, setSearch] = useState(""); const [confirmDelete, setConfirmDelete] = useState(null); const filtered = segments.filter((s) => s.name.toLowerCase().includes(search.toLowerCase()) ); return ( Saved Segments setSearch(e.target.value)} /> {filtered.length === 0 && ( {search ? "No segments match." : "No saved segments yet."} )} {filtered.map((segment) => ( {confirmDelete === segment.id ? ( Delete "{segment.name}"? { onDelete(segment.id); setConfirmDelete(null); }} fullWidth > Delete setConfirmDelete(null)} fullWidth > Cancel ) : ( onSelect(segment)} className={`px-3 py-2.5 rounded-xl cursor-pointer flex items-center justify-between gap-2 transition-all ${ activeSegmentId === segment.id ? "bg-[var(--admin-accent-light)] border border-[var(--admin-accent)]" : "hover:bg-[var(--admin-card-hover)] border border-transparent" }`} > {segment.name} {segment.description && ( {segment.description} )} { e.stopPropagation(); setConfirmDelete(segment.id); }} className="opacity-0 group-hover:opacity-100 p-1.5 rounded-lg hover:bg-red-50 text-red-500 hover:text-red-600 transition-all" aria-label="Delete segment" > {Icons.trash("w-4 h-4")} )} ))} ); }
{search ? "No segments match." : "No saved segments yet."}
Delete "{segment.name}"?
{segment.name}
{segment.description}