import React, { useCallback } from 'react'; import { useRecoilValue } from 'recoil'; import { useNavigate } from 'react-router-dom'; import { useQueryClient } from '@tanstack/react-query'; import { QueryKeys, Constants } from 'librechat-data-provider'; import type { TMessage, TStartupConfig } from 'librechat-data-provider'; import { createChatSearchParams, getDefaultModelSpec, getModelSpecPreset } from '~/utils'; import { NewChatIcon, MobileSidebar, Sidebar } from '~/components/svg'; import { TooltipAnchor, Button } from '~/components/ui'; import { useLocalize, useNewConvo } from '~/hooks'; import store from '~/store'; export default function NewChat({ index = 0, toggleNav, subHeaders, isSmallScreen, headerButtons, }: { index?: number; toggleNav: () => void; isSmallScreen?: boolean; subHeaders?: React.ReactNode; headerButtons?: React.ReactNode; }) { const queryClient = useQueryClient(); /** Note: this component needs an explicit index passed if using more than one */ const { newConversation: newConvo } = useNewConvo(index); const navigate = useNavigate(); const localize = useLocalize(); const defaultPreset = useRecoilValue(store.defaultPreset); const { conversation } = store.useCreateConversationAtom(index); const clickHandler: React.MouseEventHandler = useCallback( (e) => { if (e.button === 0 && (e.ctrlKey || e.metaKey)) { window.open('/c/new', '_blank'); return; } queryClient.setQueryData( [QueryKeys.messages, conversation?.conversationId ?? Constants.NEW_CONVO], [], ); const startupConfig = queryClient.getQueryData([QueryKeys.startupConfig]); const defaultSpec = getDefaultModelSpec(startupConfig); const preset = defaultSpec != null ? getModelSpecPreset(defaultSpec) : defaultPreset; const params = createChatSearchParams(preset ?? conversation); const newRoute = params.size > 0 ? `/c/new?${params.toString()}` : '/c/new'; newConvo(); navigate(newRoute); if (isSmallScreen) { toggleNav(); } }, [queryClient, conversation, newConvo, navigate, toggleNav, defaultPreset, isSmallScreen], ); return ( <>
} />
{headerButtons} } />
{subHeaders != null ? subHeaders : null} ); }