import axios from 'axios'; import { useEffect } from 'react'; import filenamify from 'filenamify'; import exportFromJSON from 'export-from-json'; import { useSetRecoilState, useRecoilState, useRecoilValue } from 'recoil'; import type { TEditPresetProps } from '~/common'; import { useSetOptions, useLocalize } from '~/hooks'; import { Input, Label, Dropdown, Dialog, DialogClose, DialogButton } from '~/components/'; import DialogTemplate from '~/components/ui/DialogTemplate'; import PopoverButtons from './PopoverButtons'; import EndpointSettings from './EndpointSettings'; import { cn, defaultTextProps, removeFocusOutlines, cleanupPreset } from '~/utils/'; import store from '~/store'; const EditPresetDialog = ({ open, onOpenChange, preset: _preset, title }: TEditPresetProps) => { const [preset, setPreset] = useRecoilState(store.preset); const setPresets = useSetRecoilState(store.presets); const availableEndpoints = useRecoilValue(store.availableEndpoints); const { setOption } = useSetOptions(_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, }); }; useEffect(() => { setPreset(_preset); // eslint-disable-next-line react-hooks/exhaustive-deps }, [open]); 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, )} />
} buttons={
{localize('com_endpoint_export')} {localize('com_endpoint_save')}
} />
); }; export default EditPresetDialog;