import exportFromJSON from 'export-from-json'; import { useEffect, useState } from 'react'; import { useRecoilState } from 'recoil'; import { tPresetSchema } from 'librechat-data-provider'; import type { TSetOption, TEditPresetProps } from '~/common'; import { Dialog, DialogButton } from '~/components/ui'; import DialogTemplate from '~/components/ui/DialogTemplate'; import SaveAsPresetDialog from './SaveAsPresetDialog'; import EndpointSettings from './EndpointSettings'; import PopoverButtons from './PopoverButtons'; import { cleanupPreset } from '~/utils'; import { useLocalize } from '~/hooks'; import store from '~/store'; // A preset dialog to show readonly preset values. const EndpointOptionsDialog = ({ open, onOpenChange, preset: _preset, title, }: TEditPresetProps) => { const [preset, setPreset] = useRecoilState(store.preset); const [saveAsDialogShow, setSaveAsDialogShow] = useState(false); const localize = useLocalize(); const setOption: TSetOption = (param) => (newValue) => { const update = {}; update[param] = newValue; setPreset((prevState) => tPresetSchema.parse({ ...prevState, ...update, }), ); }; const saveAsPreset = () => { setSaveAsDialogShow(true); }; const exportPreset = () => { if (!preset) { return; } exportFromJSON({ data: cleanupPreset({ preset }), fileName: `${preset?.title}.json`, exportType: exportFromJSON.types.json, }); }; useEffect(() => { setPreset(_preset); // eslint-disable-next-line react-hooks/exhaustive-deps }, [open]); const { endpoint } = preset ?? {}; if (!endpoint) { return null; } if (!preset) { return null; } return ( <> } buttons={ {localize('com_endpoint_export')} {localize('com_endpoint_save_as_preset')} } /> > ); }; export default EndpointOptionsDialog;