"use client"; import { Loader2, ChevronRight, ChevronDown, Check, NotebookPen, } from "lucide-react"; import { Notebook, NotebookRecord, SelectedRecord, getTypeColor, } from "@/lib/notebook-selection-types"; import { useTranslation } from "react-i18next"; interface NotebookSelectorProps { notebooks: Notebook[]; expandedNotebooks: Set; notebookRecordsMap: Map; selectedRecords: Map; loadingNotebooks: boolean; loadingRecordsFor: Set; isLoading: boolean; onToggleExpanded: (notebookId: string) => void; onToggleRecord: ( record: NotebookRecord, notebookId: string, notebookName: string, ) => void; onSelectAll: (notebookId: string, notebookName: string) => void; onDeselectAll: (notebookId: string) => void; onClearAll: () => void; onCreateSession: () => void; actionLabel?: string; } export default function NotebookSelector({ notebooks, expandedNotebooks, notebookRecordsMap, selectedRecords, loadingNotebooks, loadingRecordsFor, isLoading, onToggleExpanded, onToggleRecord, onSelectAll, onDeselectAll, onClearAll, onCreateSession, actionLabel, }: NotebookSelectorProps) { const { t } = useTranslation(); return (

{t("Select Source (Cross-Notebook)")}

{selectedRecords.size > 0 && ( )}
{loadingNotebooks ? (
) : notebooks.length === 0 ? (
{t("No notebooks with records found")} {t("Save a chat result first to populate a notebook.")}
) : (
{notebooks.map((notebook) => { const isExpanded = expandedNotebooks.has(notebook.id); const records = notebookRecordsMap.get(notebook.id) || []; const isLoadingRecords = loadingRecordsFor.has(notebook.id); const selectedFromThis = records.filter((r) => selectedRecords.has(r.id), ).length; return (
{/* Notebook Header */} {/* Records List */} {isExpanded && (
{isLoadingRecords ? (
) : records.length === 0 ? (
{t("No records")}
) : ( <>
{records.map((record) => { const isSelected = selectedRecords.has(record.id); return (
{ e.stopPropagation(); onToggleRecord( record, notebook.id, notebook.name, ); }} className={`cursor-pointer rounded-lg border p-2.5 transition-all ${ isSelected ? "border-[var(--primary)]/40 bg-[var(--primary)]/8" : "border-transparent hover:border-[var(--border)] hover:bg-[var(--muted)]/40" }`} >
{isSelected && ( )}
{record.type} {record.title}
{record.summary && (

{record.summary}

)}
); })}
)}
)}
); })}
)}
{/* Apply Button */}
); }