| import React, { createContext, useContext, useMemo } from 'react'; |
| import { getEndpointField } from 'librechat-data-provider'; |
| import type { EModelEndpoint } from 'librechat-data-provider'; |
| import { useGetEndpointsQuery } from '~/data-provider'; |
| import { useChatContext } from './ChatContext'; |
|
|
| interface DragDropContextValue { |
| conversationId: string | null | undefined; |
| agentId: string | null | undefined; |
| endpoint: string | null | undefined; |
| endpointType?: EModelEndpoint | undefined; |
| } |
|
|
| const DragDropContext = createContext<DragDropContextValue | undefined>(undefined); |
|
|
| export function DragDropProvider({ children }: { children: React.ReactNode }) { |
| const { conversation } = useChatContext(); |
| const { data: endpointsConfig } = useGetEndpointsQuery(); |
|
|
| const endpointType = useMemo(() => { |
| return ( |
| getEndpointField(endpointsConfig, conversation?.endpoint, 'type') || |
| (conversation?.endpoint as EModelEndpoint | undefined) |
| ); |
| }, [conversation?.endpoint, endpointsConfig]); |
|
|
| |
| const contextValue = useMemo<DragDropContextValue>( |
| () => ({ |
| conversationId: conversation?.conversationId, |
| agentId: conversation?.agent_id, |
| endpoint: conversation?.endpoint, |
| endpointType: endpointType, |
| }), |
| [conversation?.conversationId, conversation?.agent_id, conversation?.endpoint, endpointType], |
| ); |
|
|
| return <DragDropContext.Provider value={contextValue}>{children}</DragDropContext.Provider>; |
| } |
|
|
| export function useDragDropContext() { |
| const context = useContext(DragDropContext); |
| if (!context) { |
| throw new Error('useDragDropContext must be used within DragDropProvider'); |
| } |
| return context; |
| } |
|
|