diff --git a/types/relay-runtime/index.d.ts b/types/relay-runtime/index.d.ts index ee0ab35c39..60b5b4d872 100644 --- a/types/relay-runtime/index.d.ts +++ b/types/relay-runtime/index.d.ts @@ -170,9 +170,9 @@ export { readInlineData } from './lib/store/readInlineData'; // Extensions export { RelayDefaultHandlerProvider as DefaultHandlerProvider } from './lib/handlers/RelayDefaultHandlerProvider'; -export { - missingViewerFieldHandler as DefaultMissingFieldHandlers, -} from './lib/handlers/RelayDefaultMissingFieldHandlers'; + +import DefaultMissingFieldHandlers from './lib/handlers/RelayDefaultMissingFieldHandlers'; +export { DefaultMissingFieldHandlers }; import * as ConnectionHandler from './lib/handlers/connection/RelayConnectionHandler'; export { ConnectionHandler }; diff --git a/types/relay-runtime/lib/handlers/RelayDefaultMissingFieldHandlers.d.ts b/types/relay-runtime/lib/handlers/RelayDefaultMissingFieldHandlers.d.ts index 7ce4239b73..bce4df783f 100644 --- a/types/relay-runtime/lib/handlers/RelayDefaultMissingFieldHandlers.d.ts +++ b/types/relay-runtime/lib/handlers/RelayDefaultMissingFieldHandlers.d.ts @@ -1,3 +1,4 @@ import { MissingFieldHandler } from '../store/RelayStoreTypes'; -export const missingViewerFieldHandler: MissingFieldHandler; +declare const DefaultMissingFieldHandlers: MissingFieldHandler[]; +export default DefaultMissingFieldHandlers; diff --git a/types/relay-runtime/relay-runtime-tests.tsx b/types/relay-runtime/relay-runtime-tests.tsx index 2aa8219d0d..01cd1484be 100644 --- a/types/relay-runtime/relay-runtime-tests.tsx +++ b/types/relay-runtime/relay-runtime-tests.tsx @@ -1,16 +1,19 @@ import { ConcreteRequest, + ConnectionHandler, + DefaultMissingFieldHandlers, Environment, Network, - RecordSource, - Store, - ConnectionHandler, - commitLocalUpdate, QueryResponseCache, ROOT_ID, + ROOT_TYPE, + RecordProxy, + RecordSource, + RecordSourceSelectorProxy, RelayNetworkLoggerTransaction, + Store, + commitLocalUpdate, createRelayNetworkLogger, - RecordSourceSelectorProxy, RecordProxy, } from 'relay-runtime'; const source = new RecordSource(); @@ -48,6 +51,36 @@ const environment = new Environment({ handlerProvider, // Can omit. network, store, + missingFieldHandlers: [ + ...DefaultMissingFieldHandlers, + // Example from https://relay.dev/docs/en/experimental/a-guided-tour-of-relay + { + handle(field, record, argValues) { + if ( + record != null && + record.__typename === ROOT_TYPE && + field.name === 'user' && + argValues.hasOwnProperty('id') + ) { + // If field is user(id: $id), look up the record by the value of $id + return argValues.id; + } + if ( + record != null && + record.__typename === ROOT_TYPE && + field.name === 'story' && + argValues.hasOwnProperty('story_id') + ) { + // If field is story(story_id: $story_id), look up the record by the + // value of $story_id. + return argValues.story_id; + } + + return null; + }, + kind: 'linked', + }, + ], }); // ~~~~~~~~~~~~~~~~~~~~~ @@ -83,8 +116,8 @@ interface MessageEdge { interface SendConversationMessageMutationResponse { readonly sendConversationMessage: { readonly messageEdge: MessageEdge & { - error: string - } + error: string; + }; }; }