UNPKG

2.28 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 React = require('react');
14
15var prepareEntryPoint = require('./prepareEntryPoint');
16
17var useRelayEnvironment = require('./useRelayEnvironment');
18
19var _require = require('react'),
20 useMemo = _require.useMemo;
21
22var _require2 = require('relay-runtime'),
23 stableCopy = _require2.stableCopy;
24
25function stableStringify(value) {
26 var _JSON$stringify;
27
28 return (_JSON$stringify = JSON.stringify(stableCopy(value))) !== null && _JSON$stringify !== void 0 ? _JSON$stringify : 'null';
29}
30
31function LazyLoadEntryPointContainer(_ref) {
32 var entryPoint = _ref.entryPoint,
33 entryPointParams = _ref.entryPointParams,
34 props = _ref.props,
35 environmentProvider = _ref.environmentProvider;
36 var environment = useRelayEnvironment();
37 var getPreloadProps = entryPoint.getPreloadProps; // IMPORTANT: Loading the component may suspend (throw), so the props
38 // *must* be computed first to fetch the component's data-dependencies in
39 // parallel with the component itself (the code).
40
41 var entryPointParamsHash = stableStringify(entryPointParams);
42
43 var _useMemo = useMemo(function () {
44 var _environmentProvider;
45
46 return prepareEntryPoint((_environmentProvider = environmentProvider) !== null && _environmentProvider !== void 0 ? _environmentProvider : {
47 getEnvironment: function getEnvironment() {
48 return environment;
49 }
50 }, entryPoint, entryPointParams); // NOTE: stableParams encodes the information from params
51 // eslint-disable-next-line react-hooks/exhaustive-deps
52 }, [environment, environmentProvider, getPreloadProps, entryPointParamsHash]),
53 getComponent = _useMemo.getComponent,
54 queries = _useMemo.queries,
55 entryPoints = _useMemo.entryPoints,
56 extraProps = _useMemo.extraProps;
57
58 var Component = useMemo(function () {
59 return getComponent();
60 }, [getComponent]);
61 return React.createElement(Component, {
62 entryPoints: entryPoints,
63 extraProps: extraProps,
64 props: props,
65 queries: queries
66 });
67}
68
69module.exports = LazyLoadEntryPointContainer;
\No newline at end of file