| import { Link } from 'lucide-react'; |
| import { useRecoilValue } from 'recoil'; |
| import { QueryKeys } from 'librechat-data-provider'; |
| import { useQueryClient } from '@tanstack/react-query'; |
| import type { TMessage, TConversation } from 'librechat-data-provider'; |
| import type { InfiniteData } from '@tanstack/react-query'; |
| import type { ConversationCursorData } from '~/utils'; |
| import { useLocalize, useNavigateToConvo } from '~/hooks'; |
| import { findConversationInInfinite } from '~/utils'; |
| import store from '~/store'; |
|
|
| export default function SearchButtons({ message }: { message: TMessage }) { |
| const localize = useLocalize(); |
| const queryClient = useQueryClient(); |
| const search = useRecoilValue(store.search); |
| const { navigateToConvo } = useNavigateToConvo(); |
| const conversationId = message.conversationId ?? ''; |
|
|
| const clickHandler = async (event: React.MouseEvent<HTMLButtonElement>) => { |
| event.preventDefault(); |
| if (!conversationId) { |
| return; |
| } |
|
|
| let title = message.title ?? ''; |
| let cachedConvo = queryClient.getQueryData<TConversation>([ |
| QueryKeys.conversation, |
| conversationId, |
| ]); |
| const convos = queryClient.getQueryData<InfiniteData<ConversationCursorData>>([ |
| QueryKeys.allConversations, |
| { search: search.debouncedQuery }, |
| ]); |
| if (!cachedConvo && convos) { |
| cachedConvo = findConversationInInfinite(convos, conversationId); |
| } |
| if (!title) { |
| title = cachedConvo?.title ?? ''; |
| } |
|
|
| document.title = title; |
| navigateToConvo( |
| cachedConvo ?? |
| ({ |
| conversationId, |
| title, |
| } as TConversation), |
| { resetLatestMessage: true }, |
| ); |
| }; |
|
|
| if (!conversationId) { |
| return null; |
| } |
|
|
| return ( |
| <div className="visible mt-0 flex items-center justify-center gap-1 self-end text-text-secondary lg:justify-start"> |
| <button |
| type="button" |
| className="ml-0 flex cursor-pointer items-center gap-1.5 rounded-md p-1 text-xs hover:text-text-primary hover:underline" |
| onClick={clickHandler} |
| title={localize('com_ui_go_to_conversation')} |
| > |
| <Link className="icon-sm" /> |
| {message.title} |
| </button> |
| </div> |
| ); |
| } |
|
|