react-relay 14.0.0 → 15.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/ReactRelayContainerUtils.js.flow +1 -2
  2. package/ReactRelayContext.js +1 -1
  3. package/ReactRelayContext.js.flow +1 -2
  4. package/ReactRelayFragmentContainer.js.flow +6 -4
  5. package/ReactRelayFragmentMockRenderer.js.flow +1 -2
  6. package/ReactRelayLocalQueryRenderer.js.flow +5 -5
  7. package/ReactRelayPaginationContainer.js.flow +21 -14
  8. package/ReactRelayQueryFetcher.js.flow +28 -16
  9. package/ReactRelayQueryRenderer.js.flow +42 -13
  10. package/ReactRelayQueryRendererContext.js.flow +2 -3
  11. package/ReactRelayRefetchContainer.js.flow +9 -9
  12. package/ReactRelayTestMocker.js.flow +3 -3
  13. package/ReactRelayTypes.js.flow +7 -8
  14. package/RelayContext.js.flow +1 -2
  15. package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +4 -5
  16. package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +4 -5
  17. package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +4 -5
  18. package/__flowtests__/RelayModern-flowtest.js.flow +3 -4
  19. package/__flowtests__/RelayModernFlowtest_badref.graphql.js.flow +3 -4
  20. package/__flowtests__/RelayModernFlowtest_notref.graphql.js.flow +3 -4
  21. package/__flowtests__/RelayModernFlowtest_user.graphql.js.flow +3 -4
  22. package/__flowtests__/RelayModernFlowtest_users.graphql.js.flow +3 -4
  23. package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow +3 -1
  24. package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +3 -1
  25. package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +4 -2
  26. package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +3 -1
  27. package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +4 -2
  28. package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +3 -1
  29. package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +4 -2
  30. package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +4 -2
  31. package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +3 -1
  32. package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +3 -1
  33. package/assertFragmentMap.js.flow +1 -2
  34. package/buildReactRelayContainer.js.flow +7 -7
  35. package/getRootVariablesForFragments.js.flow +1 -3
  36. package/hooks.js +1 -1
  37. package/hooks.js.flow +4 -2
  38. package/index.js +1 -1
  39. package/index.js.flow +6 -2
  40. package/isRelayEnvironment.js.flow +1 -2
  41. package/jest-react/enqueueTask.js.flow +1 -1
  42. package/jest-react/index.js.flow +1 -1
  43. package/jest-react/internalAct.js.flow +1 -1
  44. package/legacy.js +1 -1
  45. package/legacy.js.flow +1 -2
  46. package/lib/ReactRelayContainerUtils.js +2 -3
  47. package/lib/ReactRelayContext.js +3 -4
  48. package/lib/ReactRelayFragmentContainer.js +47 -73
  49. package/lib/ReactRelayFragmentMockRenderer.js +2 -4
  50. package/lib/ReactRelayLocalQueryRenderer.js +18 -31
  51. package/lib/ReactRelayPaginationContainer.js +74 -164
  52. package/lib/ReactRelayQueryFetcher.js +49 -76
  53. package/lib/ReactRelayQueryRenderer.js +63 -84
  54. package/lib/ReactRelayQueryRendererContext.js +2 -2
  55. package/lib/ReactRelayRefetchContainer.js +58 -108
  56. package/lib/ReactRelayTestMocker.js +33 -68
  57. package/lib/ReactRelayTypes.js +2 -1
  58. package/lib/RelayContext.js +4 -7
  59. package/lib/assertFragmentMap.js +3 -5
  60. package/lib/buildReactRelayContainer.js +11 -27
  61. package/lib/getRootVariablesForFragments.js +6 -10
  62. package/lib/hooks.js +5 -18
  63. package/lib/index.js +7 -24
  64. package/lib/isRelayEnvironment.js +5 -4
  65. package/lib/jest-react/enqueueTask.js +5 -9
  66. package/lib/jest-react/index.js +0 -1
  67. package/lib/jest-react/internalAct.js +9 -20
  68. package/lib/legacy.js +2 -8
  69. package/lib/multi-actor/ActorChange.js +2 -5
  70. package/lib/multi-actor/index.js +2 -1
  71. package/lib/multi-actor/useRelayActorEnvironment.js +4 -8
  72. package/lib/relay-hooks/EntryPointContainer.react.js +9 -15
  73. package/lib/relay-hooks/EntryPointTypes.flow.js +5 -3
  74. package/lib/relay-hooks/FragmentResource.js +109 -203
  75. package/lib/relay-hooks/HooksImplementation.js +3 -6
  76. package/lib/relay-hooks/InternalLogger.js +2 -3
  77. package/lib/relay-hooks/LRUCache.js +2 -20
  78. package/lib/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js +33 -54
  79. package/lib/relay-hooks/MatchContainer.js +15 -24
  80. package/lib/relay-hooks/ProfilerContext.js +3 -3
  81. package/lib/relay-hooks/QueryResource.js +31 -101
  82. package/lib/relay-hooks/RelayEnvironmentProvider.js +5 -9
  83. package/lib/relay-hooks/SuspenseResource.js +9 -33
  84. package/lib/relay-hooks/loadEntryPoint.js +19 -31
  85. package/lib/relay-hooks/loadQuery.js +42 -78
  86. package/lib/relay-hooks/preloadQuery_DEPRECATED.js +11 -37
  87. package/lib/relay-hooks/prepareEntryPoint_DEPRECATED.js +9 -15
  88. package/lib/relay-hooks/react-cache/RelayReactCache.js +7 -12
  89. package/lib/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js +27 -81
  90. package/lib/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js +206 -0
  91. package/lib/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js +195 -215
  92. package/lib/relay-hooks/react-cache/useFragment_REACT_CACHE.js +5 -15
  93. package/lib/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js +17 -24
  94. package/lib/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js +149 -0
  95. package/lib/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js +24 -39
  96. package/lib/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js +325 -0
  97. package/lib/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js +37 -0
  98. package/lib/relay-hooks/useBlockingPaginationFragment.js +73 -93
  99. package/lib/relay-hooks/useClientQuery.js +30 -0
  100. package/lib/relay-hooks/useEntryPointLoader.js +18 -38
  101. package/lib/relay-hooks/useFetchTrackingRef.js +10 -12
  102. package/lib/relay-hooks/useFragment.js +8 -19
  103. package/lib/relay-hooks/useFragmentNode.js +20 -32
  104. package/lib/relay-hooks/useIsMountedRef.js +4 -6
  105. package/lib/relay-hooks/useIsOperationNodeActive.js +8 -20
  106. package/lib/relay-hooks/useIsParentQueryActive.js +3 -6
  107. package/lib/relay-hooks/useLazyLoadQuery.js +7 -24
  108. package/lib/relay-hooks/useLazyLoadQueryNode.js +23 -34
  109. package/lib/relay-hooks/useLoadMoreFunction.js +46 -78
  110. package/lib/relay-hooks/useMemoOperationDescriptor.js +6 -15
  111. package/lib/relay-hooks/useMemoVariables.js +15 -34
  112. package/lib/relay-hooks/useMutation.js +9 -27
  113. package/lib/relay-hooks/usePaginationFragment.js +73 -76
  114. package/lib/relay-hooks/usePreloadedQuery.js +13 -44
  115. package/lib/relay-hooks/useQueryLoader.js +24 -49
  116. package/lib/relay-hooks/useRefetchableFragment.js +19 -17
  117. package/lib/relay-hooks/useRefetchableFragmentNode.js +65 -109
  118. package/lib/relay-hooks/useRelayEnvironment.js +4 -8
  119. package/lib/relay-hooks/useStaticFragmentNodeWarning.js +4 -8
  120. package/lib/relay-hooks/useSubscribeToInvalidationState.js +8 -9
  121. package/lib/relay-hooks/useSubscription.js +5 -10
  122. package/lib/relay-hooks/useUnsafeRef_DEPRECATED.js +29 -0
  123. package/multi-actor/ActorChange.js.flow +1 -1
  124. package/multi-actor/index.js.flow +1 -1
  125. package/multi-actor/useRelayActorEnvironment.js.flow +2 -4
  126. package/package.json +2 -2
  127. package/react-relay-hooks.js +2 -2
  128. package/react-relay-hooks.min.js +2 -2
  129. package/react-relay-legacy.js +2 -2
  130. package/react-relay-legacy.min.js +2 -2
  131. package/react-relay.js +2 -2
  132. package/react-relay.min.js +2 -2
  133. package/relay-hooks/EntryPointContainer.react.js.flow +3 -5
  134. package/relay-hooks/EntryPointTypes.flow.js.flow +37 -37
  135. package/relay-hooks/FragmentResource.js.flow +43 -19
  136. package/relay-hooks/HooksImplementation.js.flow +7 -9
  137. package/relay-hooks/InternalLogger.js.flow +1 -3
  138. package/relay-hooks/LRUCache.js.flow +1 -3
  139. package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +19 -14
  140. package/relay-hooks/MatchContainer.js.flow +6 -8
  141. package/relay-hooks/ProfilerContext.js.flow +1 -3
  142. package/relay-hooks/QueryResource.js.flow +29 -11
  143. package/relay-hooks/RelayEnvironmentProvider.js.flow +4 -6
  144. package/relay-hooks/SuspenseResource.js.flow +1 -3
  145. package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +6 -4
  146. package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +4 -4
  147. package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +3 -1
  148. package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +3 -1
  149. package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +39 -39
  150. package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +1 -3
  151. package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +37 -38
  152. package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +18 -20
  153. package/relay-hooks/__flowtests__/utils.js.flow +21 -12
  154. package/relay-hooks/loadEntryPoint.js.flow +11 -6
  155. package/relay-hooks/loadQuery.js.flow +11 -7
  156. package/relay-hooks/preloadQuery_DEPRECATED.js.flow +9 -12
  157. package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +13 -10
  158. package/relay-hooks/react-cache/RelayReactCache.js.flow +1 -3
  159. package/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js.flow +26 -20
  160. package/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js.flow +297 -0
  161. package/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js.flow +136 -96
  162. package/relay-hooks/react-cache/useFragment_REACT_CACHE.js.flow +1 -3
  163. package/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js.flow +3 -5
  164. package/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js.flow +190 -0
  165. package/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js.flow +3 -6
  166. package/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js.flow +601 -0
  167. package/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js.flow +65 -0
  168. package/relay-hooks/useBlockingPaginationFragment.js.flow +86 -59
  169. package/relay-hooks/useClientQuery.js.flow +39 -0
  170. package/relay-hooks/useEntryPointLoader.js.flow +16 -14
  171. package/relay-hooks/useFetchTrackingRef.js.flow +7 -8
  172. package/relay-hooks/useFragment.js.flow +2 -4
  173. package/relay-hooks/useFragmentNode.js.flow +7 -8
  174. package/relay-hooks/useIsMountedRef.js.flow +2 -4
  175. package/relay-hooks/useIsOperationNodeActive.js.flow +1 -1
  176. package/relay-hooks/useIsParentQueryActive.js.flow +1 -1
  177. package/relay-hooks/useLazyLoadQuery.js.flow +9 -32
  178. package/relay-hooks/useLazyLoadQueryNode.js.flow +4 -6
  179. package/relay-hooks/useLoadMoreFunction.js.flow +20 -17
  180. package/relay-hooks/useMemoOperationDescriptor.js.flow +3 -5
  181. package/relay-hooks/useMemoVariables.js.flow +13 -31
  182. package/relay-hooks/useMutation.js.flow +6 -8
  183. package/relay-hooks/usePaginationFragment.js.flow +75 -43
  184. package/relay-hooks/usePreloadedQuery.js.flow +49 -43
  185. package/relay-hooks/useQueryLoader.js.flow +89 -28
  186. package/relay-hooks/useRefetchableFragment.js.flow +83 -23
  187. package/relay-hooks/useRefetchableFragmentNode.js.flow +26 -22
  188. package/relay-hooks/useRelayEnvironment.js.flow +2 -4
  189. package/relay-hooks/useStaticFragmentNodeWarning.js.flow +3 -5
  190. package/relay-hooks/useSubscribeToInvalidationState.js.flow +2 -4
  191. package/relay-hooks/useSubscription.js.flow +1 -3
  192. package/relay-hooks/useUnsafeRef_DEPRECATED.js.flow +25 -0
  193. package/lib/readContext.js +0 -28
  194. package/readContext.js.flow +0 -31
@@ -4,39 +4,31 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @emails oncall+relay
8
7
  *
9
8
  * @format
9
+ * @oncall relay
10
10
  */
11
- // flowlint ambiguous-object-type:error
11
+
12
12
  'use strict';
13
13
 
14
14
  var _require = require('../loadQuery'),
15
- useTrackLoadQueryInRender = _require.useTrackLoadQueryInRender;
16
-
15
+ useTrackLoadQueryInRender = _require.useTrackLoadQueryInRender;
17
16
  var useStaticFragmentNodeWarning = require('../useStaticFragmentNodeWarning');
18
-
19
17
  var useFragmentInternal = require('./useFragmentInternal_REACT_CACHE');
20
-
21
18
  var _require2 = require('react'),
22
- useDebugValue = _require2.useDebugValue;
23
-
19
+ useDebugValue = _require2.useDebugValue;
24
20
  var _require3 = require('relay-runtime'),
25
- getFragment = _require3.getFragment;
26
-
21
+ getFragment = _require3.getFragment;
27
22
  function useFragment(fragment, key) {
28
23
  // We need to use this hook in order to be able to track if
29
24
  // loadQuery was called during render
30
25
  useTrackLoadQueryInRender();
31
26
  var fragmentNode = getFragment(fragment);
32
-
33
27
  if (process.env.NODE_ENV !== "production") {
34
28
  // eslint-disable-next-line react-hooks/rules-of-hooks
35
29
  useStaticFragmentNodeWarning(fragmentNode, 'first argument of useFragment()');
36
30
  }
37
-
38
31
  var data = useFragmentInternal(fragmentNode, key, 'useFragment()');
39
-
40
32
  if (process.env.NODE_ENV !== "production") {
41
33
  // eslint-disable-next-line react-hooks/rules-of-hooks
42
34
  useDebugValue({
@@ -44,8 +36,6 @@ function useFragment(fragment, key) {
44
36
  data: data
45
37
  });
46
38
  }
47
-
48
39
  return data;
49
40
  }
50
-
51
41
  module.exports = useFragment;
@@ -5,52 +5,45 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
7
  *
8
- * @emails oncall+relay
9
8
  * @format
9
+ * @oncall relay
10
10
  */
11
- // flowlint ambiguous-object-type:error
11
+
12
12
  'use strict';
13
13
 
14
14
  var _require = require('../loadQuery'),
15
- useTrackLoadQueryInRender = _require.useTrackLoadQueryInRender;
16
-
15
+ useTrackLoadQueryInRender = _require.useTrackLoadQueryInRender;
17
16
  var useMemoOperationDescriptor = require('../useMemoOperationDescriptor');
18
-
19
17
  var useRelayEnvironment = require('../useRelayEnvironment');
20
-
21
18
  var getQueryResultOrFetchQuery = require('./getQueryResultOrFetchQuery_REACT_CACHE');
22
-
23
19
  var useFragmentInternal = require('./useFragmentInternal_REACT_CACHE');
24
-
25
20
  var _require2 = require('react'),
26
- useEffect = _require2.useEffect;
27
-
21
+ useEffect = _require2.useEffect;
28
22
  function useLazyLoadQuery_REACT_CACHE(gqlQuery, variables, options) {
29
23
  var _options$networkCache;
30
-
31
24
  useTrackLoadQueryInRender();
32
25
  var environment = useRelayEnvironment();
33
26
  var queryOperationDescriptor = useMemoOperationDescriptor(gqlQuery, variables, (_options$networkCache = options === null || options === void 0 ? void 0 : options.networkCacheConfig) !== null && _options$networkCache !== void 0 ? _options$networkCache : {
34
27
  force: true
35
- }); // Get the query going if needed -- this may suspend.
28
+ });
36
29
 
30
+ // Get the query going if needed -- this may suspend.
37
31
  var _getQueryResultOrFetc = getQueryResultOrFetchQuery(environment, queryOperationDescriptor, {
38
- fetchPolicy: options === null || options === void 0 ? void 0 : options.fetchPolicy,
39
- renderPolicy: options === null || options === void 0 ? void 0 : options.UNSTABLE_renderPolicy,
40
- fetchKey: options === null || options === void 0 ? void 0 : options.fetchKey
41
- }),
42
- queryResult = _getQueryResultOrFetc[0],
43
- effect = _getQueryResultOrFetc[1];
44
-
45
- useEffect(effect); // Read the query's root fragment -- this may suspend.
46
-
32
+ fetchPolicy: options === null || options === void 0 ? void 0 : options.fetchPolicy,
33
+ renderPolicy: options === null || options === void 0 ? void 0 : options.UNSTABLE_renderPolicy,
34
+ fetchKey: options === null || options === void 0 ? void 0 : options.fetchKey
35
+ }),
36
+ queryResult = _getQueryResultOrFetc[0],
37
+ effect = _getQueryResultOrFetc[1];
38
+ useEffect(effect);
39
+
40
+ // Read the query's root fragment -- this may suspend.
47
41
  var fragmentNode = queryResult.fragmentNode,
48
- fragmentRef = queryResult.fragmentRef; // $FlowExpectedError[incompatible-return] Is this a fixable incompatible-return?
49
-
42
+ fragmentRef = queryResult.fragmentRef;
43
+ // $FlowExpectedError[incompatible-return] Is this a fixable incompatible-return?
50
44
  return useFragmentInternal(fragmentNode, fragmentRef, 'useLazyLoadQuery()', {
51
45
  fetchPolicy: options === null || options === void 0 ? void 0 : options.fetchPolicy,
52
46
  networkCacheConfig: options === null || options === void 0 ? void 0 : options.networkCacheConfig
53
47
  });
54
48
  }
55
-
56
49
  module.exports = useLazyLoadQuery_REACT_CACHE;
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and 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
+ *
8
+ * @format
9
+ * @oncall relay
10
+ */
11
+
12
+ 'use strict';
13
+
14
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
15
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
16
+ var useLoadMoreFunction = require('../useLoadMoreFunction');
17
+ var useRelayEnvironment = require('../useRelayEnvironment');
18
+ var useStaticFragmentNodeWarning = require('../useStaticFragmentNodeWarning');
19
+ var useRefetchableFragmentInternal = require('./useRefetchableFragmentInternal_REACT_CACHE');
20
+ var _require = require('react'),
21
+ useCallback = _require.useCallback,
22
+ useDebugValue = _require.useDebugValue,
23
+ useState = _require.useState;
24
+ var _require2 = require('relay-runtime'),
25
+ getFragment = _require2.getFragment,
26
+ getFragmentIdentifier = _require2.getFragmentIdentifier,
27
+ getPaginationMetadata = _require2.getPaginationMetadata;
28
+ function usePaginationFragment(fragmentInput, parentFragmentRef) {
29
+ var fragmentNode = getFragment(fragmentInput);
30
+ useStaticFragmentNodeWarning(fragmentNode, 'first argument of usePaginationFragment()');
31
+ var componentDisplayName = 'usePaginationFragment()';
32
+ var _getPaginationMetadat = getPaginationMetadata(fragmentNode, componentDisplayName),
33
+ connectionPathInFragmentData = _getPaginationMetadat.connectionPathInFragmentData,
34
+ paginationRequest = _getPaginationMetadat.paginationRequest,
35
+ paginationMetadata = _getPaginationMetadat.paginationMetadata,
36
+ identifierField = _getPaginationMetadat.identifierField;
37
+ var _useRefetchableFragme = useRefetchableFragmentInternal(fragmentNode, parentFragmentRef, componentDisplayName),
38
+ fragmentData = _useRefetchableFragme.fragmentData,
39
+ fragmentRef = _useRefetchableFragme.fragmentRef,
40
+ refetch = _useRefetchableFragme.refetch;
41
+ var fragmentIdentifier = getFragmentIdentifier(fragmentNode, fragmentRef);
42
+
43
+ // Backward pagination
44
+ var _useLoadMore = useLoadMore({
45
+ componentDisplayName: componentDisplayName,
46
+ connectionPathInFragmentData: connectionPathInFragmentData,
47
+ direction: 'backward',
48
+ fragmentData: fragmentData,
49
+ fragmentIdentifier: fragmentIdentifier,
50
+ fragmentNode: fragmentNode,
51
+ fragmentRef: fragmentRef,
52
+ identifierField: identifierField,
53
+ paginationMetadata: paginationMetadata,
54
+ paginationRequest: paginationRequest
55
+ }),
56
+ loadPrevious = _useLoadMore[0],
57
+ hasPrevious = _useLoadMore[1],
58
+ isLoadingPrevious = _useLoadMore[2],
59
+ disposeFetchPrevious = _useLoadMore[3];
60
+
61
+ // Forward pagination
62
+ var _useLoadMore2 = useLoadMore({
63
+ componentDisplayName: componentDisplayName,
64
+ connectionPathInFragmentData: connectionPathInFragmentData,
65
+ direction: 'forward',
66
+ fragmentData: fragmentData,
67
+ fragmentIdentifier: fragmentIdentifier,
68
+ fragmentNode: fragmentNode,
69
+ fragmentRef: fragmentRef,
70
+ identifierField: identifierField,
71
+ paginationMetadata: paginationMetadata,
72
+ paginationRequest: paginationRequest
73
+ }),
74
+ loadNext = _useLoadMore2[0],
75
+ hasNext = _useLoadMore2[1],
76
+ isLoadingNext = _useLoadMore2[2],
77
+ disposeFetchNext = _useLoadMore2[3];
78
+ var refetchPagination = useCallback(function (variables, options) {
79
+ disposeFetchNext();
80
+ disposeFetchPrevious();
81
+ return refetch(variables, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, options), {}, {
82
+ __environment: undefined
83
+ }));
84
+ }, [disposeFetchNext, disposeFetchPrevious, refetch]);
85
+ if (process.env.NODE_ENV !== "production") {
86
+ // eslint-disable-next-line react-hooks/rules-of-hooks
87
+ useDebugValue({
88
+ fragment: fragmentNode.name,
89
+ data: fragmentData,
90
+ hasNext: hasNext,
91
+ isLoadingNext: isLoadingNext,
92
+ hasPrevious: hasPrevious,
93
+ isLoadingPrevious: isLoadingPrevious
94
+ });
95
+ }
96
+ return {
97
+ data: fragmentData,
98
+ loadNext: loadNext,
99
+ loadPrevious: loadPrevious,
100
+ hasNext: hasNext,
101
+ hasPrevious: hasPrevious,
102
+ isLoadingNext: isLoadingNext,
103
+ isLoadingPrevious: isLoadingPrevious,
104
+ refetch: refetchPagination
105
+ };
106
+ }
107
+ function useLoadMore(args) {
108
+ var environment = useRelayEnvironment();
109
+ var _useState = useState(false),
110
+ isLoadingMore = _useState[0],
111
+ reallySetIsLoadingMore = _useState[1];
112
+ // Schedule this update since it must be observed by components at the same
113
+ // batch as when hasNext changes. hasNext is read from the store and store
114
+ // updates are scheduled, so this must be scheduled too.
115
+ var setIsLoadingMore = function setIsLoadingMore(value) {
116
+ var _environment$getSched;
117
+ var schedule = (_environment$getSched = environment.getScheduler()) === null || _environment$getSched === void 0 ? void 0 : _environment$getSched.schedule;
118
+ if (schedule) {
119
+ schedule(function () {
120
+ reallySetIsLoadingMore(value);
121
+ });
122
+ } else {
123
+ reallySetIsLoadingMore(value);
124
+ }
125
+ };
126
+ var observer = {
127
+ start: function start() {
128
+ return setIsLoadingMore(true);
129
+ },
130
+ complete: function complete() {
131
+ return setIsLoadingMore(false);
132
+ },
133
+ error: function error() {
134
+ return setIsLoadingMore(false);
135
+ }
136
+ };
137
+ var handleReset = function handleReset() {
138
+ return setIsLoadingMore(false);
139
+ };
140
+ var _useLoadMoreFunction = useLoadMoreFunction((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, args), {}, {
141
+ observer: observer,
142
+ onReset: handleReset
143
+ })),
144
+ loadMore = _useLoadMoreFunction[0],
145
+ hasMore = _useLoadMoreFunction[1],
146
+ disposeFetch = _useLoadMoreFunction[2];
147
+ return [loadMore, hasMore, isLoadingMore, disposeFetch];
148
+ }
149
+ module.exports = usePaginationFragment;
@@ -5,47 +5,37 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
7
  *
8
- * @emails oncall+relay
9
8
  * @format
9
+ * @oncall relay
10
10
  */
11
- // flowlint ambiguous-object-type:error
11
+
12
12
  'use strict';
13
13
 
14
14
  var _require = require('../loadQuery'),
15
- useTrackLoadQueryInRender = _require.useTrackLoadQueryInRender;
16
-
15
+ useTrackLoadQueryInRender = _require.useTrackLoadQueryInRender;
17
16
  var useMemoOperationDescriptor = require('../useMemoOperationDescriptor');
18
-
19
17
  var useRelayEnvironment = require('../useRelayEnvironment');
20
-
21
18
  var getQueryResultOrFetchQuery = require('./getQueryResultOrFetchQuery_REACT_CACHE');
22
-
23
19
  var useFragmentInternal = require('./useFragmentInternal_REACT_CACHE');
24
-
25
20
  var invariant = require('invariant');
26
-
27
21
  var _require2 = require('react'),
28
- useDebugValue = _require2.useDebugValue,
29
- useEffect = _require2.useEffect;
30
-
22
+ useDebugValue = _require2.useDebugValue,
23
+ useEffect = _require2.useEffect;
31
24
  var _require3 = require('relay-runtime'),
32
- _require3$__internal = _require3.__internal,
33
- fetchQueryDeduped = _require3$__internal.fetchQueryDeduped,
34
- fetchQuery = _require3$__internal.fetchQuery;
35
-
25
+ _require3$__internal = _require3.__internal,
26
+ fetchQueryDeduped = _require3$__internal.fetchQueryDeduped,
27
+ fetchQuery = _require3$__internal.fetchQuery;
36
28
  var warning = require("fbjs/lib/warning");
37
-
38
29
  function usePreloadedQuery_REACT_CACHE(gqlQuery, preloadedQuery, options) {
39
30
  var environment = useRelayEnvironment();
40
31
  useTrackLoadQueryInRender();
41
32
  var fetchKey = preloadedQuery.fetchKey,
42
- fetchPolicy = preloadedQuery.fetchPolicy,
43
- source = preloadedQuery.source,
44
- variables = preloadedQuery.variables,
45
- networkCacheConfig = preloadedQuery.networkCacheConfig;
33
+ fetchPolicy = preloadedQuery.fetchPolicy,
34
+ source = preloadedQuery.source,
35
+ variables = preloadedQuery.variables,
36
+ networkCacheConfig = preloadedQuery.networkCacheConfig;
46
37
  var operation = useMemoOperationDescriptor(gqlQuery, variables, networkCacheConfig);
47
38
  var fetchObservable;
48
-
49
39
  if (preloadedQuery.kind === 'PreloadedQuery_DEPRECATED') {
50
40
  !(operation.request.node.params.name === preloadedQuery.name) ? process.env.NODE_ENV !== "production" ? invariant(false, 'usePreloadedQuery(): Expected data to be prefetched for query `%s`, ' + 'got prefetch results for query `%s`.', operation.request.node.params.name, preloadedQuery.name) : invariant(false) : void 0;
51
41
  fetchObservable = fetchQueryDeduped(environment, operation.request.identifier, function () {
@@ -63,7 +53,6 @@ function usePreloadedQuery_REACT_CACHE(gqlQuery, preloadedQuery, options) {
63
53
  } else {
64
54
  process.env.NODE_ENV !== "production" ? warning(preloadedQuery.isDisposed === false, 'usePreloadedQuery(): Expected preloadedQuery to not be disposed yet. ' + 'This is because disposing the query marks it for future garbage ' + 'collection, and as such query results may no longer be present in the Relay ' + 'store. In the future, this will become a hard error.') : void 0;
65
55
  var fallbackFetchObservable = fetchQuery(environment, operation);
66
-
67
56
  if (source != null && environment === preloadedQuery.environment) {
68
57
  // If the source observable exists and the environments match, reuse
69
58
  // the source observable.
@@ -85,28 +74,26 @@ function usePreloadedQuery_REACT_CACHE(gqlQuery, preloadedQuery, options) {
85
74
  // fall back and re-execute and de-dupe the query (at render time).
86
75
  fetchObservable = fallbackFetchObservable;
87
76
  }
88
- } // Get the query going if needed -- this may suspend.
89
-
77
+ }
90
78
 
79
+ // Get the query going if needed -- this may suspend.
91
80
  var _getQueryResultOrFetc = getQueryResultOrFetchQuery(environment, operation, {
92
- fetchPolicy: fetchPolicy,
93
- renderPolicy: options === null || options === void 0 ? void 0 : options.UNSTABLE_renderPolicy,
94
- fetchKey: fetchKey,
95
- fetchObservable: fetchObservable
96
- }),
97
- queryResult = _getQueryResultOrFetc[0],
98
- effect = _getQueryResultOrFetc[1];
99
-
100
- useEffect(effect); // Read the query's root fragment -- this may suspend.
81
+ fetchPolicy: fetchPolicy,
82
+ renderPolicy: options === null || options === void 0 ? void 0 : options.UNSTABLE_renderPolicy,
83
+ fetchKey: fetchKey,
84
+ fetchObservable: fetchObservable
85
+ }),
86
+ queryResult = _getQueryResultOrFetc[0],
87
+ effect = _getQueryResultOrFetc[1];
88
+ useEffect(effect);
101
89
 
90
+ // Read the query's root fragment -- this may suspend.
102
91
  var fragmentNode = queryResult.fragmentNode,
103
- fragmentRef = queryResult.fragmentRef; // $FlowExpectedError[incompatible-return] Is this a fixable incompatible-return?
104
-
92
+ fragmentRef = queryResult.fragmentRef;
105
93
  var data = useFragmentInternal(fragmentNode, fragmentRef, 'usePreloadedQuery()', {
106
94
  fetchPolicy: fetchPolicy,
107
95
  networkCacheConfig: networkCacheConfig
108
96
  });
109
-
110
97
  if (process.env.NODE_ENV !== "production") {
111
98
  // eslint-disable-next-line react-hooks/rules-of-hooks
112
99
  useDebugValue({
@@ -118,8 +105,6 @@ function usePreloadedQuery_REACT_CACHE(gqlQuery, preloadedQuery, options) {
118
105
  renderPolicy: options === null || options === void 0 ? void 0 : options.UNSTABLE_renderPolicy
119
106
  });
120
107
  }
121
-
122
108
  return data;
123
109
  }
124
-
125
110
  module.exports = usePreloadedQuery_REACT_CACHE;