import axios from 'axios'; import filenamify from 'filenamify'; import { useSetRecoilState } from 'recoil'; import exportFromJSON from 'export-from-json'; import { useGetEndpointsQuery } from 'librechat-data-provider'; import type { TEditPresetProps } from '~/common'; import { cn, defaultTextProps, removeFocusOutlines, cleanupPreset, mapEndpoints } from '~/utils'; import { Input, Label, Dropdown, Dialog, DialogClose, DialogButton } from '~/components/'; import PopoverButtons from '~/components/Endpoints/PopoverButtons'; import DialogTemplate from '~/components/ui/DialogTemplate'; import { useSetIndexOptions, useLocalize } from '~/hooks'; import { EndpointSettings } from '~/components/Endpoints'; import { useChatContext } from '~/Providers'; import store from '~/store'; const EditPresetDialog = ({ open, onOpenChange, title }: Omit) => { const { preset } = useChatContext(); // TODO: use React Query for presets data const setPresets = useSetRecoilState(store.presets); const { data: availableEndpoints = [] } = useGetEndpointsQuery({ select: mapEndpoints, }); const { setOption } = useSetIndexOptions(preset); const localize = useLocalize(); const submitPreset = () => { if (!preset) { return; } axios({ method: 'post', url: '/api/presets', data: cleanupPreset({ preset }), withCredentials: true, }).then((res) => { setPresets(res?.data); }); }; const exportPreset = () => { if (!preset) { return; } const fileName = filenamify(preset?.title || 'preset'); exportFromJSON({ data: cleanupPreset({ preset }), fileName, exportType: exportFromJSON.types.json, }); }; const { endpoint } = preset || {}; if (!endpoint) { return null; } return (
setOption('title')(e.target.value || '')} placeholder={localize('com_endpoint_set_custom_name')} className={cn( defaultTextProps, 'flex h-10 max-h-10 w-full resize-none px-3 py-2', removeFocusOutlines, )} />
setOption('endpoint')(value)} options={availableEndpoints} />
} buttons={
{localize('com_endpoint_export')} {localize('com_endpoint_save')}
} />
); }; export default EditPresetDialog;