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
@@ -6,35 +6,27 @@
6
6
  *
7
7
  *
8
8
  * @format
9
+ * @oncall relay
9
10
  */
10
- // flowlint ambiguous-object-type:error
11
- 'use strict';
12
11
 
13
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
12
+ 'use strict';
14
13
 
14
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
15
15
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
16
-
17
16
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
18
-
19
17
  var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
20
-
21
18
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
22
-
23
19
  var ReactRelayContext = require('./ReactRelayContext');
24
-
25
20
  var ReactRelayQueryFetcher = require('./ReactRelayQueryFetcher');
26
-
27
21
  var ReactRelayQueryRendererContext = require('./ReactRelayQueryRendererContext');
28
-
29
22
  var areEqual = require("fbjs/lib/areEqual");
30
-
31
23
  var React = require('react');
32
-
33
24
  var _require = require('relay-runtime'),
34
- createOperationDescriptor = _require.createOperationDescriptor,
35
- deepFreeze = _require.deepFreeze,
36
- getRequest = _require.getRequest;
37
-
25
+ RelayFeatureFlags = _require.RelayFeatureFlags;
26
+ var _require2 = require('relay-runtime'),
27
+ createOperationDescriptor = _require2.createOperationDescriptor,
28
+ deepFreeze = _require2.deepFreeze,
29
+ getRequest = _require2.getRequest;
38
30
  /**
39
31
  * React may double-fire the constructor, and we call 'fetch' in the
40
32
  * constructor. If a request is already in flight from a previous call to the
@@ -44,7 +36,6 @@ var requestCache = {};
44
36
  var queryRendererContext = {
45
37
  rootIsQueryRenderer: true
46
38
  };
47
-
48
39
  /**
49
40
  * @public
50
41
  *
@@ -57,33 +48,29 @@ var queryRendererContext = {
57
48
  */
58
49
  var ReactRelayQueryRenderer = /*#__PURE__*/function (_React$Component) {
59
50
  (0, _inheritsLoose2["default"])(ReactRelayQueryRenderer, _React$Component);
60
-
61
51
  function ReactRelayQueryRenderer(props) {
62
52
  var _this;
53
+ _this = _React$Component.call(this, props) || this;
63
54
 
64
- _this = _React$Component.call(this, props) || this; // Callbacks are attached to the current instance and shared with static
55
+ // Callbacks are attached to the current instance and shared with static
65
56
  // lifecyles by bundling with state. This is okay to do because the
66
57
  // callbacks don't change in reaction to props. However we should not
67
58
  // "leak" them before mounting (since we would be unable to clean up). For
68
59
  // that reason, we define them as null initially and fill them in after
69
60
  // mounting to avoid leaking memory.
70
-
71
61
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_handleDataChange", function (params) {
72
62
  var error = params.error == null ? null : params.error;
73
63
  var snapshot = params.snapshot == null ? null : params.snapshot;
74
-
75
64
  _this.setState(function (prevState) {
76
65
  var prevRequestCacheKey = prevState.requestCacheKey;
77
-
78
66
  if (prevRequestCacheKey) {
79
67
  delete requestCache[prevRequestCacheKey];
80
- } // Don't update state if nothing has changed.
81
-
68
+ }
82
69
 
70
+ // Don't update state if nothing has changed.
83
71
  if (snapshot === prevState.snapshot && error === prevState.error) {
84
72
  return null;
85
73
  }
86
-
87
74
  return {
88
75
  renderProps: getRenderProps(error, snapshot, prevState.queryFetcher, prevState.retryCallbacks),
89
76
  snapshot: snapshot,
@@ -97,7 +84,6 @@ var ReactRelayQueryRenderer = /*#__PURE__*/function (_React$Component) {
97
84
  };
98
85
  var queryFetcher;
99
86
  var requestCacheKey;
100
-
101
87
  if (props.query) {
102
88
  var query = props.query;
103
89
  var request = getRequest(query);
@@ -106,7 +92,6 @@ var ReactRelayQueryRenderer = /*#__PURE__*/function (_React$Component) {
106
92
  } else {
107
93
  queryFetcher = new ReactRelayQueryFetcher();
108
94
  }
109
-
110
95
  _this._maybeHiddenOrFastRefresh = false;
111
96
  _this.state = (0, _objectSpread2["default"])({
112
97
  prevPropsEnvironment: props.environment,
@@ -117,20 +102,15 @@ var ReactRelayQueryRenderer = /*#__PURE__*/function (_React$Component) {
117
102
  }, fetchQueryAndComputeStateFromProps(props, queryFetcher, retryCallbacks, requestCacheKey));
118
103
  return _this;
119
104
  }
120
-
121
105
  ReactRelayQueryRenderer.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {
122
106
  if (prevState.prevQuery !== nextProps.query || prevState.prevPropsEnvironment !== nextProps.environment || !areEqual(prevState.prevPropsVariables, nextProps.variables)) {
123
107
  return resetQueryStateForUpdate(nextProps, prevState);
124
108
  }
125
-
126
109
  return null;
127
110
  };
128
-
129
111
  var _proto = ReactRelayQueryRenderer.prototype;
130
-
131
112
  _proto.componentDidMount = function componentDidMount() {
132
113
  var _this2 = this;
133
-
134
114
  if (this._maybeHiddenOrFastRefresh === true) {
135
115
  // This block only runs if the component has previously "unmounted"
136
116
  // due to it being hidden by the Offscreen API, or during fast refresh.
@@ -138,94 +118,104 @@ var ReactRelayQueryRenderer = /*#__PURE__*/function (_React$Component) {
138
118
  // by the previous cleanup, so instead of attempting to
139
119
  // do our regular commit setup, so that the query is re-evaluated
140
120
  // (and potentially cause a refetch).
141
- this._maybeHiddenOrFastRefresh = false; // eslint-disable-next-line react/no-did-mount-set-state
142
-
121
+ this._maybeHiddenOrFastRefresh = false;
122
+ // eslint-disable-next-line react/no-did-mount-set-state
143
123
  this.setState(function (prevState) {
144
- return resetQueryStateForUpdate(_this2.props, prevState);
124
+ var newState = resetQueryStateForUpdate(_this2.props, prevState);
125
+ var requestCacheKey = newState.requestCacheKey,
126
+ queryFetcher = newState.queryFetcher;
127
+ if (requestCacheKey != null && requestCache[requestCacheKey] != null) {
128
+ if (RelayFeatureFlags.ENABLE_QUERY_RENDERER_SET_STATE_PREVENTION) {
129
+ var fetchResult = queryFetcher.getFetchResult();
130
+ if (fetchResult != null) {
131
+ var _fetchResult$snapshot, _fetchResult$error;
132
+ var snapshot = (_fetchResult$snapshot = fetchResult.snapshot) !== null && _fetchResult$snapshot !== void 0 ? _fetchResult$snapshot : null;
133
+ var error = (_fetchResult$error = fetchResult.error) !== null && _fetchResult$error !== void 0 ? _fetchResult$error : null;
134
+ var prevRequestCacheKey = prevState.requestCacheKey;
135
+ if (prevRequestCacheKey != null) {
136
+ delete requestCache[prevRequestCacheKey];
137
+ }
138
+ newState.renderProps = getRenderProps(error, snapshot, queryFetcher, prevState.retryCallbacks);
139
+ newState.snapshot = snapshot;
140
+ newState.requestCacheKey = null;
141
+ } else {
142
+ queryFetcher.setOnDataChange(_this2._handleDataChange);
143
+ }
144
+ } else {
145
+ queryFetcher.setOnDataChange(_this2._handleDataChange);
146
+ }
147
+ }
148
+ return newState;
145
149
  });
146
150
  return;
147
151
  }
148
-
149
152
  var _this$state = this.state,
150
- retryCallbacks = _this$state.retryCallbacks,
151
- queryFetcher = _this$state.queryFetcher,
152
- requestCacheKey = _this$state.requestCacheKey; // We don't need to cache the request after the component commits
153
-
153
+ retryCallbacks = _this$state.retryCallbacks,
154
+ queryFetcher = _this$state.queryFetcher,
155
+ requestCacheKey = _this$state.requestCacheKey;
156
+ // We don't need to cache the request after the component commits
154
157
  if (requestCacheKey) {
155
158
  delete requestCache[requestCacheKey];
156
159
  }
157
-
158
160
  retryCallbacks.handleDataChange = this._handleDataChange;
159
-
160
161
  retryCallbacks.handleRetryAfterError = function (error) {
161
162
  return _this2.setState(function (prevState) {
162
163
  var prevRequestCacheKey = prevState.requestCacheKey;
163
-
164
164
  if (prevRequestCacheKey) {
165
165
  delete requestCache[prevRequestCacheKey];
166
166
  }
167
-
168
167
  return {
169
168
  renderProps: getLoadingRenderProps(),
170
169
  requestCacheKey: null
171
170
  };
172
171
  });
173
- }; // Re-initialize the ReactRelayQueryFetcher with callbacks.
174
- // If data has changed since constructions, this will re-render.
175
-
172
+ };
176
173
 
174
+ // Re-initialize the ReactRelayQueryFetcher with callbacks.
175
+ // If data has changed since constructions, this will re-render.
177
176
  if (this.props.query) {
178
177
  queryFetcher.setOnDataChange(this._handleDataChange);
179
178
  }
180
179
  };
181
-
182
180
  _proto.componentDidUpdate = function componentDidUpdate(_prevProps, prevState) {
183
181
  // We don't need to cache the request after the component commits
184
182
  var _this$state2 = this.state,
185
- queryFetcher = _this$state2.queryFetcher,
186
- requestCacheKey = _this$state2.requestCacheKey;
187
-
183
+ queryFetcher = _this$state2.queryFetcher,
184
+ requestCacheKey = _this$state2.requestCacheKey;
188
185
  if (requestCacheKey) {
189
- delete requestCache[requestCacheKey]; // HACK
190
-
186
+ delete requestCache[requestCacheKey];
187
+ // HACK
191
188
  delete this.state.requestCacheKey;
192
189
  }
193
-
194
190
  if (this.props.query && queryFetcher !== prevState.queryFetcher) {
195
191
  queryFetcher.setOnDataChange(this._handleDataChange);
196
192
  }
197
193
  };
198
-
199
194
  _proto.componentWillUnmount = function componentWillUnmount() {
200
195
  this.state.queryFetcher.dispose();
201
196
  this._maybeHiddenOrFastRefresh = true;
202
197
  };
203
-
204
198
  _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {
205
199
  return nextProps.render !== this.props.render || nextState.renderProps !== this.state.renderProps;
206
200
  };
207
-
208
201
  _proto.render = function render() {
209
202
  var _this$state3 = this.state,
210
- renderProps = _this$state3.renderProps,
211
- relayContext = _this$state3.relayContext; // Note that the root fragment results in `renderProps.props` is already
203
+ renderProps = _this$state3.renderProps,
204
+ relayContext = _this$state3.relayContext;
205
+ // Note that the root fragment results in `renderProps.props` is already
212
206
  // frozen by the store; this call is to freeze the renderProps object and
213
207
  // error property if set.
214
-
215
208
  if (process.env.NODE_ENV !== "production") {
216
209
  deepFreeze(renderProps);
217
210
  }
218
-
219
211
  return /*#__PURE__*/React.createElement(ReactRelayContext.Provider, {
220
212
  value: relayContext
221
213
  }, /*#__PURE__*/React.createElement(ReactRelayQueryRendererContext.Provider, {
222
214
  value: queryRendererContext
223
215
  }, this.props.render(renderProps)));
224
216
  };
225
-
226
217
  return ReactRelayQueryRenderer;
227
218
  }(React.Component);
228
-
229
219
  function getLoadingRenderProps() {
230
220
  return {
231
221
  error: null,
@@ -234,7 +224,6 @@ function getLoadingRenderProps() {
234
224
  retry: null
235
225
  };
236
226
  }
237
-
238
227
  function getEmptyRenderProps() {
239
228
  return {
240
229
  error: null,
@@ -243,14 +232,12 @@ function getEmptyRenderProps() {
243
232
  retry: null
244
233
  };
245
234
  }
246
-
247
235
  function getRenderProps(error, snapshot, queryFetcher, retryCallbacks) {
248
236
  return {
249
237
  error: error ? error : null,
250
238
  props: snapshot ? snapshot.data : null,
251
239
  retry: function retry(cacheConfigOverride) {
252
240
  var syncSnapshot = queryFetcher.retry(cacheConfigOverride);
253
-
254
241
  if (syncSnapshot && typeof retryCallbacks.handleDataChange === 'function') {
255
242
  retryCallbacks.handleDataChange({
256
243
  snapshot: syncSnapshot
@@ -263,20 +250,17 @@ function getRenderProps(error, snapshot, queryFetcher, retryCallbacks) {
263
250
  }
264
251
  };
265
252
  }
266
-
267
253
  function getRequestCacheKey(request, variables) {
268
254
  return JSON.stringify({
269
255
  id: request.cacheID ? request.cacheID : request.id,
270
256
  variables: variables
271
257
  });
272
258
  }
273
-
274
259
  function resetQueryStateForUpdate(props, prevState) {
275
260
  var query = props.query;
276
261
  var prevSelectionReferences = prevState.queryFetcher.getSelectionReferences();
277
262
  prevState.queryFetcher.disposeRequest();
278
263
  var queryFetcher;
279
-
280
264
  if (query) {
281
265
  var request = getRequest(query);
282
266
  var requestCacheKey = getRequestCacheKey(request.params, props.variables);
@@ -284,35 +268,33 @@ function resetQueryStateForUpdate(props, prevState) {
284
268
  } else {
285
269
  queryFetcher = new ReactRelayQueryFetcher(prevSelectionReferences);
286
270
  }
287
-
288
271
  return (0, _objectSpread2["default"])({
289
272
  prevQuery: props.query,
290
273
  prevPropsEnvironment: props.environment,
291
274
  prevPropsVariables: props.variables,
292
275
  queryFetcher: queryFetcher
293
- }, fetchQueryAndComputeStateFromProps(props, queryFetcher, prevState.retryCallbacks // passing no requestCacheKey will cause it to be recalculated internally
276
+ }, fetchQueryAndComputeStateFromProps(props, queryFetcher, prevState.retryCallbacks
277
+ // passing no requestCacheKey will cause it to be recalculated internally
294
278
  // and we want the updated requestCacheKey, since variables may have changed
295
279
  ));
296
280
  }
297
281
 
298
282
  function fetchQueryAndComputeStateFromProps(props, queryFetcher, retryCallbacks, requestCacheKey) {
299
283
  var environment = props.environment,
300
- query = props.query,
301
- variables = props.variables,
302
- cacheConfig = props.cacheConfig;
284
+ query = props.query,
285
+ variables = props.variables,
286
+ cacheConfig = props.cacheConfig;
303
287
  var genericEnvironment = environment;
304
-
305
288
  if (query) {
306
289
  var request = getRequest(query);
307
290
  var operation = createOperationDescriptor(request, variables, cacheConfig);
308
291
  var relayContext = {
309
292
  environment: genericEnvironment
310
293
  };
311
-
312
294
  if (typeof requestCacheKey === 'string' && requestCache[requestCacheKey]) {
313
295
  // This same request is already in flight.
314
- var snapshot = requestCache[requestCacheKey].snapshot;
315
296
 
297
+ var snapshot = requestCache[requestCacheKey].snapshot;
316
298
  if (snapshot) {
317
299
  // Use the cached response
318
300
  return {
@@ -333,24 +315,23 @@ function fetchQueryAndComputeStateFromProps(props, queryFetcher, retryCallbacks,
333
315
  };
334
316
  }
335
317
  }
336
-
337
318
  try {
338
319
  var storeSnapshot = queryFetcher.lookupInStore(genericEnvironment, operation, props.fetchPolicy);
339
320
  var querySnapshot = queryFetcher.fetch({
340
321
  environment: genericEnvironment,
341
322
  onDataChange: null,
342
323
  operation: operation
343
- }); // Use network data first, since it may be fresher
344
-
345
- var _snapshot = querySnapshot || storeSnapshot; // cache the request to avoid duplicate requests
324
+ });
346
325
 
326
+ // Use network data first, since it may be fresher
327
+ var _snapshot = querySnapshot || storeSnapshot;
347
328
 
329
+ // cache the request to avoid duplicate requests
348
330
  requestCacheKey = requestCacheKey || getRequestCacheKey(request.params, props.variables);
349
331
  requestCache[requestCacheKey] = {
350
332
  queryFetcher: queryFetcher,
351
333
  snapshot: _snapshot
352
334
  };
353
-
354
335
  if (!_snapshot) {
355
336
  return {
356
337
  error: null,
@@ -360,7 +341,6 @@ function fetchQueryAndComputeStateFromProps(props, queryFetcher, retryCallbacks,
360
341
  requestCacheKey: requestCacheKey
361
342
  };
362
343
  }
363
-
364
344
  return {
365
345
  error: null,
366
346
  relayContext: relayContext,
@@ -387,7 +367,6 @@ function fetchQueryAndComputeStateFromProps(props, queryFetcher, retryCallbacks,
387
367
  relayContext: _relayContext,
388
368
  renderProps: getEmptyRenderProps(),
389
369
  requestCacheKey: null // if there is an error, don't cache request
390
-
391
370
  };
392
371
  }
393
372
  }
@@ -6,12 +6,12 @@
6
6
  *
7
7
  *
8
8
  * @format
9
+ * @oncall relay
9
10
  */
10
- // flowlint ambiguous-object-type:error
11
+
11
12
  'use strict';
12
13
 
13
14
  var React = require('react');
14
-
15
15
  module.exports = React.createContext({
16
16
  rootIsQueryRenderer: false
17
17
  });