import { FetchNextPageOptions, InfiniteQueryObserverResult, InfiniteData, } from '@tanstack/react-query' import React, { createContext, PropsWithChildren, useContext, useMemo, useState } from 'react' import { ApiGetQueryOptions } from '../hooks' import { useConversations, UseConversationsValue } from '../hooks/use_conversations' import { ConversationFiltersParams } from '../screens/conversation_filters/screen_props' import { ApiCollection, ConversationResource } from '../types' import { ResponseError } from '../utils/response_error' interface ConversationsContextValue extends UseConversationsValue { activeConversationId?: number setActiveConversationId: (_id: number) => void args: ConversationFiltersParams } const defaultQueryValue: UseConversationsValue = { conversations: [], refetch: () => Promise.resolve(null), error: null, isError: false, isLoading: true, fetchNextPage, hasNextPage: false, isFetching: false, isFetched: false, isRefetching: false, } const ConversationsContext = createContext({ args: {}, activeConversationId: undefined, setActiveConversationId: () => {}, ...defaultQueryValue, }) export const ConversationsContextProvider = ({ children, args = {}, opts: paginatorOptions, }: PropsWithChildren<{ args: ConversationFiltersParams opts?: ApiGetQueryOptions }>) => { const [activeConversationId, setActiveConversationId] = useState() const { chat_group_graph_id, group_source_app_name, show_direct_messages, show_archived } = args const query = useConversations( { chat_group_graph_id, group_source_app_name, show_direct_messages, show_archived, }, paginatorOptions ) const value = useMemo( () => ({ args, activeConversationId, setActiveConversationId, ...query, }), [args, activeConversationId, query] ) return {children} } function fetchNextPage( _options?: FetchNextPageOptions ): Promise< InfiniteQueryObserverResult< InfiniteData, unknown>, ResponseError > > { throw new Error('Function not implemented.') } export const useConversationsContext = () => useContext(ConversationsContext)