"use client"; import { useCallback, useState } from "react"; import type { GlobalNewLLMConfig, NewLLMConfigPublic, } from "@/contracts/types/new-llm-config.types"; import type { ChatVisibility, ThreadRecord } from "@/lib/chat/thread-persistence"; import { ChatShareButton } from "./chat-share-button"; import { ModelConfigSidebar } from "./model-config-sidebar"; import { ModelSelector } from "./model-selector"; interface ChatHeaderProps { searchSpaceId: number; thread?: ThreadRecord | null; onThreadVisibilityChange?: (visibility: ChatVisibility) => void; } export function ChatHeader({ searchSpaceId, thread, onThreadVisibilityChange }: ChatHeaderProps) { const [sidebarOpen, setSidebarOpen] = useState(false); const [selectedConfig, setSelectedConfig] = useState< NewLLMConfigPublic | GlobalNewLLMConfig | null >(null); const [isGlobal, setIsGlobal] = useState(false); const [sidebarMode, setSidebarMode] = useState<"create" | "edit" | "view">("view"); const handleEditConfig = useCallback( (config: NewLLMConfigPublic | GlobalNewLLMConfig, global: boolean) => { setSelectedConfig(config); setIsGlobal(global); setSidebarMode(global ? "view" : "edit"); setSidebarOpen(true); }, [] ); const handleAddNew = useCallback(() => { setSelectedConfig(null); setIsGlobal(false); setSidebarMode("create"); setSidebarOpen(true); }, []); const handleSidebarClose = useCallback((open: boolean) => { setSidebarOpen(open); if (!open) { // Reset state when closing setSelectedConfig(null); } }, []); return (
); }