import { 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 { useDeletePresetMutation } from '~/data-provider'; 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 [menuOpen, setMenuOpen] = useState(false); const [presetModelVisible, setPresetModelVisible] = useState(false); const [preset, setPreset] = useState(false); const availableEndpoints = useRecoilValue(store.availableEndpoints); 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 deletePresetsMutation = useDeletePresetMutation(); 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 clearAllPresets = () => { deletePresetsMutation.mutate({arg: {}}); }; const onDeletePreset = preset => { deletePresetsMutation.mutate({arg: preset}); }; 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. )}
); }