"use client"; import { IconX, IconDeviceFloppy, IconBookmark } from "@tabler/icons-react"; import type { Icon } from "@tabler/icons-react"; import { cn } from "@/lib/utils"; import { PR_PRESETS, ISSUE_PRESETS, type PresetOption, type PresetGroup } from "./search-bar"; import type { SavedPreset } from "./use-saved-presets"; export type SidebarSelection = { kind: "pr" | "issue"; source: "preset" | "saved"; id: string; }; type PresetsSidebarProps = { selected: SidebarSelection; onSelect: (s: SidebarSelection) => void; savedPresets: SavedPreset[]; onDeleteSaved: (id: string) => void; canSaveCurrent: boolean; onSaveCurrent: () => void; prPresets?: PresetOption[]; issuePresets?: PresetOption[]; }; function KindToggle({ kind, onChange, }: { kind: "pr" | "issue"; onChange: (k: "pr" | "issue") => void; }) { return (
{(["pr", "issue"] as const).map((value) => ( ))}
); } function SectionHeader({ title }: { title: string }) { return (
{title}
); } function PresetItem({ label, Icon, active, onClick, trailing, }: { label: string; Icon: Icon; active: boolean; onClick: () => void; trailing?: React.ReactNode; }) { const onKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); onClick(); } }; return (
{label} {trailing}
); } function PresetGroupList({ presets, group, selected, onSelect, kind, }: { presets: PresetOption[]; group: PresetGroup; selected: SidebarSelection; onSelect: (s: SidebarSelection) => void; kind: "pr" | "issue"; }) { const items = presets.filter((p) => p.group === group); if (items.length === 0) return null; return ( <> {items.map((p) => ( onSelect({ kind, source: "preset", id: p.value })} /> ))} ); } function SavedSection({ saved, selected, onSelect, onDelete, kind, canSaveCurrent, onSaveCurrent, }: { saved: SavedPreset[]; selected: SidebarSelection; onSelect: (s: SidebarSelection) => void; onDelete: (id: string) => void; kind: "pr" | "issue"; canSaveCurrent: boolean; onSaveCurrent: () => void; }) { return ( <> {saved.length === 0 && (
No saved queries yet.
)} {saved.map((s) => ( onSelect({ kind, source: "saved", id: s.id })} trailing={ } /> ))} ); } export function PresetsSidebar({ selected, onSelect, savedPresets, onDeleteSaved, canSaveCurrent, onSaveCurrent, prPresets = PR_PRESETS, issuePresets = ISSUE_PRESETS, }: PresetsSidebarProps) { const presets = selected.kind === "pr" ? prPresets : issuePresets; const saved = savedPresets.filter((p) => p.kind === selected.kind); const onKindChange = (kind: "pr" | "issue") => { const fallback = (kind === "pr" ? prPresets : issuePresets)[0]?.value ?? ""; onSelect({ kind, source: "preset", id: fallback }); }; return ( ); }