react-relay 14.0.0 → 15.0.0

Sign up to get free protection for your applications and to get access to all the features.
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,89 +4,72 @@
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
12
- 'use strict';
13
11
 
14
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
12
+ 'use strict';
15
13
 
14
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
16
15
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
17
-
18
16
  var useFetchTrackingRef = require('./useFetchTrackingRef');
19
-
20
17
  var useIsMountedRef = require('./useIsMountedRef');
21
-
22
18
  var useIsOperationNodeActive = require('./useIsOperationNodeActive');
23
-
24
19
  var useRelayEnvironment = require('./useRelayEnvironment');
25
-
26
20
  var invariant = require('invariant');
27
-
28
21
  var _require = require('react'),
29
- useCallback = _require.useCallback,
30
- useEffect = _require.useEffect,
31
- useState = _require.useState;
32
-
22
+ useCallback = _require.useCallback,
23
+ useEffect = _require.useEffect,
24
+ useState = _require.useState;
33
25
  var _require2 = require('relay-runtime'),
34
- ConnectionInterface = _require2.ConnectionInterface,
35
- fetchQuery = _require2.__internal.fetchQuery,
36
- createOperationDescriptor = _require2.createOperationDescriptor,
37
- getPaginationVariables = _require2.getPaginationVariables,
38
- getSelector = _require2.getSelector,
39
- getValueAtPath = _require2.getValueAtPath;
40
-
26
+ fetchQuery = _require2.__internal.fetchQuery,
27
+ ConnectionInterface = _require2.ConnectionInterface,
28
+ createOperationDescriptor = _require2.createOperationDescriptor,
29
+ getPaginationVariables = _require2.getPaginationVariables,
30
+ getSelector = _require2.getSelector,
31
+ getValueAtPath = _require2.getValueAtPath;
41
32
  var warning = require("fbjs/lib/warning");
42
-
43
33
  function useLoadMoreFunction(args) {
44
34
  var direction = args.direction,
45
- fragmentNode = args.fragmentNode,
46
- fragmentRef = args.fragmentRef,
47
- fragmentIdentifier = args.fragmentIdentifier,
48
- fragmentData = args.fragmentData,
49
- connectionPathInFragmentData = args.connectionPathInFragmentData,
50
- paginationRequest = args.paginationRequest,
51
- paginationMetadata = args.paginationMetadata,
52
- componentDisplayName = args.componentDisplayName,
53
- observer = args.observer,
54
- onReset = args.onReset,
55
- identifierField = args.identifierField;
35
+ fragmentNode = args.fragmentNode,
36
+ fragmentRef = args.fragmentRef,
37
+ fragmentIdentifier = args.fragmentIdentifier,
38
+ fragmentData = args.fragmentData,
39
+ connectionPathInFragmentData = args.connectionPathInFragmentData,
40
+ paginationRequest = args.paginationRequest,
41
+ paginationMetadata = args.paginationMetadata,
42
+ componentDisplayName = args.componentDisplayName,
43
+ observer = args.observer,
44
+ onReset = args.onReset,
45
+ identifierField = args.identifierField;
56
46
  var environment = useRelayEnvironment();
57
-
58
47
  var _useFetchTrackingRef = useFetchTrackingRef(),
59
- isFetchingRef = _useFetchTrackingRef.isFetchingRef,
60
- startFetch = _useFetchTrackingRef.startFetch,
61
- disposeFetch = _useFetchTrackingRef.disposeFetch,
62
- completeFetch = _useFetchTrackingRef.completeFetch;
63
-
48
+ isFetchingRef = _useFetchTrackingRef.isFetchingRef,
49
+ startFetch = _useFetchTrackingRef.startFetch,
50
+ disposeFetch = _useFetchTrackingRef.disposeFetch,
51
+ completeFetch = _useFetchTrackingRef.completeFetch;
64
52
  var identifierValue = identifierField != null && fragmentData != null && typeof fragmentData === 'object' ? fragmentData[identifierField] : null;
65
53
  var isMountedRef = useIsMountedRef();
66
-
67
54
  var _useState = useState(environment),
68
- mirroredEnvironment = _useState[0],
69
- setMirroredEnvironment = _useState[1];
70
-
55
+ mirroredEnvironment = _useState[0],
56
+ setMirroredEnvironment = _useState[1];
71
57
  var _useState2 = useState(fragmentIdentifier),
72
- mirroredFragmentIdentifier = _useState2[0],
73
- setMirroredFragmentIdentifier = _useState2[1];
74
-
58
+ mirroredFragmentIdentifier = _useState2[0],
59
+ setMirroredFragmentIdentifier = _useState2[1];
75
60
  var isParentQueryActive = useIsOperationNodeActive(fragmentNode, fragmentRef);
76
61
  var shouldReset = environment !== mirroredEnvironment || fragmentIdentifier !== mirroredFragmentIdentifier;
77
-
78
62
  if (shouldReset) {
79
63
  disposeFetch();
80
64
  onReset();
81
65
  setMirroredEnvironment(environment);
82
66
  setMirroredFragmentIdentifier(fragmentIdentifier);
83
67
  }
84
-
85
68
  var _getConnectionState = getConnectionState(direction, fragmentNode, fragmentData, connectionPathInFragmentData),
86
- cursor = _getConnectionState.cursor,
87
- hasMore = _getConnectionState.hasMore; // Dispose of pagination requests in flight when unmounting
88
-
69
+ cursor = _getConnectionState.cursor,
70
+ hasMore = _getConnectionState.hasMore;
89
71
 
72
+ // Dispose of pagination requests in flight when unmounting
90
73
  useEffect(function () {
91
74
  return function () {
92
75
  disposeFetch();
@@ -94,8 +77,8 @@ function useLoadMoreFunction(args) {
94
77
  }, [disposeFetch]);
95
78
  var loadMore = useCallback(function (count, options) {
96
79
  // TODO(T41131846): Fetch/Caching policies for loadMore
97
- var onComplete = options === null || options === void 0 ? void 0 : options.onComplete;
98
80
 
81
+ var onComplete = options === null || options === void 0 ? void 0 : options.onComplete;
99
82
  if (isMountedRef.current !== true) {
100
83
  // Bail out and warn if we're trying to paginate after the component
101
84
  // has unmounted
@@ -104,31 +87,27 @@ function useLoadMoreFunction(args) {
104
87
  dispose: function dispose() {}
105
88
  };
106
89
  }
107
-
108
90
  var fragmentSelector = getSelector(fragmentNode, fragmentRef);
109
-
110
91
  if (isFetchingRef.current === true || fragmentData == null || isParentQueryActive) {
111
92
  if (fragmentSelector == null) {
112
93
  process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Unexpected fetch while using a null fragment ref ' + 'for fragment `%s` in `%s`. When fetching more items, we expect ' + "initial fragment data to be non-null. Please make sure you're " + 'passing a valid fragment ref to `%s` before paginating.', fragmentNode.name, componentDisplayName, componentDisplayName) : void 0;
113
94
  }
114
-
115
95
  if (onComplete) {
116
96
  onComplete(null);
117
97
  }
118
-
119
98
  return {
120
99
  dispose: function dispose() {}
121
100
  };
122
101
  }
123
-
124
102
  !(fragmentSelector != null && fragmentSelector.kind !== 'PluralReaderSelector') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected to be able to find a non-plural fragment owner for ' + "fragment `%s` when using `%s`. If you're seeing this, " + 'this is likely a bug in Relay.', fragmentNode.name, componentDisplayName) : invariant(false) : void 0;
125
103
  var parentVariables = fragmentSelector.owner.variables;
126
104
  var fragmentVariables = fragmentSelector.variables;
127
105
  var extraVariables = options === null || options === void 0 ? void 0 : options.UNSTABLE_extraVariables;
128
106
  var baseVariables = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, parentVariables), fragmentVariables);
129
- var paginationVariables = getPaginationVariables(direction, count, cursor, baseVariables, (0, _objectSpread2["default"])({}, extraVariables), paginationMetadata); // If the query needs an identifier value ('id' or similar) and one
130
- // was not explicitly provided, read it from the fragment data.
107
+ var paginationVariables = getPaginationVariables(direction, count, cursor, baseVariables, (0, _objectSpread2["default"])({}, extraVariables), paginationMetadata);
131
108
 
109
+ // If the query needs an identifier value ('id' or similar) and one
110
+ // was not explicitly provided, read it from the fragment data.
132
111
  if (identifierField != null) {
133
112
  // @refetchable fragments are guaranteed to have an `id` selection
134
113
  // if the type is Node, implements Node, or is @fetchable. Double-check
@@ -136,10 +115,8 @@ function useLoadMoreFunction(args) {
136
115
  if (typeof identifierValue !== 'string') {
137
116
  process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Expected result to have a string ' + '`%s` in order to refetch, got `%s`.', identifierField, identifierValue) : void 0;
138
117
  }
139
-
140
118
  paginationVariables.id = identifierValue;
141
119
  }
142
-
143
120
  var paginationQuery = createOperationDescriptor(paginationRequest, paginationVariables, {
144
121
  force: true
145
122
  });
@@ -162,60 +139,51 @@ function useLoadMoreFunction(args) {
162
139
  return {
163
140
  dispose: disposeFetch
164
141
  };
165
- }, // NOTE: We disable react-hooks-deps warning because all values
142
+ },
143
+ // NOTE: We disable react-hooks-deps warning because all values
166
144
  // inside paginationMetadata are static
167
145
  // eslint-disable-next-line react-hooks/exhaustive-deps
168
146
  [environment, identifierValue, direction, cursor, startFetch, disposeFetch, completeFetch, isFetchingRef, isParentQueryActive, fragmentData, fragmentNode.name, fragmentRef, componentDisplayName]);
169
147
  return [loadMore, hasMore, disposeFetch];
170
148
  }
171
-
172
149
  function getConnectionState(direction, fragmentNode, fragmentData, connectionPathInFragmentData) {
173
150
  var _pageInfo$END_CURSOR, _pageInfo$START_CURSO;
174
-
175
151
  var _ConnectionInterface$ = ConnectionInterface.get(),
176
- EDGES = _ConnectionInterface$.EDGES,
177
- PAGE_INFO = _ConnectionInterface$.PAGE_INFO,
178
- HAS_NEXT_PAGE = _ConnectionInterface$.HAS_NEXT_PAGE,
179
- HAS_PREV_PAGE = _ConnectionInterface$.HAS_PREV_PAGE,
180
- END_CURSOR = _ConnectionInterface$.END_CURSOR,
181
- START_CURSOR = _ConnectionInterface$.START_CURSOR;
182
-
152
+ EDGES = _ConnectionInterface$.EDGES,
153
+ PAGE_INFO = _ConnectionInterface$.PAGE_INFO,
154
+ HAS_NEXT_PAGE = _ConnectionInterface$.HAS_NEXT_PAGE,
155
+ HAS_PREV_PAGE = _ConnectionInterface$.HAS_PREV_PAGE,
156
+ END_CURSOR = _ConnectionInterface$.END_CURSOR,
157
+ START_CURSOR = _ConnectionInterface$.START_CURSOR;
183
158
  var connection = getValueAtPath(fragmentData, connectionPathInFragmentData);
184
-
185
159
  if (connection == null) {
186
160
  return {
187
161
  cursor: null,
188
162
  hasMore: false
189
163
  };
190
164
  }
191
-
192
165
  !(typeof connection === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected connection in fragment `%s` to have been `null`, or ' + 'a plain object with %s and %s properties. Instead got `%s`.', fragmentNode.name, EDGES, PAGE_INFO, connection) : invariant(false) : void 0;
193
166
  var edges = connection[EDGES];
194
167
  var pageInfo = connection[PAGE_INFO];
195
-
196
168
  if (edges == null || pageInfo == null) {
197
169
  return {
198
170
  cursor: null,
199
171
  hasMore: false
200
172
  };
201
173
  }
202
-
203
174
  !Array.isArray(edges) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected connection in fragment `%s` to have a plural `%s` field. ' + 'Instead got `%s`.', fragmentNode.name, EDGES, edges) : invariant(false) : void 0;
204
175
  !(typeof pageInfo === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected connection in fragment `%s` to have a `%s` field. ' + 'Instead got `%s`.', fragmentNode.name, PAGE_INFO, pageInfo) : invariant(false) : void 0;
205
176
  var cursor = direction === 'forward' ? (_pageInfo$END_CURSOR = pageInfo[END_CURSOR]) !== null && _pageInfo$END_CURSOR !== void 0 ? _pageInfo$END_CURSOR : null : (_pageInfo$START_CURSO = pageInfo[START_CURSOR]) !== null && _pageInfo$START_CURSO !== void 0 ? _pageInfo$START_CURSO : null;
206
177
  !(cursor === null || typeof cursor === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected page info for connection in fragment `%s` to have a ' + 'valid `%s`. Instead got `%s`.', fragmentNode.name, START_CURSOR, cursor) : invariant(false) : void 0;
207
178
  var hasMore;
208
-
209
179
  if (direction === 'forward') {
210
180
  hasMore = cursor != null && pageInfo[HAS_NEXT_PAGE] === true;
211
181
  } else {
212
182
  hasMore = cursor != null && pageInfo[HAS_PREV_PAGE] === true;
213
183
  }
214
-
215
184
  return {
216
185
  cursor: cursor,
217
186
  hasMore: hasMore
218
187
  };
219
188
  }
220
-
221
189
  module.exports = useLoadMoreFunction;
@@ -4,33 +4,24 @@
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 useMemoVariables = require('./useMemoVariables');
15
-
16
15
  var React = require('react');
17
-
18
16
  var _require = require('relay-runtime'),
19
- createOperationDescriptor = _require.createOperationDescriptor,
20
- getRequest = _require.getRequest;
21
-
17
+ createOperationDescriptor = _require.createOperationDescriptor,
18
+ getRequest = _require.getRequest;
22
19
  var useMemo = React.useMemo;
23
-
24
20
  function useMemoOperationDescriptor(gqlQuery, variables, cacheConfig) {
25
- var _useMemoVariables = useMemoVariables(variables),
26
- memoVariables = _useMemoVariables[0];
27
-
28
- var _useMemoVariables2 = useMemoVariables(cacheConfig || {}),
29
- memoCacheConfig = _useMemoVariables2[0];
30
-
21
+ var memoVariables = useMemoVariables(variables);
22
+ var memoCacheConfig = useMemoVariables(cacheConfig || {});
31
23
  return useMemo(function () {
32
24
  return createOperationDescriptor(getRequest(gqlQuery), memoVariables, memoCacheConfig);
33
25
  }, [gqlQuery, memoVariables, memoCacheConfig]);
34
26
  }
35
-
36
27
  module.exports = useMemoOperationDescriptor;
@@ -4,50 +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 areEqual = require("fbjs/lib/areEqual");
15
+ var _require = require('react'),
16
+ useState = _require.useState;
15
17
 
16
- var React = require('react');
17
-
18
- var useMemo = React.useMemo,
19
- useRef = React.useRef,
20
- useState = React.useState;
21
-
18
+ /**
19
+ * Memoizes the passed in `variables` object based on `areEqual` equality.
20
+ * This is useful when a `variables` object is used as a value in a depencency
21
+ * array as it might often be constructed during render.
22
+ */
22
23
  function useMemoVariables(variables) {
23
- var _variablesChangedGene2;
24
-
25
- // The value of this ref is a counter that should be incremented when
26
- // variables change. This allows us to use the counter as a
27
- // memoization value to indicate if the computation for useMemo
28
- // should be re-executed.
29
- var variablesChangedGenerationRef = useRef(0); // We mirror the variables to check if they have changed between renders
30
-
31
24
  var _useState = useState(variables),
32
- mirroredVariables = _useState[0],
33
- setMirroredVariables = _useState[1];
34
-
35
- var variablesChanged = !areEqual(variables, mirroredVariables);
36
-
37
- if (variablesChanged) {
38
- var _variablesChangedGene;
39
-
40
- variablesChangedGenerationRef.current = ((_variablesChangedGene = variablesChangedGenerationRef.current) !== null && _variablesChangedGene !== void 0 ? _variablesChangedGene : 0) + 1;
25
+ mirroredVariables = _useState[0],
26
+ setMirroredVariables = _useState[1];
27
+ if (areEqual(variables, mirroredVariables)) {
28
+ return mirroredVariables;
29
+ } else {
41
30
  setMirroredVariables(variables);
42
- } // NOTE: We disable react-hooks-deps warning because we explicitly
43
- // don't want to memoize on object identity
44
- // eslint-disable-next-line react-hooks/exhaustive-deps
45
-
46
-
47
- var memoVariables = useMemo(function () {
48
31
  return variables;
49
- }, [variablesChangedGenerationRef.current]);
50
- return [memoVariables, (_variablesChangedGene2 = variablesChangedGenerationRef.current) !== null && _variablesChangedGene2 !== void 0 ? _variablesChangedGene2 : 0];
32
+ }
51
33
  }
52
-
53
34
  module.exports = useMemoVariables;
@@ -4,31 +4,24 @@
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
12
- 'use strict';
13
11
 
14
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
12
+ 'use strict';
15
13
 
14
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
16
15
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
17
-
18
16
  var useIsMountedRef = require('./useIsMountedRef');
19
-
20
17
  var useRelayEnvironment = require('./useRelayEnvironment');
21
-
22
18
  var React = require('react');
23
-
24
19
  var _require = require('relay-runtime'),
25
- defaultCommitMutation = _require.commitMutation;
26
-
20
+ defaultCommitMutation = _require.commitMutation;
27
21
  var useState = React.useState,
28
- useEffect = React.useEffect,
29
- useRef = React.useRef,
30
- useCallback = React.useCallback;
31
-
22
+ useEffect = React.useEffect,
23
+ useRef = React.useRef,
24
+ useCallback = React.useCallback;
32
25
  function useMutation(mutation) {
33
26
  var commitMutationFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultCommitMutation;
34
27
  var environment = useRelayEnvironment();
@@ -36,15 +29,12 @@ function useMutation(mutation) {
36
29
  var environmentRef = useRef(environment);
37
30
  var mutationRef = useRef(mutation);
38
31
  var inFlightMutationsRef = useRef(new Set());
39
-
40
32
  var _useState = useState(false),
41
- isMutationInFlight = _useState[0],
42
- setMutationInFlight = _useState[1];
43
-
33
+ isMutationInFlight = _useState[0],
34
+ setMutationInFlight = _useState[1];
44
35
  var cleanup = useCallback(function (disposable) {
45
36
  if (environmentRef.current === environment && mutationRef.current === mutation) {
46
37
  inFlightMutationsRef.current["delete"](disposable);
47
-
48
38
  if (isMountedRef.current) {
49
39
  setMutationInFlight(inFlightMutationsRef.current.size > 0);
50
40
  }
@@ -53,11 +43,9 @@ function useMutation(mutation) {
53
43
  useEffect(function () {
54
44
  if (environmentRef.current !== environment || mutationRef.current !== mutation) {
55
45
  inFlightMutationsRef.current = new Set();
56
-
57
46
  if (isMountedRef.current) {
58
47
  setMutationInFlight(false);
59
48
  }
60
-
61
49
  environmentRef.current = environment;
62
50
  mutationRef.current = mutation;
63
51
  }
@@ -66,30 +54,25 @@ function useMutation(mutation) {
66
54
  if (isMountedRef.current) {
67
55
  setMutationInFlight(true);
68
56
  }
69
-
70
57
  var disposable = commitMutationFn(environment, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, config), {}, {
71
58
  mutation: mutation,
72
59
  onCompleted: function onCompleted(response, errors) {
73
60
  var _config$onCompleted;
74
-
75
61
  cleanup(disposable);
76
62
  (_config$onCompleted = config.onCompleted) === null || _config$onCompleted === void 0 ? void 0 : _config$onCompleted.call(config, response, errors);
77
63
  },
78
64
  onError: function onError(error) {
79
65
  var _config$onError;
80
-
81
66
  cleanup(disposable);
82
67
  (_config$onError = config.onError) === null || _config$onError === void 0 ? void 0 : _config$onError.call(config, error);
83
68
  },
84
69
  onUnsubscribe: function onUnsubscribe() {
85
70
  var _config$onUnsubscribe;
86
-
87
71
  cleanup(disposable);
88
72
  (_config$onUnsubscribe = config.onUnsubscribe) === null || _config$onUnsubscribe === void 0 ? void 0 : _config$onUnsubscribe.call(config);
89
73
  },
90
74
  onNext: function onNext() {
91
75
  var _config$onNext;
92
-
93
76
  (_config$onNext = config.onNext) === null || _config$onNext === void 0 ? void 0 : _config$onNext.call(config);
94
77
  }
95
78
  }));
@@ -98,5 +81,4 @@ function useMutation(mutation) {
98
81
  }, [cleanup, commitMutationFn, environment, isMountedRef, mutation]);
99
82
  return [commit, isMutationInFlight];
100
83
  }
101
-
102
84
  module.exports = useMutation;
@@ -4,86 +4,82 @@
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
12
- 'use strict';
13
11
 
14
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
12
+ 'use strict';
15
13
 
14
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
16
15
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
17
-
16
+ var HooksImplementation = require('./HooksImplementation');
18
17
  var useLoadMoreFunction = require('./useLoadMoreFunction');
19
-
20
18
  var useRefetchableFragmentNode = require('./useRefetchableFragmentNode');
21
-
22
19
  var useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
23
-
24
20
  var _require = require('react'),
25
- useCallback = _require.useCallback,
26
- useDebugValue = _require.useDebugValue,
27
- useState = _require.useState;
28
-
21
+ useCallback = _require.useCallback,
22
+ useDebugValue = _require.useDebugValue,
23
+ useState = _require.useState;
29
24
  var _require2 = require('relay-runtime'),
30
- getFragment = _require2.getFragment,
31
- getFragmentIdentifier = _require2.getFragmentIdentifier,
32
- getPaginationMetadata = _require2.getPaginationMetadata;
25
+ getFragment = _require2.getFragment,
26
+ getFragmentIdentifier = _require2.getFragmentIdentifier,
27
+ getPaginationMetadata = _require2.getPaginationMetadata;
33
28
 
34
- function usePaginationFragment(fragmentInput, parentFragmentRef) {
29
+ // This separate type export is only needed as long as we are injecting
30
+ // a separate hooks implementation in ./HooksImplementation -- it can
31
+ // be removed after we stop doing that.
32
+
33
+ function usePaginationFragment_LEGACY(fragmentInput, parentFragmentRef) {
35
34
  var fragmentNode = getFragment(fragmentInput);
36
35
  useStaticFragmentNodeWarning(fragmentNode, 'first argument of usePaginationFragment()');
37
36
  var componentDisplayName = 'usePaginationFragment()';
38
-
39
37
  var _getPaginationMetadat = getPaginationMetadata(fragmentNode, componentDisplayName),
40
- connectionPathInFragmentData = _getPaginationMetadat.connectionPathInFragmentData,
41
- paginationRequest = _getPaginationMetadat.paginationRequest,
42
- paginationMetadata = _getPaginationMetadat.paginationMetadata,
43
- identifierField = _getPaginationMetadat.identifierField;
44
-
38
+ connectionPathInFragmentData = _getPaginationMetadat.connectionPathInFragmentData,
39
+ paginationRequest = _getPaginationMetadat.paginationRequest,
40
+ paginationMetadata = _getPaginationMetadat.paginationMetadata,
41
+ identifierField = _getPaginationMetadat.identifierField;
45
42
  var _useRefetchableFragme = useRefetchableFragmentNode(fragmentNode, parentFragmentRef, componentDisplayName),
46
- fragmentData = _useRefetchableFragme.fragmentData,
47
- fragmentRef = _useRefetchableFragme.fragmentRef,
48
- refetch = _useRefetchableFragme.refetch;
49
-
50
- var fragmentIdentifier = getFragmentIdentifier(fragmentNode, fragmentRef); // Backward pagination
43
+ fragmentData = _useRefetchableFragme.fragmentData,
44
+ fragmentRef = _useRefetchableFragme.fragmentRef,
45
+ refetch = _useRefetchableFragme.refetch;
46
+ var fragmentIdentifier = getFragmentIdentifier(fragmentNode, fragmentRef);
51
47
 
48
+ // Backward pagination
52
49
  var _useLoadMore = useLoadMore({
53
- componentDisplayName: componentDisplayName,
54
- connectionPathInFragmentData: connectionPathInFragmentData,
55
- direction: 'backward',
56
- fragmentData: fragmentData,
57
- fragmentIdentifier: fragmentIdentifier,
58
- fragmentNode: fragmentNode,
59
- fragmentRef: fragmentRef,
60
- identifierField: identifierField,
61
- paginationMetadata: paginationMetadata,
62
- paginationRequest: paginationRequest
63
- }),
64
- loadPrevious = _useLoadMore[0],
65
- hasPrevious = _useLoadMore[1],
66
- isLoadingPrevious = _useLoadMore[2],
67
- disposeFetchPrevious = _useLoadMore[3]; // Forward pagination
68
-
69
-
50
+ componentDisplayName: componentDisplayName,
51
+ connectionPathInFragmentData: connectionPathInFragmentData,
52
+ direction: 'backward',
53
+ fragmentData: fragmentData,
54
+ fragmentIdentifier: fragmentIdentifier,
55
+ fragmentNode: fragmentNode,
56
+ fragmentRef: fragmentRef,
57
+ identifierField: identifierField,
58
+ paginationMetadata: paginationMetadata,
59
+ paginationRequest: paginationRequest
60
+ }),
61
+ loadPrevious = _useLoadMore[0],
62
+ hasPrevious = _useLoadMore[1],
63
+ isLoadingPrevious = _useLoadMore[2],
64
+ disposeFetchPrevious = _useLoadMore[3];
65
+
66
+ // Forward pagination
70
67
  var _useLoadMore2 = useLoadMore({
71
- componentDisplayName: componentDisplayName,
72
- connectionPathInFragmentData: connectionPathInFragmentData,
73
- direction: 'forward',
74
- fragmentData: fragmentData,
75
- fragmentIdentifier: fragmentIdentifier,
76
- fragmentNode: fragmentNode,
77
- fragmentRef: fragmentRef,
78
- identifierField: identifierField,
79
- paginationMetadata: paginationMetadata,
80
- paginationRequest: paginationRequest
81
- }),
82
- loadNext = _useLoadMore2[0],
83
- hasNext = _useLoadMore2[1],
84
- isLoadingNext = _useLoadMore2[2],
85
- disposeFetchNext = _useLoadMore2[3];
86
-
68
+ componentDisplayName: componentDisplayName,
69
+ connectionPathInFragmentData: connectionPathInFragmentData,
70
+ direction: 'forward',
71
+ fragmentData: fragmentData,
72
+ fragmentIdentifier: fragmentIdentifier,
73
+ fragmentNode: fragmentNode,
74
+ fragmentRef: fragmentRef,
75
+ identifierField: identifierField,
76
+ paginationMetadata: paginationMetadata,
77
+ paginationRequest: paginationRequest
78
+ }),
79
+ loadNext = _useLoadMore2[0],
80
+ hasNext = _useLoadMore2[1],
81
+ isLoadingNext = _useLoadMore2[2],
82
+ disposeFetchNext = _useLoadMore2[3];
87
83
  var refetchPagination = useCallback(function (variables, options) {
88
84
  disposeFetchNext();
89
85
  disposeFetchPrevious();
@@ -91,7 +87,6 @@ function usePaginationFragment(fragmentInput, parentFragmentRef) {
91
87
  __environment: undefined
92
88
  }));
93
89
  }, [disposeFetchNext, disposeFetchPrevious, refetch]);
94
-
95
90
  if (process.env.NODE_ENV !== "production") {
96
91
  // eslint-disable-next-line react-hooks/rules-of-hooks
97
92
  useDebugValue({
@@ -103,7 +98,6 @@ function usePaginationFragment(fragmentInput, parentFragmentRef) {
103
98
  isLoadingPrevious: isLoadingPrevious
104
99
  });
105
100
  }
106
-
107
101
  return {
108
102
  data: fragmentData,
109
103
  loadNext: loadNext,
@@ -115,12 +109,10 @@ function usePaginationFragment(fragmentInput, parentFragmentRef) {
115
109
  refetch: refetchPagination
116
110
  };
117
111
  }
118
-
119
112
  function useLoadMore(args) {
120
113
  var _useState = useState(false),
121
- isLoadingMore = _useState[0],
122
- setIsLoadingMore = _useState[1];
123
-
114
+ isLoadingMore = _useState[0],
115
+ setIsLoadingMore = _useState[1];
124
116
  var observer = {
125
117
  start: function start() {
126
118
  return setIsLoadingMore(true);
@@ -132,20 +124,25 @@ function useLoadMore(args) {
132
124
  return setIsLoadingMore(false);
133
125
  }
134
126
  };
135
-
136
127
  var handleReset = function handleReset() {
137
128
  return setIsLoadingMore(false);
138
129
  };
139
-
140
130
  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
-
131
+ observer: observer,
132
+ onReset: handleReset
133
+ })),
134
+ loadMore = _useLoadMoreFunction[0],
135
+ hasMore = _useLoadMoreFunction[1],
136
+ disposeFetch = _useLoadMoreFunction[2];
148
137
  return [loadMore, hasMore, isLoadingMore, disposeFetch];
149
138
  }
150
-
139
+ function usePaginationFragment(fragmentInput, parentFragmentRef) {
140
+ var impl = HooksImplementation.get();
141
+ if (impl) {
142
+ return impl.usePaginationFragment(fragmentInput, parentFragmentRef);
143
+ } else {
144
+ // eslint-disable-next-line react-hooks/rules-of-hooks
145
+ return usePaginationFragment_LEGACY(fragmentInput, parentFragmentRef);
146
+ }
147
+ }
151
148
  module.exports = usePaginationFragment;