import React, { useState, useEffect, useCallback } from 'react'; import { StopGeneratingIcon } from '~/components'; import { Settings } from 'lucide-react'; import { SetKeyDialog } from './SetKeyDialog'; import { useUserKey, useLocalize, useMediaQuery } from '~/hooks'; import { SendMessageIcon } from '~/components/svg'; import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from '~/components/ui/'; export default function SubmitButton({ conversation, submitMessage, handleStopGenerating, disabled, isSubmitting, userProvidesKey, hasText, }) { const { endpoint } = conversation; const [isDialogOpen, setDialogOpen] = useState(false); const { checkExpiry } = useUserKey(endpoint); const [isKeyProvided, setKeyProvided] = useState(userProvidesKey ? checkExpiry() : true); const isKeyActive = checkExpiry(); const localize = useLocalize(); const dots = ['·', '··', '···']; const [dotIndex, setDotIndex] = useState(0); useEffect(() => { const interval = setInterval(() => { setDotIndex((prevDotIndex) => (prevDotIndex + 1) % dots.length); }, 500); return () => clearInterval(interval); }, [dots.length]); useEffect(() => { if (userProvidesKey) { setKeyProvided(isKeyActive); } else { setKeyProvided(true); } }, [checkExpiry, endpoint, userProvidesKey, isKeyActive]); const clickHandler = useCallback( (e: React.MouseEvent) => { e.preventDefault(); submitMessage(); }, [submitMessage], ); const [isSquareGreen, setIsSquareGreen] = useState(false); const setKey = useCallback(() => { setDialogOpen(true); }, []); const isSmallScreen = useMediaQuery('(max-width: 768px)'); const iconContainerClass = `m-1 mr-0 rounded-md pb-[5px] pl-[6px] pr-[4px] pt-[5px] ${ hasText ? (isSquareGreen ? 'bg-green-500' : '') : '' } group-hover:bg-19C37D group-disabled:hover:bg-transparent dark:${ hasText ? (isSquareGreen ? 'bg-green-500' : '') : '' } dark:group-hover:text-gray-400 dark:group-disabled:hover:bg-transparent`; useEffect(() => { setIsSquareGreen(hasText); }, [hasText]); if (isSubmitting && isSmallScreen) { return ( ); } else if (isSubmitting) { return (
{dots[dotIndex]}
); } else if (!isKeyProvided) { return ( <> {userProvidesKey && ( )} ); } else { return ( {localize('com_nav_send_message')} ); } }