import { OptionTypes } from 'librechat-data-provider'; import type { DynamicSettingProps } from 'librechat-data-provider'; import { useLocalize, useDebouncedInput, useParameterEffects } from '~/hooks'; import { Label, Input, HoverCard, HoverCardTrigger } from '~/components/ui'; import { cn, defaultTextProps } from '~/utils'; import { useChatContext } from '~/Providers'; import OptionHover from './OptionHover'; import { ESide } from '~/common'; function DynamicInput({ label = '', settingKey, defaultValue, description = '', type = 'string', columnSpan, setOption, optionType, placeholder = '', readonly = false, showDefault = false, labelCode = false, descriptionCode = false, placeholderCode = false, conversation, }: DynamicSettingProps) { const localize = useLocalize(); const { preset } = useChatContext(); const [setInputValue, inputValue, setLocalValue] = useDebouncedInput({ optionKey: optionType !== OptionTypes.Custom ? settingKey : undefined, initialValue: optionType !== OptionTypes.Custom ? (conversation?.[settingKey] as string) : (defaultValue as string), setter: () => ({}), setOption, }); useParameterEffects({ preset, settingKey, defaultValue: typeof defaultValue === 'undefined' ? '' : defaultValue, conversation, inputValue, setInputValue: setLocalValue, }); const handleInputChange = (e: React.ChangeEvent) => { const value = e.target.value; if (type === 'number') { if (!isNaN(Number(value))) { setInputValue(e); } } else { setInputValue(e); } }; return (
{description && ( )}
); } export default DynamicInput;