// Type definitions for react-relay 1.3 // Project: https://github.com/facebook/relay, https://facebook.github.io/relay // Definitions by: Johannes Schickling // Matt Martin // Eloy DurĂ¡n // Nicolas Pirotte // Cameron Knight // Kaare Hoff Skovgaard // Matt Krick // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.9 // Prettified with: // $ prettier --parser typescript --tab-width 4 --semi --trailing-comma es5 --write --print-width 120 \ // types/{react-relay,relay-runtime}/{,*}/*.ts* export { commitLocalUpdate, commitRelayModernMutation as commitMutation, fetchRelayModernQuery as fetchQuery, GraphQLTaggedNode, requestRelaySubscription as requestSubscription, } from "relay-runtime"; import * as React from "react"; import * as RelayRuntimeTypes from "relay-runtime"; // ~~~~~~~~~~~~~~~~~~~~~ // Utility types // ~~~~~~~~~~~~~~~~~~~~~ export interface _RefType { " $refType": T; } export interface _FragmentRefs { " $fragmentRefs": T; } export type FragmentOrRegularProp = T extends _RefType ? _FragmentRefs : T extends ReadonlyArray<_RefType> ? ReadonlyArray<_FragmentRefs> : T; export type MappedFragmentProps = { [K in keyof T]: FragmentOrRegularProp }; export type RemoveRelayProp

= Pick>; export interface ComponentRef { componentRef?: (ref: any) => void; } export type RelayContainer

= React.ComponentType> & ComponentRef>; // ~~~~~~~~~~~~~~~~~~~~~ // Maybe Fix // ~~~~~~~~~~~~~~~~~~~~~ export type ConcreteFragmentDefinition = object; export type ConcreteOperationDefinition = object; // ~~~~~~~~~~~~~~~~~~~~~ // RelayProp // ~~~~~~~~~~~~~~~~~~~~~ // note: refetch and pagination containers augment this export interface RelayProp { environment: RelayRuntimeTypes.Environment; } // ~~~~~~~~~~~~~~~~~~~~~ // RelayQL // ~~~~~~~~~~~~~~~~~~~~~ export function RelayQL(strings: string[], ...substitutions: any[]): RelayRuntimeTypes.RelayConcreteNode; // ~~~~~~~~~~~~~~~~~~~~~ // ReactRelayTypes // ~~~~~~~~~~~~~~~~~~~~~ export interface GeneratedNodeMap { [key: string]: RelayRuntimeTypes.GraphQLTaggedNode; } /** * Runtime function to correspond to the `graphql` tagged template function. * All calls to this function should be transformed by the plugin. */ export interface GraphqlInterface { (strings: string[] | TemplateStringsArray): RelayRuntimeTypes.GraphQLTaggedNode; experimental(strings: string[] | TemplateStringsArray): RelayRuntimeTypes.GraphQLTaggedNode; } export const graphql: GraphqlInterface; // ~~~~~~~~~~~~~~~~~~~~~ // ReactRelayQueryRenderer // ~~~~~~~~~~~~~~~~~~~~~ export interface QueryRendererProps { cacheConfig?: RelayRuntimeTypes.CacheConfig; dataFrom?: "NETWORK_ONLY"|"STORE_THEN_NETWORK"; environment: RelayRuntimeTypes.Environment; query?: RelayRuntimeTypes.GraphQLTaggedNode | null; render(readyState: ReadyState): React.ReactNode; variables: T["variables"]; rerunParamExperimental?: RelayRuntimeTypes.RerunParam; } export interface ReadyState { error: Error | undefined | null; props: T | undefined | null; retry?(): void; } export class ReactRelayQueryRenderer extends React.Component< QueryRendererProps > {} export class QueryRenderer< T extends RelayRuntimeTypes.OperationBase = RelayRuntimeTypes.OperationDefaults > extends ReactRelayQueryRenderer {} // ~~~~~~~~~~~~~~~~~~~~~ // createFragmentContainer // ~~~~~~~~~~~~~~~~~~~~~ export function createFragmentContainer

( Component: React.ComponentType

, fragmentSpec: RelayRuntimeTypes.GraphQLTaggedNode | GeneratedNodeMap ): RelayContainer

; // ~~~~~~~~~~~~~~~~~~~~~ // createPaginationContainer // ~~~~~~~~~~~~~~~~~~~~~ export interface PageInfo { endCursor: string | undefined | null; hasNextPage: boolean; hasPreviousPage: boolean; startCursor: string | undefined | null; } export interface ConnectionData { edges?: ReadonlyArray; pageInfo?: Partial | null; } export type RelayPaginationProp = RelayProp & { hasMore(): boolean; isLoading(): boolean; loadMore( pageSize: number, callback?: ((error?: Error) => void) | null, options?: RefetchOptions ): RelayRuntimeTypes.Disposable | undefined | null; refetchConnection( totalCount: number, callback: (error?: Error) => void, refetchVariables?: RelayRuntimeTypes.Variables ): RelayRuntimeTypes.Disposable | undefined | null; }; export function FragmentVariablesGetter( prevVars: RelayRuntimeTypes.Variables, totalCount: number ): RelayRuntimeTypes.Variables; export interface ConnectionConfig

{ direction?: "backward" | "forward"; getConnectionFromProps?(props: P): ConnectionData | undefined | null; getFragmentVariables?: typeof FragmentVariablesGetter; getVariables( props: { [propName: string]: any }, paginationInfo: { count: number; cursor?: string }, fragmentVariables: RelayRuntimeTypes.Variables ): RelayRuntimeTypes.Variables; query: RelayRuntimeTypes.GraphQLTaggedNode; } export function createPaginationContainer

( Component: React.ComponentType

, fragmentSpec: RelayRuntimeTypes.GraphQLTaggedNode | GeneratedNodeMap, connectionConfig: ConnectionConfig

): RelayContainer

; // ~~~~~~~~~~~~~~~~~~~~~ // createRefetchContainer // ~~~~~~~~~~~~~~~~~~~~~ export interface RefetchOptions { force?: boolean; rerunParamExperimental?: RelayRuntimeTypes.RerunParam; } export type RelayRefetchProp = RelayProp & { refetch( refetchVariables: | RelayRuntimeTypes.Variables | ((fragmentVariables: RelayRuntimeTypes.Variables) => RelayRuntimeTypes.Variables), renderVariables?: RelayRuntimeTypes.Variables, callback?: (error?: Error) => void, options?: RefetchOptions ): RelayRuntimeTypes.Disposable; }; export function createRefetchContainer

( Component: React.ComponentType

, fragmentSpec: RelayRuntimeTypes.GraphQLTaggedNode | GeneratedNodeMap, taggedNode: RelayRuntimeTypes.GraphQLTaggedNode ): RelayContainer

; // ~~~~~~~~~~~~~~~~~~~~~ // Context // ~~~~~~~~~~~~~~~~~~~~~ export const ReactRelayContext: React.Context< RelayRuntimeTypes.CRelayContext >;