react-relay
Version:
A framework for building GraphQL-driven React applications.
75 lines (67 loc) • 2.06 kB
Flow
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
* @format
* @oncall relay
*/
;
import type {
CacheConfig,
FetchPolicy,
Query,
RenderPolicy,
Variables,
} from 'relay-runtime';
const useLazyLoadQueryNode = require('./useLazyLoadQueryNode');
const useMemoOperationDescriptor = require('./useMemoOperationDescriptor');
const useRelayEnvironment = require('./useRelayEnvironment');
const {
__internal: {fetchQuery},
} = require('relay-runtime');
// This separate type export is only needed as long as we are injecting
// a separate hooks implementation in ./HooksImplementation -- it can
// be removed after we stop doing that.
export type UseLazyLoadQueryHookType = hook <TVariables: Variables, TData>(
gqlQuery: Query<TVariables, TData>,
variables: TVariables,
options?: {
fetchKey?: string | number,
fetchPolicy?: FetchPolicy,
networkCacheConfig?: CacheConfig,
UNSTABLE_renderPolicy?: RenderPolicy,
},
) => TData;
hook useLazyLoadQuery<TVariables: Variables, TData>(
gqlQuery: Query<TVariables, TData>,
variables: TVariables,
options?: {
fetchKey?: string | number,
fetchPolicy?: FetchPolicy,
networkCacheConfig?: CacheConfig,
UNSTABLE_renderPolicy?: RenderPolicy,
},
): TData {
const environment = useRelayEnvironment();
const query = useMemoOperationDescriptor(
gqlQuery,
variables,
options && options.networkCacheConfig
? options.networkCacheConfig
: {force: true},
);
const data = useLazyLoadQueryNode<$FlowFixMe>({
componentDisplayName: 'useLazyLoadQuery()',
fetchKey: options?.fetchKey,
fetchObservable: fetchQuery(environment, query),
fetchPolicy: options?.fetchPolicy,
query,
renderPolicy: options?.UNSTABLE_renderPolicy,
});
return data;
}
// $FlowFixMe[react-rule-hook-incompatible]
module.exports = (useLazyLoadQuery: UseLazyLoadQueryHookType);