import * as React from 'react'; import * as PropTypes from 'prop-types'; import ApolloClient, { ObservableQuery, ApolloError, ApolloQueryResult, NetworkStatus, FetchMoreOptions, FetchMoreQueryOptions } from 'apollo-client'; import { DocumentNode } from 'graphql'; import { OperationVariables, QueryOpts } from './types'; import { RenderPromises } from './getDataFromTree'; export declare type ObservableQueryFields = Pick, 'startPolling' | 'stopPolling' | 'subscribeToMore' | 'updateQuery' | 'refetch' | 'variables'> & { fetchMore: ((fetchMoreOptions: FetchMoreQueryOptions & FetchMoreOptions) => Promise>) & ((fetchMoreOptions: { query: DocumentNode; } & FetchMoreQueryOptions & FetchMoreOptions) => Promise>); }; export interface QueryResult extends ObservableQueryFields { client: ApolloClient; data: TData | undefined; error?: ApolloError; loading: boolean; networkStatus: NetworkStatus; } export interface QueryProps extends QueryOpts { children: (result: QueryResult) => React.ReactNode; query: DocumentNode; displayName?: string; skip?: boolean; onCompleted?: (data: TData) => void; onError?: (error: ApolloError) => void; } export interface QueryContext { client?: ApolloClient; operations?: Map; renderPromises?: RenderPromises; } export default class Query extends React.Component> { static contextTypes: { client: PropTypes.Requireable; operations: PropTypes.Requireable; renderPromises: PropTypes.Requireable; }; static propTypes: { client: PropTypes.Requireable; children: PropTypes.Validator<(...args: any[]) => any>; fetchPolicy: PropTypes.Requireable; notifyOnNetworkStatusChange: PropTypes.Requireable; onCompleted: PropTypes.Requireable<(...args: any[]) => any>; onError: PropTypes.Requireable<(...args: any[]) => any>; pollInterval: PropTypes.Requireable; query: PropTypes.Validator; variables: PropTypes.Requireable; ssr: PropTypes.Requireable; partialRefetch: PropTypes.Requireable; }; context: QueryContext | undefined; private client; private queryObservable?; private querySubscription?; private previousData; private refetcherQueue?; private hasMounted; private operation?; private lastResult; constructor(props: QueryProps, context: QueryContext); fetchData(): Promise> | boolean; componentDidMount(): void; componentWillReceiveProps(nextProps: QueryProps, nextContext: QueryContext): void; componentWillUnmount(): void; componentDidUpdate(prevProps: QueryProps): void; render(): React.ReactNode; private extractOptsFromProps; private initializeQueryObservable; private setOperations; private updateQuery; private startQuerySubscription; private removeQuerySubscription; private resubscribeToQuery; private updateCurrentData; private handleErrorOrCompleted; private getQueryResult; }