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;
}