import React, { useEffect, useState } from 'react'; import { useCreatePresetMutation } from 'librechat-data-provider/react-query'; import { OGDialogTemplate, OGDialog, Input, Label, useToastContext } from '@librechat/client'; import type { TEditPresetProps } from '~/common'; import { cn, removeFocusOutlines, cleanupPreset, defaultTextProps } from '~/utils'; import { NotificationSeverity } from '~/common'; import { useLocalize } from '~/hooks'; const SaveAsPresetDialog = ({ open, onOpenChange, preset }: TEditPresetProps) => { const [title, setTitle] = useState(preset.title ?? 'My Preset'); const createPresetMutation = useCreatePresetMutation(); const { showToast } = useToastContext(); const localize = useLocalize(); const submitPreset = () => { const _preset = cleanupPreset({ preset: { ...preset, title, }, }); const toastTitle = (_preset.title ?? '') ? `\`${_preset.title}\`` : localize('com_endpoint_preset_title'); createPresetMutation.mutate(_preset, { onSuccess: () => { showToast({ message: `${toastTitle} ${localize('com_ui_saved')}`, }); onOpenChange(false); // Close the dialog on success }, onError: () => { showToast({ message: localize('com_endpoint_preset_save_error'), severity: NotificationSeverity.ERROR, }); }, }); }; useEffect(() => { setTitle(preset.title ?? localize('com_endpoint_my_preset')); // eslint-disable-next-line react-hooks/exhaustive-deps }, [open]); // Handle Enter key press const handleKeyDown = (event: React.KeyboardEvent) => { if (event.key === 'Enter') { event.preventDefault(); submitPreset(); } }; return (
setTitle(e.target.value || '')} onKeyDown={handleKeyDown} placeholder={localize('com_endpoint_preset_custom_name_placeholder')} aria-label={localize('com_endpoint_preset_name')} className={cn( defaultTextProps, 'flex h-10 max-h-10 w-full resize-none border-border-medium px-3 py-2', removeFocusOutlines, )} />
} selection={{ selectHandler: submitPreset, selectClasses: 'bg-green-500 hover:bg-green-600 dark:hover:bg-green-600 text-white', selectText: localize('com_ui_save'), }} />
); }; export default SaveAsPresetDialog;