react-relay 14.1.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 -0
  2. package/ReactRelayContext.js +1 -1
  3. package/ReactRelayContext.js.flow +1 -0
  4. package/ReactRelayFragmentContainer.js.flow +6 -2
  5. package/ReactRelayFragmentMockRenderer.js.flow +1 -0
  6. package/ReactRelayLocalQueryRenderer.js.flow +5 -3
  7. package/ReactRelayPaginationContainer.js.flow +21 -12
  8. package/ReactRelayQueryFetcher.js.flow +19 -5
  9. package/ReactRelayQueryRenderer.js.flow +32 -1
  10. package/ReactRelayQueryRendererContext.js.flow +1 -0
  11. package/ReactRelayRefetchContainer.js.flow +9 -5
  12. package/ReactRelayTestMocker.js.flow +3 -1
  13. package/ReactRelayTypes.js.flow +1 -0
  14. package/RelayContext.js.flow +1 -0
  15. package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +2 -1
  16. package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +1 -0
  17. package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +1 -0
  18. package/__flowtests__/RelayModern-flowtest.js.flow +1 -0
  19. package/__flowtests__/RelayModernFlowtest_badref.graphql.js.flow +1 -0
  20. package/__flowtests__/RelayModernFlowtest_notref.graphql.js.flow +1 -0
  21. package/__flowtests__/RelayModernFlowtest_user.graphql.js.flow +1 -0
  22. package/__flowtests__/RelayModernFlowtest_users.graphql.js.flow +1 -0
  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 -0
  34. package/buildReactRelayContainer.js.flow +7 -5
  35. package/getRootVariablesForFragments.js.flow +1 -1
  36. package/hooks.js +1 -1
  37. package/hooks.js.flow +4 -0
  38. package/index.js +1 -1
  39. package/index.js.flow +4 -0
  40. package/isRelayEnvironment.js.flow +1 -0
  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 -0
  46. package/lib/ReactRelayContainerUtils.js +2 -2
  47. package/lib/ReactRelayContext.js +3 -3
  48. package/lib/ReactRelayFragmentContainer.js +39 -66
  49. package/lib/ReactRelayFragmentMockRenderer.js +2 -3
  50. package/lib/ReactRelayLocalQueryRenderer.js +18 -30
  51. package/lib/ReactRelayPaginationContainer.js +66 -159
  52. package/lib/ReactRelayQueryFetcher.js +48 -74
  53. package/lib/ReactRelayQueryRenderer.js +62 -82
  54. package/lib/ReactRelayQueryRendererContext.js +2 -1
  55. package/lib/ReactRelayRefetchContainer.js +52 -99
  56. package/lib/ReactRelayTestMocker.js +32 -66
  57. package/lib/ReactRelayTypes.js +2 -0
  58. package/lib/RelayContext.js +4 -6
  59. package/lib/assertFragmentMap.js +3 -4
  60. package/lib/buildReactRelayContainer.js +10 -25
  61. package/lib/getRootVariablesForFragments.js +5 -8
  62. package/lib/hooks.js +5 -17
  63. package/lib/index.js +5 -24
  64. package/lib/isRelayEnvironment.js +5 -3
  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 -7
  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 -7
  72. package/lib/relay-hooks/EntryPointContainer.react.js +9 -14
  73. package/lib/relay-hooks/EntryPointTypes.flow.js +5 -2
  74. package/lib/relay-hooks/FragmentResource.js +102 -196
  75. package/lib/relay-hooks/HooksImplementation.js +2 -5
  76. package/lib/relay-hooks/InternalLogger.js +2 -2
  77. package/lib/relay-hooks/LRUCache.js +2 -19
  78. package/lib/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js +33 -53
  79. package/lib/relay-hooks/MatchContainer.js +14 -22
  80. package/lib/relay-hooks/ProfilerContext.js +3 -2
  81. package/lib/relay-hooks/QueryResource.js +30 -99
  82. package/lib/relay-hooks/RelayEnvironmentProvider.js +5 -8
  83. package/lib/relay-hooks/SuspenseResource.js +8 -31
  84. package/lib/relay-hooks/loadEntryPoint.js +19 -31
  85. package/lib/relay-hooks/loadQuery.js +41 -77
  86. package/lib/relay-hooks/preloadQuery_DEPRECATED.js +10 -35
  87. package/lib/relay-hooks/prepareEntryPoint_DEPRECATED.js +9 -14
  88. package/lib/relay-hooks/react-cache/RelayReactCache.js +7 -11
  89. package/lib/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js +24 -78
  90. package/lib/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js +23 -56
  91. package/lib/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js +65 -143
  92. package/lib/relay-hooks/react-cache/useFragment_REACT_CACHE.js +5 -14
  93. package/lib/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js +17 -23
  94. package/lib/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js +73 -74
  95. package/lib/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js +24 -38
  96. package/lib/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js +60 -102
  97. package/lib/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js +7 -15
  98. package/lib/relay-hooks/useBlockingPaginationFragment.js +71 -92
  99. package/lib/relay-hooks/useClientQuery.js +3 -6
  100. package/lib/relay-hooks/useEntryPointLoader.js +17 -36
  101. package/lib/relay-hooks/useFetchTrackingRef.js +10 -11
  102. package/lib/relay-hooks/useFragment.js +8 -18
  103. package/lib/relay-hooks/useFragmentNode.js +20 -31
  104. package/lib/relay-hooks/useIsMountedRef.js +4 -5
  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 +6 -9
  108. package/lib/relay-hooks/useLazyLoadQueryNode.js +23 -33
  109. package/lib/relay-hooks/useLoadMoreFunction.js +45 -76
  110. package/lib/relay-hooks/useMemoOperationDescriptor.js +6 -14
  111. package/lib/relay-hooks/useMemoVariables.js +15 -33
  112. package/lib/relay-hooks/useMutation.js +8 -25
  113. package/lib/relay-hooks/usePaginationFragment.js +61 -76
  114. package/lib/relay-hooks/usePreloadedQuery.js +12 -29
  115. package/lib/relay-hooks/useQueryLoader.js +23 -47
  116. package/lib/relay-hooks/useRefetchableFragment.js +8 -18
  117. package/lib/relay-hooks/useRefetchableFragmentNode.js +64 -107
  118. package/lib/relay-hooks/useRelayEnvironment.js +4 -7
  119. package/lib/relay-hooks/useStaticFragmentNodeWarning.js +4 -7
  120. package/lib/relay-hooks/useSubscribeToInvalidationState.js +8 -8
  121. package/lib/relay-hooks/useSubscription.js +5 -9
  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 -2
  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 +1 -1
  134. package/relay-hooks/EntryPointTypes.flow.js.flow +7 -5
  135. package/relay-hooks/FragmentResource.js.flow +34 -8
  136. package/relay-hooks/HooksImplementation.js.flow +1 -1
  137. package/relay-hooks/InternalLogger.js.flow +1 -1
  138. package/relay-hooks/LRUCache.js.flow +1 -1
  139. package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +15 -8
  140. package/relay-hooks/MatchContainer.js.flow +1 -1
  141. package/relay-hooks/ProfilerContext.js.flow +1 -1
  142. package/relay-hooks/QueryResource.js.flow +25 -5
  143. package/relay-hooks/RelayEnvironmentProvider.js.flow +2 -2
  144. package/relay-hooks/SuspenseResource.js.flow +1 -1
  145. package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +3 -1
  146. package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +2 -2
  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 +35 -33
  150. package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +1 -1
  151. package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +33 -32
  152. package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +18 -18
  153. package/relay-hooks/__flowtests__/utils.js.flow +13 -2
  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 +5 -6
  157. package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +13 -8
  158. package/relay-hooks/react-cache/RelayReactCache.js.flow +1 -1
  159. package/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js.flow +4 -4
  160. package/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js.flow +3 -3
  161. package/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js.flow +4 -4
  162. package/relay-hooks/react-cache/useFragment_REACT_CACHE.js.flow +1 -1
  163. package/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js.flow +1 -1
  164. package/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js.flow +41 -22
  165. package/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js.flow +1 -2
  166. package/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js.flow +11 -5
  167. package/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js.flow +2 -2
  168. package/relay-hooks/useBlockingPaginationFragment.js.flow +85 -56
  169. package/relay-hooks/useClientQuery.js.flow +1 -1
  170. package/relay-hooks/useEntryPointLoader.js.flow +10 -6
  171. package/relay-hooks/useFetchTrackingRef.js.flow +5 -4
  172. package/relay-hooks/useFragment.js.flow +2 -2
  173. package/relay-hooks/useFragmentNode.js.flow +5 -4
  174. package/relay-hooks/useIsMountedRef.js.flow +1 -1
  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 +2 -2
  178. package/relay-hooks/useLazyLoadQueryNode.js.flow +2 -2
  179. package/relay-hooks/useLoadMoreFunction.js.flow +14 -9
  180. package/relay-hooks/useMemoOperationDescriptor.js.flow +3 -3
  181. package/relay-hooks/useMemoVariables.js.flow +13 -29
  182. package/relay-hooks/useMutation.js.flow +4 -4
  183. package/relay-hooks/usePaginationFragment.js.flow +53 -46
  184. package/relay-hooks/usePreloadedQuery.js.flow +47 -22
  185. package/relay-hooks/useQueryLoader.js.flow +85 -22
  186. package/relay-hooks/useRefetchableFragment.js.flow +64 -33
  187. package/relay-hooks/useRefetchableFragmentNode.js.flow +10 -4
  188. package/relay-hooks/useRelayEnvironment.js.flow +2 -2
  189. package/relay-hooks/useStaticFragmentNodeWarning.js.flow +3 -3
  190. package/relay-hooks/useSubscribeToInvalidationState.js.flow +2 -2
  191. package/relay-hooks/useSubscription.js.flow +1 -1
  192. package/relay-hooks/useUnsafeRef_DEPRECATED.js.flow +25 -0
  193. package/lib/readContext.js +0 -27
  194. package/readContext.js.flow +0 -29
@@ -4,54 +4,41 @@
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
+
11
12
  'use strict';
12
13
 
13
14
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
14
-
15
15
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
16
-
17
16
  var ProfilerContext = require('../ProfilerContext');
18
-
19
17
  var _require = require('../QueryResource'),
20
- getQueryResourceForEnvironment = _require.getQueryResourceForEnvironment;
21
-
18
+ getQueryResourceForEnvironment = _require.getQueryResourceForEnvironment;
22
19
  var useIsMountedRef = require('../useIsMountedRef');
23
-
24
20
  var useQueryLoader = require('../useQueryLoader');
25
-
26
21
  var useRelayEnvironment = require('../useRelayEnvironment');
27
-
28
22
  var readFragmentInternal = require('./readFragmentInternal_REACT_CACHE');
29
-
30
23
  var useFragmentInternal = require('./useFragmentInternal_REACT_CACHE');
31
-
32
24
  var invariant = require('invariant');
33
-
34
25
  var _require2 = require('react'),
35
- useCallback = _require2.useCallback,
36
- useContext = _require2.useContext,
37
- useReducer = _require2.useReducer;
38
-
26
+ useCallback = _require2.useCallback,
27
+ useContext = _require2.useContext,
28
+ useReducer = _require2.useReducer;
39
29
  var _require3 = require('relay-runtime'),
40
- fetchQuery = _require3.__internal.fetchQuery,
41
- createOperationDescriptor = _require3.createOperationDescriptor,
42
- getFragmentIdentifier = _require3.getFragmentIdentifier,
43
- getRefetchMetadata = _require3.getRefetchMetadata,
44
- getSelector = _require3.getSelector,
45
- getValueAtPath = _require3.getValueAtPath;
46
-
30
+ fetchQuery = _require3.__internal.fetchQuery,
31
+ createOperationDescriptor = _require3.createOperationDescriptor,
32
+ getFragmentIdentifier = _require3.getFragmentIdentifier,
33
+ getRefetchMetadata = _require3.getRefetchMetadata,
34
+ getSelector = _require3.getSelector,
35
+ getValueAtPath = _require3.getValueAtPath;
47
36
  var warning = require("fbjs/lib/warning");
48
-
49
37
  function reducer(state, action) {
50
38
  switch (action.type) {
51
39
  case 'refetch':
52
40
  {
53
41
  var _action$refetchEnviro;
54
-
55
42
  return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, state), {}, {
56
43
  fetchPolicy: action.fetchPolicy,
57
44
  mirroredEnvironment: (_action$refetchEnviro = action.refetchEnvironment) !== null && _action$refetchEnviro !== void 0 ? _action$refetchEnviro : state.mirroredEnvironment,
@@ -61,7 +48,6 @@ function reducer(state, action) {
61
48
  renderPolicy: action.renderPolicy
62
49
  });
63
50
  }
64
-
65
51
  case 'reset':
66
52
  {
67
53
  return {
@@ -73,7 +59,6 @@ function reducer(state, action) {
73
59
  renderPolicy: undefined
74
60
  };
75
61
  }
76
-
77
62
  default:
78
63
  {
79
64
  action.type;
@@ -81,48 +66,40 @@ function reducer(state, action) {
81
66
  }
82
67
  }
83
68
  }
84
-
85
69
  function useRefetchableFragmentNode(fragmentNode, parentFragmentRef, componentDisplayName) {
86
70
  var parentEnvironment = useRelayEnvironment();
87
-
88
71
  var _getRefetchMetadata = getRefetchMetadata(fragmentNode, componentDisplayName),
89
- refetchableRequest = _getRefetchMetadata.refetchableRequest,
90
- fragmentRefPathInResponse = _getRefetchMetadata.fragmentRefPathInResponse,
91
- identifierField = _getRefetchMetadata.identifierField;
92
-
72
+ refetchableRequest = _getRefetchMetadata.refetchableRequest,
73
+ fragmentRefPathInResponse = _getRefetchMetadata.fragmentRefPathInResponse,
74
+ identifierField = _getRefetchMetadata.identifierField;
93
75
  var fragmentIdentifier = getFragmentIdentifier(fragmentNode, parentFragmentRef);
94
-
95
76
  var _useReducer = useReducer(reducer, {
96
- fetchPolicy: undefined,
97
- mirroredEnvironment: parentEnvironment,
98
- mirroredFragmentIdentifier: fragmentIdentifier,
99
- onComplete: undefined,
100
- refetchEnvironment: null,
101
- refetchQuery: null,
102
- renderPolicy: undefined
103
- }),
104
- refetchState = _useReducer[0],
105
- dispatch = _useReducer[1];
106
-
77
+ fetchPolicy: undefined,
78
+ mirroredEnvironment: parentEnvironment,
79
+ mirroredFragmentIdentifier: fragmentIdentifier,
80
+ onComplete: undefined,
81
+ refetchEnvironment: null,
82
+ refetchQuery: null,
83
+ renderPolicy: undefined
84
+ }),
85
+ refetchState = _useReducer[0],
86
+ dispatch = _useReducer[1];
107
87
  var fetchPolicy = refetchState.fetchPolicy,
108
- mirroredEnvironment = refetchState.mirroredEnvironment,
109
- mirroredFragmentIdentifier = refetchState.mirroredFragmentIdentifier,
110
- onComplete = refetchState.onComplete,
111
- refetchEnvironment = refetchState.refetchEnvironment,
112
- refetchQuery = refetchState.refetchQuery,
113
- renderPolicy = refetchState.renderPolicy;
88
+ mirroredEnvironment = refetchState.mirroredEnvironment,
89
+ mirroredFragmentIdentifier = refetchState.mirroredFragmentIdentifier,
90
+ onComplete = refetchState.onComplete,
91
+ refetchEnvironment = refetchState.refetchEnvironment,
92
+ refetchQuery = refetchState.refetchQuery,
93
+ renderPolicy = refetchState.renderPolicy;
114
94
  var environment = refetchEnvironment !== null && refetchEnvironment !== void 0 ? refetchEnvironment : parentEnvironment;
115
95
  var QueryResource = getQueryResourceForEnvironment(environment);
116
96
  var profilerContext = useContext(ProfilerContext);
117
97
  var shouldReset = environment !== mirroredEnvironment || fragmentIdentifier !== mirroredFragmentIdentifier;
118
-
119
98
  var _useQueryLoader = useQueryLoader(refetchableRequest),
120
- queryRef = _useQueryLoader[0],
121
- loadQuery = _useQueryLoader[1],
122
- disposeQuery = _useQueryLoader[2];
123
-
99
+ queryRef = _useQueryLoader[0],
100
+ loadQuery = _useQueryLoader[1],
101
+ disposeQuery = _useQueryLoader[2];
124
102
  var fragmentRef = parentFragmentRef;
125
-
126
103
  if (shouldReset) {
127
104
  dispatch({
128
105
  type: 'reset',
@@ -138,19 +115,20 @@ function useRefetchableFragmentNode(fragmentNode, parentFragmentRef, componentDi
138
115
  // suspending if it's in flight), and extract the new fragment ref
139
116
  // from the query in order read the current @refetchable fragment
140
117
  // with the updated fragment owner as the new refetchQuery.
118
+
141
119
  // Before observing the refetch, record the current ID and typename
142
120
  // so that, if we are refetching existing data on
143
121
  // a field that implements Node, after refetching we
144
122
  // can validate that the received data is consistent
145
123
  var debugPreviousIDAndTypename;
146
-
147
124
  if (process.env.NODE_ENV !== "production") {
148
125
  debugPreviousIDAndTypename = debugFunctions.getInitialIDAndType(refetchQuery.request.variables, fragmentRefPathInResponse, environment);
149
126
  }
150
-
151
127
  var handleQueryCompleted = function handleQueryCompleted(maybeError) {
152
128
  onComplete && onComplete(maybeError !== null && maybeError !== void 0 ? maybeError : null);
153
- }; // The queryRef.source obtained from useQueryLoader will be
129
+ };
130
+
131
+ // The queryRef.source obtained from useQueryLoader will be
154
132
  // an observable we can consume /if/ a network request was
155
133
  // started. Otherwise, given that QueryResource.prepare
156
134
  // always expects an observable we fall back to a new network
@@ -158,14 +136,13 @@ function useRefetchableFragmentNode(fragmentNode, parentFragmentRef, componentDi
158
136
  // request, we don't expect to make one here, unless the state of
159
137
  // the cache has changed between the call to refetch and this
160
138
  // render.
139
+ var fetchObservable = queryRef.source != null ? queryRef.source : fetchQuery(environment, refetchQuery);
161
140
 
162
-
163
- var fetchObservable = queryRef.source != null ? queryRef.source : fetchQuery(environment, refetchQuery); // Now wwe can we read the refetch query here using the
141
+ // Now wwe can we read the refetch query here using the
164
142
  // queryRef provided from useQueryLoader. Note that the
165
143
  // network request is started during the call to refetch,
166
144
  // but if the refetch query is still in flight, we will suspend
167
145
  // at this point:
168
-
169
146
  var queryResult = profilerContext.wrapPrepareQueryResource(function () {
170
147
  return QueryResource.prepare(refetchQuery, fetchObservable, fetchPolicy, renderPolicy, {
171
148
  error: handleQueryCompleted,
@@ -175,20 +152,19 @@ function useRefetchableFragmentNode(fragmentNode, parentFragmentRef, componentDi
175
152
  if (process.env.NODE_ENV !== "production") {
176
153
  debugFunctions.checkSameTypeAfterRefetch(debugPreviousIDAndTypename, environment, fragmentNode, componentDisplayName);
177
154
  }
178
-
179
155
  handleQueryCompleted();
180
156
  }
181
157
  }, queryRef.fetchKey, profilerContext);
182
158
  });
183
159
  var queryData = readFragmentInternal(environment, queryResult.fragmentNode, queryResult.fragmentRef, componentDisplayName).data;
184
- !(queryData != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected to be able to read refetch query response. ' + "If you're seeing this, this is likely a bug in Relay.") : invariant(false) : void 0; // After reading/fetching the refetch query, we extract from the
160
+ !(queryData != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected to be able to read refetch query response. ' + "If you're seeing this, this is likely a bug in Relay.") : invariant(false) : void 0;
161
+
162
+ // After reading/fetching the refetch query, we extract from the
185
163
  // refetch query response the new fragment ref we need to use to read
186
164
  // the fragment. The new fragment ref will point to the refetch query
187
165
  // as its fragment owner.
188
-
189
166
  var refetchedFragmentRef = getValueAtPath(queryData, fragmentRefPathInResponse);
190
167
  fragmentRef = refetchedFragmentRef;
191
-
192
168
  if (process.env.NODE_ENV !== "production") {
193
169
  // Validate that the id of the object we got back matches the id
194
170
  // we queried for in the variables.
@@ -196,12 +172,12 @@ function useRefetchableFragmentNode(fragmentNode, parentFragmentRef, componentDi
196
172
  // only validating the most recent refetch.
197
173
  debugFunctions.checkSameIDAfterRefetch(debugPreviousIDAndTypename, fragmentRef, fragmentNode, componentDisplayName);
198
174
  }
199
- } // We read and subscribe to the fragment using useFragmentNode.
175
+ }
176
+
177
+ // We read and subscribe to the fragment using useFragmentNode.
200
178
  // If refetch was called, we read the fragment using the new computed
201
179
  // fragment ref from the refetch query response; otherwise, we use the
202
180
  // fragment ref passed by the caller as normal.
203
-
204
-
205
181
  var fragmentData = useFragmentInternal(fragmentNode, fragmentRef, componentDisplayName);
206
182
  var refetch = useRefetchFunction(componentDisplayName, dispatch, disposeQuery, fragmentData, fragmentIdentifier, fragmentNode, fragmentRefPathInResponse, identifierField, loadQuery, parentFragmentRef, refetchableRequest);
207
183
  return {
@@ -210,7 +186,6 @@ function useRefetchableFragmentNode(fragmentNode, parentFragmentRef, componentDi
210
186
  refetch: refetch
211
187
  };
212
188
  }
213
-
214
189
  function useRefetchFunction(componentDisplayName, dispatch, disposeQuery, fragmentData, fragmentIdentifier, fragmentNode, fragmentRefPathInResponse, identifierField, loadQuery, parentFragmentRef, refetchableRequest) {
215
190
  var isMountedRef = useIsMountedRef();
216
191
  var identifierValue = identifierField != null && fragmentData != null && typeof fragmentData === 'object' ? fragmentData[identifierField] : null;
@@ -223,11 +198,9 @@ function useRefetchFunction(componentDisplayName, dispatch, disposeQuery, fragme
223
198
  dispose: function dispose() {}
224
199
  };
225
200
  }
226
-
227
201
  if (parentFragmentRef == null) {
228
202
  process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Unexpected call to `refetch` while using a null fragment ref ' + 'for fragment `%s` in `%s`. When calling `refetch`, we expect ' + "initial fragment data to be non-null. Please make sure you're " + 'passing a valid fragment ref to `%s` before calling ' + '`refetch`, or make sure you pass all required variables to `refetch`.', fragmentNode.name, componentDisplayName, componentDisplayName) : void 0;
229
203
  }
230
-
231
204
  var refetchEnvironment = options === null || options === void 0 ? void 0 : options.__environment;
232
205
  var fetchPolicy = options === null || options === void 0 ? void 0 : options.fetchPolicy;
233
206
  var renderPolicy = options === null || options === void 0 ? void 0 : options.UNSTABLE_renderPolicy;
@@ -235,27 +208,26 @@ function useRefetchFunction(componentDisplayName, dispatch, disposeQuery, fragme
235
208
  var fragmentSelector = getSelector(fragmentNode, parentFragmentRef);
236
209
  var parentVariables;
237
210
  var fragmentVariables;
238
-
239
211
  if (fragmentSelector == null) {
240
212
  parentVariables = {};
241
213
  fragmentVariables = {};
242
214
  } else if (fragmentSelector.kind === 'PluralReaderSelector') {
243
215
  var _fragmentSelector$sel, _fragmentSelector$sel2, _fragmentSelector$sel3, _fragmentSelector$sel4;
244
-
245
216
  parentVariables = (_fragmentSelector$sel = (_fragmentSelector$sel2 = fragmentSelector.selectors[0]) === null || _fragmentSelector$sel2 === void 0 ? void 0 : _fragmentSelector$sel2.owner.variables) !== null && _fragmentSelector$sel !== void 0 ? _fragmentSelector$sel : {};
246
217
  fragmentVariables = (_fragmentSelector$sel3 = (_fragmentSelector$sel4 = fragmentSelector.selectors[0]) === null || _fragmentSelector$sel4 === void 0 ? void 0 : _fragmentSelector$sel4.variables) !== null && _fragmentSelector$sel3 !== void 0 ? _fragmentSelector$sel3 : {};
247
218
  } else {
248
219
  parentVariables = fragmentSelector.owner.variables;
249
220
  fragmentVariables = fragmentSelector.variables;
250
- } // A user of `useRefetchableFragment()` may pass a subset of
221
+ }
222
+
223
+ // A user of `useRefetchableFragment()` may pass a subset of
251
224
  // all variables required by the fragment when calling `refetch()`.
252
225
  // We fill in any variables not passed by the call to `refetch()` with the
253
226
  // variables from the original parent fragment owner.
227
+ var refetchVariables = (0, _objectSpread2["default"])((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, parentVariables), fragmentVariables), providedRefetchVariables);
254
228
 
255
-
256
- var refetchVariables = (0, _objectSpread2["default"])((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, parentVariables), fragmentVariables), providedRefetchVariables); // If the query needs an identifier value ('id' or similar) and one
229
+ // If the query needs an identifier value ('id' or similar) and one
257
230
  // was not explicitly provided, read it from the fragment data.
258
-
259
231
  if (identifierField != null && !providedRefetchVariables.hasOwnProperty('id')) {
260
232
  // @refetchable fragments are guaranteed to have an `id` selection
261
233
  // if the type is Node, implements Node, or is @fetchable. Double-check
@@ -263,20 +235,19 @@ function useRefetchFunction(componentDisplayName, dispatch, disposeQuery, fragme
263
235
  if (typeof identifierValue !== 'string') {
264
236
  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;
265
237
  }
266
-
267
238
  refetchVariables.id = identifierValue;
268
239
  }
269
-
270
240
  var refetchQuery = createOperationDescriptor(refetchableRequest, refetchVariables, {
271
241
  force: true
272
- }); // We call loadQuery which will start a network request if necessary
242
+ });
243
+
244
+ // We call loadQuery which will start a network request if necessary
273
245
  // and update the querRef from useQueryLoader.
274
246
  // Note the following:
275
247
  // - loadQuery will dispose of any previously refetched queries.
276
248
  // - We use the variables extracted off the OperationDescriptor
277
249
  // so that they have been filtered out to include only the
278
250
  // variables actually declared in the query.
279
-
280
251
  loadQuery(refetchQuery.request.variables, {
281
252
  fetchPolicy: fetchPolicy,
282
253
  __environment: refetchEnvironment,
@@ -293,7 +264,8 @@ function useRefetchFunction(componentDisplayName, dispatch, disposeQuery, fragme
293
264
  return {
294
265
  dispose: disposeQuery
295
266
  };
296
- }, // NOTE: We disable react-hooks-deps warning because:
267
+ },
268
+ // NOTE: We disable react-hooks-deps warning because:
297
269
  // - We know fragmentRefPathInResponse is static, so it can be omitted from
298
270
  // deps
299
271
  // - We know fragmentNode is static, so it can be omitted from deps.
@@ -302,29 +274,22 @@ function useRefetchFunction(componentDisplayName, dispatch, disposeQuery, fragme
302
274
  // eslint-disable-next-line react-hooks/exhaustive-deps
303
275
  [fragmentIdentifier, dispatch, disposeQuery, identifierValue, loadQuery]);
304
276
  }
305
-
306
277
  var debugFunctions;
307
-
308
278
  if (process.env.NODE_ENV !== "production") {
309
279
  debugFunctions = {
310
280
  getInitialIDAndType: function getInitialIDAndType(memoRefetchVariables, fragmentRefPathInResponse, environment) {
311
281
  var _require4 = require('relay-runtime'),
312
- Record = _require4.Record;
313
-
282
+ Record = _require4.Record;
314
283
  var id = memoRefetchVariables === null || memoRefetchVariables === void 0 ? void 0 : memoRefetchVariables.id;
315
-
316
284
  if (fragmentRefPathInResponse.length !== 1 || fragmentRefPathInResponse[0] !== 'node' || id == null) {
317
285
  return null;
318
286
  }
319
-
320
287
  var recordSource = environment.getStore().getSource();
321
288
  var record = recordSource.get(id);
322
289
  var typename = record && Record.getType(record);
323
-
324
290
  if (typename == null) {
325
291
  return null;
326
292
  }
327
-
328
293
  return {
329
294
  id: id,
330
295
  typename: typename
@@ -332,16 +297,13 @@ if (process.env.NODE_ENV !== "production") {
332
297
  },
333
298
  checkSameTypeAfterRefetch: function checkSameTypeAfterRefetch(previousIDAndType, environment, fragmentNode, componentDisplayName) {
334
299
  var _require5 = require('relay-runtime'),
335
- Record = _require5.Record;
336
-
300
+ Record = _require5.Record;
337
301
  if (!previousIDAndType) {
338
302
  return;
339
303
  }
340
-
341
304
  var recordSource = environment.getStore().getSource();
342
305
  var record = recordSource.get(previousIDAndType.id);
343
306
  var typename = record && Record.getType(record);
344
-
345
307
  if (typename !== previousIDAndType.typename) {
346
308
  process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Call to `refetch` returned data with a different ' + '__typename: was `%s`, now `%s`, on `%s` in `%s`. ' + 'Please make sure the server correctly implements' + 'unique id requirement.', previousIDAndType.typename, typename, fragmentNode.name, componentDisplayName) : void 0;
347
309
  }
@@ -350,18 +312,14 @@ if (process.env.NODE_ENV !== "production") {
350
312
  if (previousIDAndTypename == null) {
351
313
  return;
352
314
  }
353
-
354
315
  var _require6 = require('relay-runtime'),
355
- ID_KEY = _require6.ID_KEY; // $FlowExpectedError[incompatible-use]
356
-
357
-
316
+ ID_KEY = _require6.ID_KEY;
317
+ // $FlowExpectedError[incompatible-use]
358
318
  var resultID = refetchedFragmentRef[ID_KEY];
359
-
360
319
  if (resultID != null && resultID !== previousIDAndTypename.id) {
361
320
  process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Call to `refetch` returned a different id, expected ' + '`%s`, got `%s`, on `%s` in `%s`. ' + 'Please make sure the server correctly implements ' + 'unique id requirement.', resultID, previousIDAndTypename.id, fragmentNode.name, componentDisplayName) : void 0;
362
321
  }
363
322
  }
364
323
  };
365
324
  }
366
-
367
325
  module.exports = useRefetchableFragmentNode;
@@ -4,30 +4,25 @@
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
- 'use strict';
12
11
 
13
- var useRefetchableFragmentInternal = require('./useRefetchableFragmentInternal_REACT_CACHE');
12
+ 'use strict';
14
13
 
15
14
  var useStaticFragmentNodeWarning = require('../useStaticFragmentNodeWarning');
16
-
15
+ var useRefetchableFragmentInternal = require('./useRefetchableFragmentInternal_REACT_CACHE');
17
16
  var _require = require('react'),
18
- useDebugValue = _require.useDebugValue;
19
-
17
+ useDebugValue = _require.useDebugValue;
20
18
  var _require2 = require('relay-runtime'),
21
- getFragment = _require2.getFragment;
22
-
19
+ getFragment = _require2.getFragment;
23
20
  function useRefetchableFragment(fragmentInput, fragmentRef) {
24
21
  var fragmentNode = getFragment(fragmentInput);
25
22
  useStaticFragmentNodeWarning(fragmentNode, 'first argument of useRefetchableFragment()');
26
-
27
23
  var _useRefetchableFragme = useRefetchableFragmentInternal(fragmentNode, fragmentRef, 'useRefetchableFragment()'),
28
- fragmentData = _useRefetchableFragme.fragmentData,
29
- refetch = _useRefetchableFragme.refetch;
30
-
24
+ fragmentData = _useRefetchableFragme.fragmentData,
25
+ refetch = _useRefetchableFragme.refetch;
31
26
  if (process.env.NODE_ENV !== "production") {
32
27
  // eslint-disable-next-line react-hooks/rules-of-hooks
33
28
  useDebugValue({
@@ -37,9 +32,6 @@ function useRefetchableFragment(fragmentInput, fragmentRef) {
37
32
  }
38
33
  /* $FlowExpectedError[prop-missing] : Exposed options is a subset of internal
39
34
  * options */
40
-
41
-
42
35
  return [fragmentData, refetch];
43
36
  }
44
-
45
37
  module.exports = useRefetchableFragment;