MCPcopy Create free account
hub / github.com/pollinations/pollinations / ChatHeader

Function ChatHeader

apps/chat/src/components/ChatHeader.jsx:4–130  ·  view source on GitHub ↗
({
    onMenuToggle,
    selectedModel,
    onModelChange,
    selectedImageModel,
    onImageModelChange,
    sidebarOpen,
    models = {},
    imageModels = {},
    mode = "chat",
})

Source from the content-addressed store, hash-verified

2import "./styles/ChatHeader.css";
3
4const ChatHeader = ({
5 onMenuToggle,
6 selectedModel,
7 onModelChange,
8 selectedImageModel,
9 onImageModelChange,
10 sidebarOpen,
11 models = {},
12 imageModels = {},
13 mode = "chat",
14}) => {
15 const [isModelDropdownOpen, setIsModelDropdownOpen] = useState(false);
16 const modelDropdownRef = useRef(null);
17
18 // Memoize current models based on mode
19 const currentModels = useMemo(() => {
20 return mode === "imagine" ? imageModels : models;
21 }, [mode, imageModels, models]);
22
23 // Memoize current selected model
24 const currentSelectedModel = useMemo(() => {
25 return mode === "imagine" ? selectedImageModel : selectedModel;
26 }, [mode, selectedImageModel, selectedModel]);
27
28 // Memoize current model name
29 const currentModelName = useMemo(() => {
30 return currentModels[currentSelectedModel]?.name || "Loading...";
31 }, [currentModels, currentSelectedModel]);
32
33 // Close dropdown when clicking outside
34 useEffect(() => {
35 const handleClickOutside = (event) => {
36 if (
37 modelDropdownRef.current &&
38 !modelDropdownRef.current.contains(event.target)
39 ) {
40 setIsModelDropdownOpen(false);
41 }
42 };
43 document.addEventListener("mousedown", handleClickOutside);
44 return () =>
45 document.removeEventListener("mousedown", handleClickOutside);
46 }, []);
47
48 const handleModelSelect = useCallback(
49 (key) => {
50 if (mode === "imagine") {
51 onImageModelChange(key);
52 } else {
53 onModelChange(key);
54 }
55 setIsModelDropdownOpen(false);
56 },
57 [mode, onImageModelChange, onModelChange],
58 );
59
60 return (
61 <header className="chat-header">

Callers

nothing calls this directly

Calls 1

handleModelSelectFunction · 0.85

Tested by

no test coverage detected