UNPKG

2.62 kBJavaScriptView Raw
1/**
2 * Copyright (c) Facebook, Inc. and its affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 *
7 * @emails oncall+relay
8 *
9 * @format
10 */
11'use strict';
12
13var ProfilerContext = require('./ProfilerContext');
14
15var React = require('react');
16
17var useFetchTrackingRef = require('./useFetchTrackingRef');
18
19var useFragmentNode = require('./useFragmentNode');
20
21var useRelayEnvironment = require('./useRelayEnvironment');
22
23var _require = require('./QueryResource'),
24 getQueryResourceForEnvironment = _require.getQueryResourceForEnvironment;
25
26var _require2 = require('relay-runtime'),
27 fetchQuery = _require2.__internal.fetchQuery;
28
29var useContext = React.useContext,
30 useEffect = React.useEffect;
31
32function useLazyLoadQueryNode(args) {
33 var _args$fetchObservable;
34
35 var environment = useRelayEnvironment();
36 var profilerContext = useContext(ProfilerContext);
37 var QueryResource = getQueryResourceForEnvironment(environment);
38 var query = args.query,
39 componentDisplayName = args.componentDisplayName,
40 fetchKey = args.fetchKey,
41 fetchPolicy = args.fetchPolicy,
42 renderPolicy = args.renderPolicy;
43 var fetchObservable = (_args$fetchObservable = args.fetchObservable) !== null && _args$fetchObservable !== void 0 ? _args$fetchObservable : fetchQuery(environment, query, {
44 networkCacheConfig: args.networkCacheConfig
45 });
46
47 var _useFetchTrackingRef = useFetchTrackingRef(),
48 startFetch = _useFetchTrackingRef.startFetch,
49 completeFetch = _useFetchTrackingRef.completeFetch;
50
51 var preparedQueryResult = profilerContext.wrapPrepareQueryResource(function () {
52 return QueryResource.prepare(query, fetchObservable, fetchPolicy, renderPolicy, {
53 start: startFetch,
54 complete: completeFetch,
55 error: completeFetch
56 }, fetchKey);
57 });
58 useEffect(function () {
59 var disposable = QueryResource.retain(preparedQueryResult);
60 return function () {
61 disposable.dispose();
62 }; // NOTE: We disable react-hooks-deps warning because the `environment`
63 // and `query` identities are capturing all information about whether
64 // the effect should be re-ran and the query re-retained.
65 // eslint-disable-next-line react-hooks/exhaustive-deps
66 }, [environment, query]);
67 var fragmentNode = preparedQueryResult.fragmentNode,
68 fragmentRef = preparedQueryResult.fragmentRef;
69
70 var _useFragmentNode = useFragmentNode(fragmentNode, fragmentRef, componentDisplayName),
71 data = _useFragmentNode.data;
72
73 return data;
74}
75
76module.exports = useLazyLoadQueryNode;
\No newline at end of file