react-relay 14.1.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 -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
@@ -6,63 +6,45 @@
6
6
  *
7
7
  *
8
8
  * @format
9
+ * @oncall relay
9
10
  */
11
+
10
12
  'use strict';
11
13
 
12
14
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
13
-
14
15
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
-
16
16
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
17
-
18
17
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
19
-
20
18
  var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
21
-
22
19
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
-
24
20
  var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
25
-
26
21
  var _excluded = ["componentRef"],
27
- _excluded2 = ["componentRef", "__relayContext", "__rootIsQueryRenderer"],
28
- _excluded3 = ["componentRef", "__relayContext", "__rootIsQueryRenderer"];
29
-
22
+ _excluded2 = ["componentRef", "__relayContext", "__rootIsQueryRenderer"],
23
+ _excluded3 = ["componentRef", "__relayContext", "__rootIsQueryRenderer"];
30
24
  var buildReactRelayContainer = require('./buildReactRelayContainer');
31
-
32
25
  var getRootVariablesForFragments = require('./getRootVariablesForFragments');
33
-
34
26
  var _require = require('./ReactRelayContainerUtils'),
35
- getComponentName = _require.getComponentName,
36
- getContainerName = _require.getContainerName;
37
-
27
+ getComponentName = _require.getComponentName,
28
+ getContainerName = _require.getContainerName;
38
29
  var ReactRelayContext = require('./ReactRelayContext');
39
-
40
30
  var ReactRelayQueryFetcher = require('./ReactRelayQueryFetcher');
41
-
42
31
  var _require2 = require('./RelayContext'),
43
- assertRelayContext = _require2.assertRelayContext;
44
-
32
+ assertRelayContext = _require2.assertRelayContext;
45
33
  var areEqual = require("fbjs/lib/areEqual");
46
-
47
34
  var invariant = require('invariant');
48
-
49
35
  var React = require('react');
50
-
51
36
  var _require3 = require('relay-runtime'),
52
- ConnectionInterface = _require3.ConnectionInterface,
53
- Observable = _require3.Observable,
54
- RelayFeatureFlags = _require3.RelayFeatureFlags,
55
- createFragmentSpecResolver = _require3.createFragmentSpecResolver,
56
- createOperationDescriptor = _require3.createOperationDescriptor,
57
- getDataIDsFromObject = _require3.getDataIDsFromObject,
58
- getRequest = _require3.getRequest,
59
- getVariablesFromObject = _require3.getVariablesFromObject,
60
- isScalarAndEqual = _require3.isScalarAndEqual;
61
-
37
+ ConnectionInterface = _require3.ConnectionInterface,
38
+ Observable = _require3.Observable,
39
+ RelayFeatureFlags = _require3.RelayFeatureFlags,
40
+ createFragmentSpecResolver = _require3.createFragmentSpecResolver,
41
+ createOperationDescriptor = _require3.createOperationDescriptor,
42
+ getDataIDsFromObject = _require3.getDataIDsFromObject,
43
+ getRequest = _require3.getRequest,
44
+ getVariablesFromObject = _require3.getVariablesFromObject,
45
+ isScalarAndEqual = _require3.isScalarAndEqual;
62
46
  var warning = require("fbjs/lib/warning");
63
-
64
47
  var FORWARD = 'forward';
65
-
66
48
  /**
67
49
  * Extends the functionality of RelayFragmentContainer by providing a mechanism
68
50
  * to load more data from a connection.
@@ -194,24 +176,21 @@ var FORWARD = 'forward';
194
176
  * typically reference one of the container's fragment (as in the example)
195
177
  * to ensure that all the necessary fields for sub-components are fetched.
196
178
  */
179
+
197
180
  function createGetConnectionFromProps(metadata) {
198
181
  var path = metadata.path;
199
182
  !path ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Unable to synthesize a ' + 'getConnectionFromProps function.') : invariant(false) : void 0;
200
183
  return function (props) {
201
184
  var data = props[metadata.fragmentName];
202
-
203
185
  for (var i = 0; i < path.length; i++) {
204
186
  if (!data || typeof data !== 'object') {
205
187
  return null;
206
188
  }
207
-
208
189
  data = data[path[i]];
209
190
  }
210
-
211
191
  return data;
212
192
  };
213
193
  }
214
-
215
194
  function createGetFragmentVariables(metadata) {
216
195
  var countVariable = metadata.count;
217
196
  !countVariable ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Unable to synthesize a ' + 'getFragmentVariables function.') : invariant(false) : void 0;
@@ -219,21 +198,18 @@ function createGetFragmentVariables(metadata) {
219
198
  return (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, prevVars), {}, (0, _defineProperty2["default"])({}, countVariable, totalCount));
220
199
  };
221
200
  }
222
-
223
201
  function findConnectionMetadata(fragments) {
224
202
  var foundConnectionMetadata = null;
225
203
  var isRelayModern = false;
226
-
227
204
  for (var fragmentName in fragments) {
228
205
  var fragment = fragments[fragmentName];
229
- var connectionMetadata = fragment.metadata && fragment.metadata.connection; // HACK: metadata is always set to `undefined` in classic. In modern, even
206
+ var connectionMetadata = fragment.metadata && fragment.metadata.connection;
207
+ // HACK: metadata is always set to `undefined` in classic. In modern, even
230
208
  // if empty, it is set to null (never undefined). We use that knowlege to
231
209
  // check if we're dealing with classic or modern
232
-
233
210
  if (fragment.metadata !== undefined) {
234
211
  isRelayModern = true;
235
212
  }
236
-
237
213
  if (connectionMetadata) {
238
214
  !(connectionMetadata.length === 1) ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Only a single @connection is ' + 'supported, `%s` has %s.', fragmentName, connectionMetadata.length) : invariant(false) : void 0;
239
215
  !!foundConnectionMetadata ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Only a single fragment with ' + '@connection is supported.') : invariant(false) : void 0;
@@ -242,11 +218,9 @@ function findConnectionMetadata(fragments) {
242
218
  });
243
219
  }
244
220
  }
245
-
246
221
  !(!isRelayModern || foundConnectionMetadata !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: A @connection directive must be present.') : invariant(false) : void 0;
247
222
  return foundConnectionMetadata || {};
248
223
  }
249
-
250
224
  function toObserver(observerOrCallback) {
251
225
  return typeof observerOrCallback === 'function' ? {
252
226
  error: observerOrCallback,
@@ -256,10 +230,8 @@ function toObserver(observerOrCallback) {
256
230
  }
257
231
  } : observerOrCallback || {};
258
232
  }
259
-
260
233
  function createContainerWithFragments(Component, fragments, connectionConfig) {
261
234
  var _class;
262
-
263
235
  var componentName = getComponentName(Component);
264
236
  var containerName = getContainerName(Component);
265
237
  var metadata = findConnectionMetadata(fragments);
@@ -269,10 +241,10 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
269
241
  var getFragmentVariables = connectionConfig.getFragmentVariables || createGetFragmentVariables(metadata);
270
242
  return _class = /*#__PURE__*/function (_React$Component) {
271
243
  (0, _inheritsLoose2["default"])(_class, _React$Component);
244
+ // $FlowFixMe[missing-local-annot]
272
245
 
273
246
  function _class(props) {
274
247
  var _props$__rootIsQueryR, _this;
275
-
276
248
  _this = _React$Component.call(this, props) || this;
277
249
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_handleFragmentDataUpdate", function () {
278
250
  _this.setState({
@@ -281,7 +253,6 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
281
253
  });
282
254
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_hasMore", function () {
283
255
  var connectionData = _this._getConnectionData();
284
-
285
256
  return !!(connectionData && connectionData.hasMore && connectionData.cursor);
286
257
  });
287
258
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_isLoading", function () {
@@ -293,18 +264,15 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
293
264
  dispose: function dispose() {}
294
265
  };
295
266
  }
296
-
297
267
  _this._refetchVariables = refetchVariables;
298
268
  var paginatingVariables = {
299
269
  count: totalCount,
300
270
  cursor: null,
301
271
  totalCount: totalCount
302
272
  };
303
-
304
273
  var fetch = _this._fetchPage(paginatingVariables, toObserver(observerOrCallback), {
305
274
  force: true
306
275
  });
307
-
308
276
  return {
309
277
  dispose: fetch.unsubscribe
310
278
  };
@@ -315,28 +283,21 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
315
283
  dispose: function dispose() {}
316
284
  };
317
285
  }
318
-
319
286
  var observer = toObserver(observerOrCallback);
320
-
321
287
  var connectionData = _this._getConnectionData();
322
-
323
288
  if (!connectionData) {
324
289
  Observable.create(function (sink) {
325
290
  return sink.complete();
326
291
  }).subscribe(observer);
327
292
  return null;
328
293
  }
329
-
330
294
  var totalCount = connectionData.edgeCount + pageSize;
331
-
332
295
  if (options && options.force) {
333
296
  return _this._refetchConnection(totalCount, observerOrCallback);
334
297
  }
335
-
336
298
  var _ConnectionInterface$ = ConnectionInterface.get(),
337
- END_CURSOR = _ConnectionInterface$.END_CURSOR,
338
- START_CURSOR = _ConnectionInterface$.START_CURSOR;
339
-
299
+ END_CURSOR = _ConnectionInterface$.END_CURSOR,
300
+ START_CURSOR = _ConnectionInterface$.START_CURSOR;
340
301
  var cursor = connectionData.cursor;
341
302
  process.env.NODE_ENV !== "production" ? warning(cursor != null && cursor !== '', 'ReactRelayPaginationContainer: Cannot `loadMore` without valid `%s` (got `%s`)', direction === FORWARD ? END_CURSOR : START_CURSOR, cursor) : void 0;
342
303
  var paginatingVariables = {
@@ -344,9 +305,7 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
344
305
  cursor: cursor,
345
306
  totalCount: totalCount
346
307
  };
347
-
348
308
  var fetch = _this._fetchPage(paginatingVariables, observer, options);
349
-
350
309
  return {
351
310
  dispose: fetch.unsubscribe
352
311
  };
@@ -356,13 +315,11 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
356
315
  _this._isARequestInFlight = false;
357
316
  _this._refetchSubscription = null;
358
317
  _this._refetchVariables = null;
359
-
360
318
  if (RelayFeatureFlags.ENABLE_CONTAINERS_SUBSCRIBE_ON_COMMIT === true) {
361
319
  _this._resolver = createFragmentSpecResolver(relayContext, containerName, fragments, props, rootIsQueryRenderer);
362
320
  } else {
363
321
  _this._resolver = createFragmentSpecResolver(relayContext, containerName, fragments, props, rootIsQueryRenderer, _this._handleFragmentDataUpdate);
364
322
  }
365
-
366
323
  _this.state = {
367
324
  data: _this._resolver.resolve(),
368
325
  prevContext: relayContext,
@@ -374,17 +331,13 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
374
331
  _this._hasFetched = false;
375
332
  return _this;
376
333
  }
377
-
378
334
  var _proto = _class.prototype;
379
-
380
335
  _proto.componentDidMount = function componentDidMount() {
381
336
  this._isUnmounted = false;
382
-
383
337
  if (RelayFeatureFlags.ENABLE_CONTAINERS_SUBSCRIBE_ON_COMMIT === true) {
384
338
  this._subscribeToNewResolverAndRerenderIfStoreHasChanged();
385
339
  }
386
340
  };
387
-
388
341
  _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {
389
342
  if (RelayFeatureFlags.ENABLE_CONTAINERS_SUBSCRIBE_ON_COMMIT === true) {
390
343
  if (prevState.resolverGeneration !== this.state.resolverGeneration) {
@@ -394,39 +347,35 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
394
347
  }
395
348
  }
396
349
  }
350
+
397
351
  /**
398
352
  * When new props are received, read data for the new props and subscribe
399
353
  * for updates. Props may be the same in which case previous data and
400
354
  * subscriptions can be reused.
401
- */
402
- ;
403
-
355
+ */;
404
356
  _proto.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps(nextProps) {
405
357
  var _this2 = this;
406
-
407
358
  var _nextProps$__rootIsQu;
408
-
409
359
  var relayContext = assertRelayContext(nextProps.__relayContext);
410
360
  var rootIsQueryRenderer = (_nextProps$__rootIsQu = nextProps.__rootIsQueryRenderer) !== null && _nextProps$__rootIsQu !== void 0 ? _nextProps$__rootIsQu : false;
411
361
  var prevIDs = getDataIDsFromObject(fragments, this.props);
412
362
  var nextIDs = getDataIDsFromObject(fragments, nextProps);
413
363
  var prevRootVariables = getRootVariablesForFragments(fragments, this.props);
414
- var nextRootVariables = getRootVariablesForFragments(fragments, nextProps); // If the environment has changed or props point to new records then
364
+ var nextRootVariables = getRootVariablesForFragments(fragments, nextProps);
365
+
366
+ // If the environment has changed or props point to new records then
415
367
  // previously fetched data and any pending fetches no longer apply:
416
368
  // - Existing references are on the old environment.
417
369
  // - Existing references are based on old variables.
418
370
  // - Pending fetches are for the previous records.
419
-
420
371
  if (relayContext.environment !== this.state.prevContext.environment || !areEqual(prevRootVariables, nextRootVariables) || !areEqual(prevIDs, nextIDs)) {
421
- this._cleanup(); // Child containers rely on context.relay being mutated (for gDSFP).
422
-
423
-
372
+ this._cleanup();
373
+ // Child containers rely on context.relay being mutated (for gDSFP).
424
374
  if (RelayFeatureFlags.ENABLE_CONTAINERS_SUBSCRIBE_ON_COMMIT === true) {
425
375
  this._resolver = createFragmentSpecResolver(relayContext, containerName, fragments, nextProps, rootIsQueryRenderer);
426
376
  } else {
427
377
  this._resolver = createFragmentSpecResolver(relayContext, containerName, fragments, nextProps, rootIsQueryRenderer, this._handleFragmentDataUpdate);
428
378
  }
429
-
430
379
  this.setState(function (prevState) {
431
380
  return {
432
381
  prevContext: relayContext,
@@ -438,35 +387,27 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
438
387
  } else if (!this._hasFetched) {
439
388
  this._resolver.setProps(nextProps);
440
389
  }
441
-
442
390
  var data = this._resolver.resolve();
443
-
444
391
  if (data !== this.state.data) {
445
392
  this.setState({
446
393
  data: data
447
394
  });
448
395
  }
449
396
  };
450
-
451
397
  _proto.componentWillUnmount = function componentWillUnmount() {
452
398
  this._isUnmounted = true;
453
-
454
399
  this._cleanup();
455
400
  };
456
-
457
401
  _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {
458
402
  // Short-circuit if any Relay-related data has changed
459
403
  if (nextState.data !== this.state.data || nextState.relayProp !== this.state.relayProp || nextState.resolverGeneration !== this.state.resolverGeneration) {
460
404
  return true;
461
- } // Otherwise, for convenience short-circuit if all non-Relay props
405
+ }
406
+ // Otherwise, for convenience short-circuit if all non-Relay props
462
407
  // are scalar and equal
463
-
464
-
465
408
  var keys = Object.keys(nextProps);
466
-
467
409
  for (var ii = 0; ii < keys.length; ii++) {
468
410
  var key = keys[ii];
469
-
470
411
  if (key === '__relayContext') {
471
412
  if (nextState.prevContext.environment !== this.state.prevContext.environment) {
472
413
  return true;
@@ -477,10 +418,8 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
477
418
  }
478
419
  }
479
420
  }
480
-
481
421
  return false;
482
422
  };
483
-
484
423
  _proto._buildRelayProp = function _buildRelayProp(relayContext) {
485
424
  return {
486
425
  hasMore: this._hasMore,
@@ -490,115 +429,97 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
490
429
  environment: relayContext.environment
491
430
  };
492
431
  };
493
-
494
432
  _proto._rerenderIfStoreHasChanged = function _rerenderIfStoreHasChanged() {
495
- var data = this.state.data; // External values could change between render and commit.
433
+ var data = this.state.data;
434
+ // External values could change between render and commit.
496
435
  // Check for this case, even though it requires an extra store read.
497
-
498
436
  var maybeNewData = this._resolver.resolve();
499
-
500
437
  if (data !== maybeNewData) {
501
438
  this.setState({
502
439
  data: maybeNewData
503
440
  });
504
441
  }
505
442
  };
506
-
507
443
  _proto._subscribeToNewResolverAndRerenderIfStoreHasChanged = function _subscribeToNewResolverAndRerenderIfStoreHasChanged() {
508
444
  var data = this.state.data;
445
+ var maybeNewData = this._resolver.resolve();
509
446
 
510
- var maybeNewData = this._resolver.resolve(); // Event listeners are only safe to add during the commit phase,
447
+ // Event listeners are only safe to add during the commit phase,
511
448
  // So they won't leak if render is interrupted or errors.
449
+ this._resolver.setCallback(this.props, this._handleFragmentDataUpdate);
512
450
 
513
-
514
- this._resolver.setCallback(this.props, this._handleFragmentDataUpdate); // External values could change between render and commit.
451
+ // External values could change between render and commit.
515
452
  // Check for this case, even though it requires an extra store read.
516
-
517
-
518
453
  if (data !== maybeNewData) {
519
454
  this.setState({
520
455
  data: maybeNewData
521
456
  });
522
457
  }
523
458
  }
459
+
524
460
  /**
525
461
  * Render new data for the existing props/context.
526
- */
527
- ;
528
-
462
+ */;
529
463
  _proto._getConnectionData = function _getConnectionData() {
530
464
  // Extract connection data and verify there are more edges to fetch
465
+ // eslint-disable-next-line no-unused-vars
531
466
  var _this$props = this.props,
532
- _ = _this$props.componentRef,
533
- restProps = (0, _objectWithoutPropertiesLoose2["default"])(_this$props, _excluded);
467
+ _ = _this$props.componentRef,
468
+ restProps = (0, _objectWithoutPropertiesLoose2["default"])(_this$props, _excluded);
534
469
  var props = (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, restProps), this.state.data);
535
470
  var connectionData = getConnectionFromProps(props);
536
-
537
471
  if (connectionData == null) {
538
472
  return null;
539
473
  }
540
-
541
474
  var _ConnectionInterface$2 = ConnectionInterface.get(),
542
- EDGES = _ConnectionInterface$2.EDGES,
543
- PAGE_INFO = _ConnectionInterface$2.PAGE_INFO,
544
- HAS_NEXT_PAGE = _ConnectionInterface$2.HAS_NEXT_PAGE,
545
- HAS_PREV_PAGE = _ConnectionInterface$2.HAS_PREV_PAGE,
546
- END_CURSOR = _ConnectionInterface$2.END_CURSOR,
547
- START_CURSOR = _ConnectionInterface$2.START_CURSOR;
548
-
475
+ EDGES = _ConnectionInterface$2.EDGES,
476
+ PAGE_INFO = _ConnectionInterface$2.PAGE_INFO,
477
+ HAS_NEXT_PAGE = _ConnectionInterface$2.HAS_NEXT_PAGE,
478
+ HAS_PREV_PAGE = _ConnectionInterface$2.HAS_PREV_PAGE,
479
+ END_CURSOR = _ConnectionInterface$2.END_CURSOR,
480
+ START_CURSOR = _ConnectionInterface$2.START_CURSOR;
549
481
  !(typeof connectionData === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Expected `getConnectionFromProps()` in `%s`' + 'to return `null` or a plain object with %s and %s properties, got `%s`.', componentName, EDGES, PAGE_INFO, connectionData) : invariant(false) : void 0;
550
482
  var edges = connectionData[EDGES];
551
483
  var pageInfo = connectionData[PAGE_INFO];
552
-
553
484
  if (edges == null || pageInfo == null) {
554
485
  return null;
555
486
  }
556
-
557
487
  !Array.isArray(edges) ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Expected `getConnectionFromProps()` in `%s`' + 'to return an object with %s: Array, got `%s`.', componentName, EDGES, edges) : invariant(false) : void 0;
558
488
  !(typeof pageInfo === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Expected `getConnectionFromProps()` in `%s`' + 'to return an object with %s: Object, got `%s`.', componentName, PAGE_INFO, pageInfo) : invariant(false) : void 0;
559
489
  var hasMore = direction === FORWARD ? pageInfo[HAS_NEXT_PAGE] : pageInfo[HAS_PREV_PAGE];
560
490
  var cursor = direction === FORWARD ? pageInfo[END_CURSOR] : pageInfo[START_CURSOR];
561
-
562
491
  if (typeof hasMore !== 'boolean' || edges.length !== 0 && typeof cursor === 'undefined') {
563
492
  process.env.NODE_ENV !== "production" ? warning(false, 'ReactRelayPaginationContainer: Cannot paginate without %s fields in `%s`. ' + 'Be sure to fetch %s (got `%s`) and %s (got `%s`).', PAGE_INFO, componentName, direction === FORWARD ? HAS_NEXT_PAGE : HAS_PREV_PAGE, hasMore, direction === FORWARD ? END_CURSOR : START_CURSOR, cursor) : void 0;
564
493
  return null;
565
494
  }
566
-
567
495
  return {
568
496
  cursor: cursor,
569
497
  edgeCount: edges.length,
570
498
  hasMore: hasMore
571
499
  };
572
500
  };
573
-
574
501
  _proto._getQueryFetcher = function _getQueryFetcher() {
575
502
  if (!this._queryFetcher) {
576
503
  this._queryFetcher = new ReactRelayQueryFetcher();
577
504
  }
578
-
579
505
  return this._queryFetcher;
580
506
  };
581
-
582
507
  _proto._canFetchPage = function _canFetchPage(method) {
583
508
  if (this._isUnmounted) {
584
509
  process.env.NODE_ENV !== "production" ? warning(false, 'ReactRelayPaginationContainer: Unexpected call of `%s` ' + 'on unmounted container `%s`. It looks like some instances ' + 'of your container still trying to fetch data but they already ' + 'unmounted. Please make sure you clear all timers, intervals, async ' + 'calls, etc that may trigger `%s` call.', method, containerName, method) : void 0;
585
510
  return false;
586
511
  }
587
-
588
512
  return true;
589
513
  };
590
-
591
514
  _proto._fetchPage = function _fetchPage(paginatingVariables, observer, options) {
592
515
  var _this3 = this;
593
-
594
516
  var _assertRelayContext = assertRelayContext(this.props.__relayContext),
595
- environment = _assertRelayContext.environment;
596
-
517
+ environment = _assertRelayContext.environment;
597
518
  var _this$props2 = this.props,
598
- _ = _this$props2.componentRef,
599
- __relayContext = _this$props2.__relayContext,
600
- __rootIsQueryRenderer = _this$props2.__rootIsQueryRenderer,
601
- restProps = (0, _objectWithoutPropertiesLoose2["default"])(_this$props2, _excluded2);
519
+ _ = _this$props2.componentRef,
520
+ __relayContext = _this$props2.__relayContext,
521
+ __rootIsQueryRenderer = _this$props2.__rootIsQueryRenderer,
522
+ restProps = (0, _objectWithoutPropertiesLoose2["default"])(_this$props2, _excluded2);
602
523
  var props = (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, restProps), this.state.data);
603
524
  var fragmentVariables;
604
525
  var rootVariables = getRootVariablesForFragments(fragments, restProps);
@@ -614,27 +535,22 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
614
535
  var cacheConfig = options ? {
615
536
  force: !!options.force
616
537
  } : undefined;
617
-
618
538
  if (cacheConfig != null && (options === null || options === void 0 ? void 0 : options.metadata) != null) {
619
539
  cacheConfig.metadata = options === null || options === void 0 ? void 0 : options.metadata;
620
540
  }
621
-
622
541
  var request = getRequest(connectionConfig.query);
623
542
  var operation = createOperationDescriptor(request, fetchVariables, cacheConfig);
624
543
  var refetchSubscription = null;
625
-
626
544
  if (this._refetchSubscription) {
627
545
  this._refetchSubscription.unsubscribe();
628
546
  }
629
-
630
547
  this._hasFetched = true;
631
-
632
548
  var onNext = function onNext(payload, complete) {
633
549
  var prevData = _this3._resolver.resolve();
634
-
635
550
  _this3._resolver.setVariables(getFragmentVariables(fragmentVariables, paginatingVariables.totalCount), operation.request.node);
551
+ var nextData = _this3._resolver.resolve();
636
552
 
637
- var nextData = _this3._resolver.resolve(); // Workaround slightly different handling for connection in different
553
+ // Workaround slightly different handling for connection in different
638
554
  // core implementations:
639
555
  // - Classic core requires the count to be explicitly incremented
640
556
  // - Modern core automatically appends new items, updating the count
@@ -643,8 +559,6 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
643
559
  // `setState` is only required if changing the variables would change the
644
560
  // resolved data.
645
561
  // TODO #14894725: remove PaginationContainer equal check
646
-
647
-
648
562
  if (!areEqual(prevData, nextData)) {
649
563
  _this3.setState({
650
564
  data: nextData,
@@ -656,14 +570,12 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
656
570
  complete();
657
571
  }
658
572
  };
659
-
660
573
  var cleanup = function cleanup() {
661
574
  if (_this3._refetchSubscription === refetchSubscription) {
662
575
  _this3._refetchSubscription = null;
663
576
  _this3._isARequestInFlight = false;
664
577
  }
665
578
  };
666
-
667
579
  this._isARequestInFlight = true;
668
580
  refetchSubscription = this._getQueryFetcher().execute({
669
581
  environment: environment,
@@ -673,11 +585,11 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
673
585
  return Observable.create(function (sink) {
674
586
  onNext(payload, function () {
675
587
  sink.next(); // pass void to public observer's `next`
676
-
677
588
  sink.complete();
678
589
  });
679
590
  });
680
- }) // use do instead of finally so that observer's `complete` fires after cleanup
591
+ })
592
+ // use do instead of finally so that observer's `complete` fires after cleanup
681
593
  ["do"]({
682
594
  error: cleanup,
683
595
  complete: cleanup,
@@ -686,31 +598,29 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
686
598
  this._refetchSubscription = this._isARequestInFlight ? refetchSubscription : null;
687
599
  return refetchSubscription;
688
600
  };
689
-
690
601
  _proto._cleanup = function _cleanup() {
691
602
  this._resolver.dispose();
692
-
693
603
  this._refetchVariables = null;
694
604
  this._hasFetched = false;
695
-
696
605
  if (this._refetchSubscription) {
697
606
  this._refetchSubscription.unsubscribe();
698
-
699
607
  this._refetchSubscription = null;
700
608
  this._isARequestInFlight = false;
701
609
  }
702
-
703
610
  if (this._queryFetcher) {
704
611
  this._queryFetcher.dispose();
705
612
  }
706
- };
613
+ }
707
614
 
615
+ // $FlowFixMe[missing-local-annot]
616
+ ;
708
617
  _proto.render = function render() {
618
+ // eslint-disable-next-line no-unused-vars
709
619
  var _this$props3 = this.props,
710
- componentRef = _this$props3.componentRef,
711
- __relayContext = _this$props3.__relayContext,
712
- __rootIsQueryRenderer = _this$props3.__rootIsQueryRenderer,
713
- props = (0, _objectWithoutPropertiesLoose2["default"])(_this$props3, _excluded3);
620
+ componentRef = _this$props3.componentRef,
621
+ __relayContext = _this$props3.__relayContext,
622
+ __rootIsQueryRenderer = _this$props3.__rootIsQueryRenderer,
623
+ props = (0, _objectWithoutPropertiesLoose2["default"])(_this$props3, _excluded3);
714
624
  return /*#__PURE__*/React.createElement(ReactRelayContext.Provider, {
715
625
  value: this.state.contextForChildren
716
626
  }, /*#__PURE__*/React.createElement(Component, (0, _extends2["default"])({}, props, this.state.data, {
@@ -718,10 +628,10 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
718
628
  relay: this.state.relayProp
719
629
  })));
720
630
  };
721
-
722
631
  return _class;
723
632
  }(React.Component), (0, _defineProperty2["default"])(_class, "displayName", containerName), _class;
724
633
  }
634
+
725
635
  /**
726
636
  * Wrap the basic `createContainer()` function with logic to adapt to the
727
637
  * `context.relay.environment` in which it is rendered. Specifically, the
@@ -729,15 +639,12 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
729
639
  * `fragmentSpec` is memoized once per environment, rather than once per
730
640
  * instance of the container constructed/rendered.
731
641
  */
732
-
733
-
734
642
  function createContainer(Component, fragmentSpec, connectionConfig) {
735
643
  // $FlowFixMe[incompatible-return]
736
644
  return buildReactRelayContainer(Component, fragmentSpec, function (ComponentClass, fragments) {
737
645
  return createContainerWithFragments(ComponentClass, fragments, connectionConfig);
738
646
  });
739
647
  }
740
-
741
648
  module.exports = {
742
649
  createContainer: createContainer
743
650
  };