mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-25 08:46:22 +02:00
107 lines
3 KiB
TypeScript
107 lines
3 KiB
TypeScript
"use client";
|
|
|
|
import { useCallback, useState } from "react";
|
|
import type {
|
|
GlobalImageGenConfig,
|
|
GlobalNewLLMConfig,
|
|
ImageGenerationConfig,
|
|
NewLLMConfigPublic,
|
|
} from "@/contracts/types/new-llm-config.types";
|
|
import { ImageConfigSidebar } from "./image-config-sidebar";
|
|
import { ModelConfigSidebar } from "./model-config-sidebar";
|
|
import { ModelSelector } from "./model-selector";
|
|
|
|
interface ChatHeaderProps {
|
|
searchSpaceId: number;
|
|
}
|
|
|
|
export function ChatHeader({ searchSpaceId }: ChatHeaderProps) {
|
|
// LLM config sidebar state
|
|
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");
|
|
|
|
// Image config sidebar state
|
|
const [imageSidebarOpen, setImageSidebarOpen] = useState(false);
|
|
const [selectedImageConfig, setSelectedImageConfig] = useState<
|
|
ImageGenerationConfig | GlobalImageGenConfig | null
|
|
>(null);
|
|
const [isImageGlobal, setIsImageGlobal] = useState(false);
|
|
const [imageSidebarMode, setImageSidebarMode] = useState<"create" | "edit" | "view">("view");
|
|
|
|
// LLM handlers
|
|
const handleEditLLMConfig = useCallback(
|
|
(config: NewLLMConfigPublic | GlobalNewLLMConfig, global: boolean) => {
|
|
setSelectedConfig(config);
|
|
setIsGlobal(global);
|
|
setSidebarMode(global ? "view" : "edit");
|
|
setSidebarOpen(true);
|
|
},
|
|
[]
|
|
);
|
|
|
|
const handleAddNewLLM = useCallback(() => {
|
|
setSelectedConfig(null);
|
|
setIsGlobal(false);
|
|
setSidebarMode("create");
|
|
setSidebarOpen(true);
|
|
}, []);
|
|
|
|
const handleSidebarClose = useCallback((open: boolean) => {
|
|
setSidebarOpen(open);
|
|
if (!open) setSelectedConfig(null);
|
|
}, []);
|
|
|
|
// Image model handlers
|
|
const handleAddImageModel = useCallback(() => {
|
|
setSelectedImageConfig(null);
|
|
setIsImageGlobal(false);
|
|
setImageSidebarMode("create");
|
|
setImageSidebarOpen(true);
|
|
}, []);
|
|
|
|
const handleEditImageConfig = useCallback(
|
|
(config: ImageGenerationConfig | GlobalImageGenConfig, global: boolean) => {
|
|
setSelectedImageConfig(config);
|
|
setIsImageGlobal(global);
|
|
setImageSidebarMode(global ? "view" : "edit");
|
|
setImageSidebarOpen(true);
|
|
},
|
|
[]
|
|
);
|
|
|
|
const handleImageSidebarClose = useCallback((open: boolean) => {
|
|
setImageSidebarOpen(open);
|
|
if (!open) setSelectedImageConfig(null);
|
|
}, []);
|
|
|
|
return (
|
|
<div className="flex items-center gap-2">
|
|
<ModelSelector
|
|
onEditLLM={handleEditLLMConfig}
|
|
onAddNewLLM={handleAddNewLLM}
|
|
onEditImage={handleEditImageConfig}
|
|
onAddNewImage={handleAddImageModel}
|
|
/>
|
|
<ModelConfigSidebar
|
|
open={sidebarOpen}
|
|
onOpenChange={handleSidebarClose}
|
|
config={selectedConfig}
|
|
isGlobal={isGlobal}
|
|
searchSpaceId={searchSpaceId}
|
|
mode={sidebarMode}
|
|
/>
|
|
<ImageConfigSidebar
|
|
open={imageSidebarOpen}
|
|
onOpenChange={handleImageSidebarClose}
|
|
config={selectedImageConfig}
|
|
isGlobal={isImageGlobal}
|
|
searchSpaceId={searchSpaceId}
|
|
mode={imageSidebarMode}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|