import { Fragment, useCallback, useEffect, useRef, useState } from 'react' import Image from 'next/image' import { Button, Select } from '@janhq/joi' import { ChevronsLeftRight, Copy, ExternalLink } from 'lucide-react' import { twMerge } from 'tailwind-merge' import DropdownModal from './DropdownModal' type Props = { name: string modelHandle?: string availableModels: string[] onActionClick: () => void isLocalModel?: boolean } const HeaderModal: React.FC = ({ name, modelHandle, availableModels, onActionClick, isLocalModel = false, }) => { const [options, setOptions] = useState<{ name: string; value: string }[]>([]) const [selectedVariant, setSelectedVariant] = useState() const textRef = useRef(null) useEffect(() => { const isFromCortexHub = modelHandle?.includes('cortexso') ?? false if (!isLocalModel) { setOptions( availableModels.map((variant) => ({ name: variant, value: variant, })) ) if (availableModels.length > 0) { setSelectedVariant(availableModels[0]) } return } if (isLocalModel && !isFromCortexHub) { setOptions([ { name: modelHandle ?? '', value: modelHandle ?? '', }, ]) setSelectedVariant(modelHandle) return } setOptions( availableModels.map((variant) => ({ name: `${name}:${variant}`, value: `${name}:${variant}`, })) ) if (availableModels.length > 0) { setSelectedVariant(`${name}:${availableModels[0]}`) } }, [availableModels, name, modelHandle, isLocalModel]) const onCopyClicked = useCallback(() => { navigator.clipboard.writeText(textRef.current?.innerText ?? '') }, []) const title = name.charAt(0).toUpperCase() + name.slice(1) if (!selectedVariant) return null return (
{title} Cortex icon Cortex
} content={