import type { ApolloClient, MutationQueryReducersMap, ApolloQueryResult, ApolloError, FetchPolicy, FetchMoreOptions, UpdateQueryOptions, FetchMoreQueryOptions, SubscribeToMoreOptions, } from "apollo-client"; import type { Store } from "redux"; import type { DocumentNode, VariableDefinitionNode } from "graphql"; import type { Component } from "react"; declare module "react-apollo" { declare type StatelessComponent

= (props: P) => ?React$Element; declare export interface ProviderProps { store?: Store, client: ApolloClient, } declare export class ApolloProvider extends React$Component { props: ProviderProps, childContextTypes: { store: Store, client: ApolloClient, }, contextTypes: { store: Store, }, getChildContext(): { store: Store, client: ApolloClient, }, render(): React$Element<*>, } declare export type MutationFunc = ( opts: MutationOpts ) => Promise>; declare export type DefaultChildProps = { data: QueryProps & R, mutate: MutationFunc, } & P; declare export interface MutationOpts { variables?: Object, optimisticResponse?: Object, updateQueries?: MutationQueryReducersMap, } declare export interface QueryOpts { ssr?: boolean, variables?: Object, fetchPolicy?: FetchPolicy, pollInterval?: number, skip?: boolean, } declare export interface QueryProps { error?: ApolloError, networkStatus: number, loading: boolean, variables: Object, fetchMore: ( fetchMoreOptions: FetchMoreQueryOptions & FetchMoreOptions ) => Promise>, refetch: (variables?: Object) => Promise>, startPolling: (pollInterval: number) => void, stopPolling: () => void, subscribeToMore: (options: SubscribeToMoreOptions) => () => void, updateQuery: ( mapFn: (previousQueryResult: any, options: UpdateQueryOptions) => any ) => void, } declare export interface OptionProps { ownProps: TProps, data?: QueryProps & TResult, mutate?: MutationFunc, } declare export type OptionDescription

= ( props: P ) => QueryOpts | MutationOpts; declare export interface OperationOption { options?: OptionDescription, props?: (props: OptionProps) => any, skip?: boolean | ((props: any) => boolean), name?: string, withRef?: boolean, shouldResubscribe?: (props: TProps, nextProps: TProps) => boolean, alias?: string, } declare export interface OperationComponent< TResult: Object = {}, TOwnProps: Object = {}, TMergedProps = DefaultChildProps > { ( component: | StatelessComponent | React$Component ): Class>, } declare export function graphql( document: DocumentNode, operationOptions?: OperationOption ): OperationComponent; declare export interface IDocumentDefinition { type: DocumentType, name: string, variables: VariableDefinitionNode[], } declare export function parser(document: DocumentNode): IDocumentDefinition; declare export interface Context { client?: ApolloClient, store?: Store, [key: string]: any } declare export interface QueryTreeArgument { rootElement: React$Element<*>, rootContext?: Context } declare export interface QueryResult { query: Promise>, element: React$Element<*>, context: Context } declare export function walkTree( element: React$Element<*>, context: Context, visitor: ( element: React$Element<*>, instance: any, context: Context ) => boolean | void ): void; declare export function getDataFromTree( rootElement: React$Element<*>, rootContext?: any, fetchRoot?: boolean ): Promise; declare export function renderToStringWithData( component: React$Element<*> ): Promise; declare export function cleanupApolloState(apolloState: any): void; }