import React, { useState, useEffect } from 'react'; 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, { handleFileSelected } from '~/utils/fetchers'; import { Button } from '../../ui/Button.tsx'; import { DropdownMenu, DropdownMenuContent, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuSeparator, DropdownMenuTrigger } from '../../ui/DropdownMenu.tsx'; import { Dialog, DialogTrigger } from '../../ui/Dialog.tsx'; import DialogTemplate from '../../ui/DialogTemplate'; import store from '~/store'; export default function NewConversationMenu() { // const [modelSave, setModelSave] = useState(false); const [menuOpen, setMenuOpen] = useState(false); const [presetModelVisible, setPresetModelVisible] = useState(false); const [preset, setPreset] = useState(false); // const models = useRecoilValue(store.models); const availableEndpoints = useRecoilValue(store.availableEndpoints); // const setCustomGPTModels = useSetRecoilState(store.customGPTModels); const [presets, setPresets] = useRecoilState(store.presets); const conversation = useRecoilValue(store.conversation) || {}; const { endpoint, conversationId } = conversation; // const { model, promptPrefix, chatGptLabel, conversationId } = conversation; const { newConversation } = store.useConversation(); const { trigger: clearPresetsTrigger } = manualSWR(`/api/presets/delete`, 'post', res => { console.log(res); setPresets(res.data); }); const importPreset = jsonData => { handleFileSelected(jsonData).then(setPresets); }; // update the default model when availableModels changes // typically, availableModels changes => modelsFilter or customGPTModels changes useEffect(() => { const isInvalidConversation = !availableEndpoints.find(e => e === endpoint); if (conversationId == 'new' && isInvalidConversation) { newConversation(); } }, [availableEndpoints]); // save selected model to localstoreage useEffect(() => { if (endpoint) localStorage.setItem('lastConversationSetup', JSON.stringify(conversation)); }, [conversation]); // set the current model const onSelectEndpoint = newEndpoint => { setMenuOpen(false); if (!newEndpoint) return; // else if (newEndpoint === endpoint) return; else { newConversation({}, { endpoint: newEndpoint }); } }; // set the current model const onSelectPreset = newPreset => { setMenuOpen(false); if (!newPreset) return; // else if (newEndpoint === endpoint) return; else { newConversation({}, newPreset); } }; const onChangePreset = preset => { setPresetModelVisible(true); setPreset(preset); }; const clearPreset = () => { clearPresetsTrigger({}); }; const icon = getIcon({ size: 32, ...conversation, isCreatedByUser: false, error: false, button: true }); return ( event.preventDefault()} > Select an Endpoint {availableEndpoints.length ? ( ) : ( No endpoint available. )}
Select a Preset
{presets.length ? ( ) : ( No preset yet. )}
); }