diff --git a/client/src/components/Input/Endpoints/FileUpload.jsx b/client/src/components/Input/Endpoints/FileUpload.jsx new file mode 100644 index 0000000000..817386ee28 --- /dev/null +++ b/client/src/components/Input/Endpoints/FileUpload.jsx @@ -0,0 +1,54 @@ +import React from 'react'; +import { useSetRecoilState } from 'recoil'; +import { FileUp } from 'lucide-react'; +import store from '~/store'; +import axios from 'axios'; + +async function fetchPresets(callback) { + try { + const response = await axios.get('/api/presets', { + timeout: 1000, + withCredentials: true + }); + + callback(response.data); + } catch (error) { + console.error(error); + console.log('[FileUpload] Error fetching presets'); + } +} + +const FileUpload = ({ onFileSelected }) => { + const setPresets = useSetRecoilState(store.presets); + + const handleFileChange = event => { + const file = event.target.files[0]; + if (!file) return; + + const reader = new FileReader(); + reader.onload = e => { + const jsonData = JSON.parse(e.target.result); + onFileSelected(jsonData, () => fetchPresets(setPresets)); + }; + reader.readAsText(file); + }; + + return ( + + ); +}; + +export default FileUpload; diff --git a/client/src/components/Input/Endpoints/NewConversationMenu.jsx b/client/src/components/Input/Endpoints/NewConversationMenu.jsx index 0962d80f14..bd122bd5c5 100644 --- a/client/src/components/Input/Endpoints/NewConversationMenu.jsx +++ b/client/src/components/Input/Endpoints/NewConversationMenu.jsx @@ -3,8 +3,9 @@ import { useRecoilValue, useRecoilState } from 'recoil'; import EditPresetDialog from '../../Endpoints/EditPresetDialog'; import EndpointItems from './EndpointItems'; import PresetItems from './PresetItems'; +import FileUpload from './FileUpload'; import getIcon from '~/utils/getIcon'; -import manualSWR from '~/utils/fetchers'; +import manualSWR, { handleFileSelected } from '~/utils/fetchers'; import { Button } from '../../ui/Button.tsx'; import { @@ -135,6 +136,7 @@ export default function NewConversationMenu() { Select a Preset
+