import React, { useState, useEffect } from 'react'; import { useRecoilState, useRecoilValue } from 'recoil'; import { Slider, InputNumber, Switch } from '@librechat/client'; import { cn, defaultTextProps, optionText } from '~/utils/'; import { useLocalize } from '~/hooks'; import store from '~/store'; export default function AutoSendTextSelector() { const localize = useLocalize(); const speechToText = useRecoilValue(store.speechToText); const [autoSendText, setAutoSendText] = useRecoilState(store.autoSendText); // Local state for enabled/disabled toggle const [isEnabled, setIsEnabled] = useState(autoSendText !== -1); const [delayValue, setDelayValue] = useState(autoSendText === -1 ? 3 : autoSendText); // Sync local state when autoSendText changes externally useEffect(() => { setIsEnabled(autoSendText !== -1); if (autoSendText !== -1) { setDelayValue(autoSendText); } }, [autoSendText]); const handleToggle = (enabled: boolean) => { setIsEnabled(enabled); if (enabled) { setAutoSendText(delayValue); } else { setAutoSendText(-1); } }; const handleSliderChange = (value: number[]) => { const newValue = value[0]; setDelayValue(newValue); if (isEnabled) { setAutoSendText(newValue); } }; const handleInputChange = (value: number[] | null) => { const newValue = value ? value[0] : 3; setDelayValue(newValue); if (isEnabled) { setAutoSendText(newValue); } }; const labelId = 'auto-send-text-label'; return (
{localize('com_nav_auto_send_text')}
{isEnabled && (
{localize('com_nav_setting_delay')}
{ setDelayValue(3); if (isEnabled) { setAutoSendText(3); } }} min={0} max={60} step={1} className="ml-4 flex h-4 w-24" disabled={!speechToText || !isEnabled} aria-labelledby="auto-send-delay-label" />
)}
); }