react-relay 14.1.0 → 16.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 (196) 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 +20 -10
  9. package/ReactRelayQueryRenderer.js.flow +15 -11
  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 +2 -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 +10 -6
  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 +0 -11
  47. package/lib/ReactRelayContext.js +1 -12
  48. package/lib/ReactRelayFragmentContainer.js +23 -122
  49. package/lib/ReactRelayFragmentMockRenderer.js +0 -12
  50. package/lib/ReactRelayLocalQueryRenderer.js +12 -41
  51. package/lib/ReactRelayPaginationContainer.js +45 -341
  52. package/lib/ReactRelayQueryFetcher.js +36 -111
  53. package/lib/ReactRelayQueryRenderer.js +29 -137
  54. package/lib/ReactRelayQueryRendererContext.js +0 -10
  55. package/lib/ReactRelayRefetchContainer.js +33 -166
  56. package/lib/ReactRelayTestMocker.js +18 -128
  57. package/lib/ReactRelayTypes.js +0 -9
  58. package/lib/RelayContext.js +0 -23
  59. package/lib/assertFragmentMap.js +0 -16
  60. package/lib/buildReactRelayContainer.js +7 -41
  61. package/lib/getRootVariablesForFragments.js +2 -19
  62. package/lib/hooks.js +3 -30
  63. package/lib/index.js +3 -39
  64. package/lib/isRelayEnvironment.js +1 -16
  65. package/lib/jest-react/enqueueTask.js +1 -25
  66. package/lib/jest-react/index.js +0 -1
  67. package/lib/jest-react/internalAct.js +2 -51
  68. package/lib/legacy.js +0 -20
  69. package/lib/multi-actor/ActorChange.js +0 -14
  70. package/lib/multi-actor/index.js +0 -10
  71. package/lib/multi-actor/useRelayActorEnvironment.js +2 -16
  72. package/lib/relay-hooks/EntryPointContainer.react.js +7 -23
  73. package/lib/relay-hooks/EntryPointTypes.flow.js +0 -10
  74. package/lib/relay-hooks/FragmentResource.js +130 -280
  75. package/lib/relay-hooks/HooksImplementation.js +0 -14
  76. package/lib/relay-hooks/InternalLogger.js +0 -11
  77. package/lib/relay-hooks/LRUCache.js +0 -39
  78. package/lib/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js +27 -65
  79. package/lib/relay-hooks/MatchContainer.js +9 -111
  80. package/lib/relay-hooks/NestedRelayEntryPointBuilderUtils.js +9 -0
  81. package/lib/relay-hooks/ProfilerContext.js +0 -14
  82. package/lib/relay-hooks/QueryResource.js +14 -149
  83. package/lib/relay-hooks/RelayEnvironmentProvider.js +3 -17
  84. package/lib/relay-hooks/SuspenseResource.js +2 -59
  85. package/lib/relay-hooks/loadEntryPoint.js +10 -45
  86. package/lib/relay-hooks/loadQuery.js +29 -169
  87. package/lib/relay-hooks/preloadQuery_DEPRECATED.js +8 -58
  88. package/lib/relay-hooks/prepareEntryPoint_DEPRECATED.js +6 -24
  89. package/lib/relay-hooks/react-cache/RelayReactCache.js +4 -20
  90. package/lib/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js +13 -102
  91. package/lib/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js +18 -75
  92. package/lib/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js +79 -222
  93. package/lib/relay-hooks/react-cache/useFragment_REACT_CACHE.js +3 -27
  94. package/lib/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js +11 -33
  95. package/lib/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js +62 -85
  96. package/lib/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js +20 -63
  97. package/lib/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js +53 -179
  98. package/lib/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js +5 -27
  99. package/lib/relay-hooks/useBlockingPaginationFragment.js +58 -121
  100. package/lib/relay-hooks/useClientQuery.js +0 -21
  101. package/lib/relay-hooks/useEntryPointLoader.js +12 -100
  102. package/lib/relay-hooks/useFetchTrackingRef.js +6 -33
  103. package/lib/relay-hooks/useFragment.js +5 -32
  104. package/lib/relay-hooks/useFragmentNode.js +14 -55
  105. package/lib/relay-hooks/useIsMountedRef.js +2 -14
  106. package/lib/relay-hooks/useIsOperationNodeActive.js +6 -29
  107. package/lib/relay-hooks/useIsParentQueryActive.js +1 -15
  108. package/lib/relay-hooks/useLazyLoadQuery.js +2 -23
  109. package/lib/relay-hooks/useLazyLoadQueryNode.js +18 -63
  110. package/lib/relay-hooks/useLoadMoreFunction.js +44 -100
  111. package/lib/relay-hooks/useMemoOperationDescriptor.js +4 -23
  112. package/lib/relay-hooks/useMemoVariables.js +8 -43
  113. package/lib/relay-hooks/useMutation.js +6 -34
  114. package/lib/relay-hooks/usePaginationFragment.js +49 -89
  115. package/lib/relay-hooks/usePreloadedQuery.js +10 -54
  116. package/lib/relay-hooks/useQueryLoader.js +18 -116
  117. package/lib/relay-hooks/useRefetchableFragment.js +4 -30
  118. package/lib/relay-hooks/useRefetchableFragmentNode.js +58 -184
  119. package/lib/relay-hooks/useRelayEnvironment.js +2 -16
  120. package/lib/relay-hooks/useStaticFragmentNodeWarning.js +2 -20
  121. package/lib/relay-hooks/useSubscribeToInvalidationState.js +3 -28
  122. package/lib/relay-hooks/useSubscription.js +3 -22
  123. package/lib/relay-hooks/useUnsafeRef_DEPRECATED.js +12 -0
  124. package/multi-actor/ActorChange.js.flow +1 -1
  125. package/multi-actor/index.js.flow +1 -1
  126. package/multi-actor/useRelayActorEnvironment.js.flow +2 -2
  127. package/package.json +2 -2
  128. package/react-relay-hooks.js +2 -2
  129. package/react-relay-hooks.min.js +2 -2
  130. package/react-relay-legacy.js +2 -2
  131. package/react-relay-legacy.min.js +2 -2
  132. package/react-relay.js +2 -2
  133. package/react-relay.min.js +2 -2
  134. package/relay-hooks/EntryPointContainer.react.js.flow +6 -1
  135. package/relay-hooks/EntryPointTypes.flow.js.flow +23 -20
  136. package/relay-hooks/FragmentResource.js.flow +148 -34
  137. package/relay-hooks/HooksImplementation.js.flow +1 -1
  138. package/relay-hooks/InternalLogger.js.flow +1 -1
  139. package/relay-hooks/LRUCache.js.flow +1 -1
  140. package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +19 -10
  141. package/relay-hooks/MatchContainer.js.flow +1 -1
  142. package/relay-hooks/NestedRelayEntryPointBuilderUtils.js.flow +51 -0
  143. package/relay-hooks/ProfilerContext.js.flow +1 -1
  144. package/relay-hooks/QueryResource.js.flow +25 -5
  145. package/relay-hooks/RelayEnvironmentProvider.js.flow +2 -2
  146. package/relay-hooks/SuspenseResource.js.flow +1 -1
  147. package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +3 -1
  148. package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +9 -7
  149. package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +3 -1
  150. package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +3 -1
  151. package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +40 -33
  152. package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +1 -1
  153. package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +38 -32
  154. package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +20 -18
  155. package/relay-hooks/__flowtests__/utils.js.flow +13 -2
  156. package/relay-hooks/loadEntryPoint.js.flow +15 -8
  157. package/relay-hooks/loadQuery.js.flow +32 -8
  158. package/relay-hooks/preloadQuery_DEPRECATED.js.flow +5 -6
  159. package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +17 -10
  160. package/relay-hooks/react-cache/RelayReactCache.js.flow +1 -1
  161. package/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js.flow +4 -4
  162. package/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js.flow +5 -4
  163. package/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js.flow +32 -14
  164. package/relay-hooks/react-cache/useFragment_REACT_CACHE.js.flow +4 -10
  165. package/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js.flow +1 -1
  166. package/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js.flow +39 -49
  167. package/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js.flow +1 -2
  168. package/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js.flow +29 -16
  169. package/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js.flow +17 -33
  170. package/relay-hooks/useBlockingPaginationFragment.js.flow +85 -58
  171. package/relay-hooks/useClientQuery.js.flow +3 -3
  172. package/relay-hooks/useEntryPointLoader.js.flow +10 -6
  173. package/relay-hooks/useFetchTrackingRef.js.flow +5 -4
  174. package/relay-hooks/useFragment.js.flow +2 -2
  175. package/relay-hooks/useFragmentNode.js.flow +7 -6
  176. package/relay-hooks/useIsMountedRef.js.flow +1 -1
  177. package/relay-hooks/useIsOperationNodeActive.js.flow +1 -1
  178. package/relay-hooks/useIsParentQueryActive.js.flow +1 -1
  179. package/relay-hooks/useLazyLoadQuery.js.flow +2 -2
  180. package/relay-hooks/useLazyLoadQueryNode.js.flow +2 -2
  181. package/relay-hooks/useLoadMoreFunction.js.flow +27 -16
  182. package/relay-hooks/useMemoOperationDescriptor.js.flow +3 -3
  183. package/relay-hooks/useMemoVariables.js.flow +13 -29
  184. package/relay-hooks/useMutation.js.flow +30 -13
  185. package/relay-hooks/usePaginationFragment.js.flow +55 -54
  186. package/relay-hooks/usePreloadedQuery.js.flow +47 -22
  187. package/relay-hooks/useQueryLoader.js.flow +78 -21
  188. package/relay-hooks/useRefetchableFragment.js.flow +65 -33
  189. package/relay-hooks/useRefetchableFragmentNode.js.flow +38 -17
  190. package/relay-hooks/useRelayEnvironment.js.flow +2 -2
  191. package/relay-hooks/useStaticFragmentNodeWarning.js.flow +3 -3
  192. package/relay-hooks/useSubscribeToInvalidationState.js.flow +2 -2
  193. package/relay-hooks/useSubscription.js.flow +1 -1
  194. package/relay-hooks/useUnsafeRef_DEPRECATED.js.flow +25 -0
  195. package/lib/readContext.js +0 -27
  196. package/readContext.js.flow +0 -29
@@ -1,85 +1,46 @@
1
- /**
2
- * Copyright (c) Meta Platforms, Inc. and affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- *
7
- *
8
- * @format
9
- */
10
1
  'use strict';
11
2
 
12
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
13
-
14
4
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
-
16
5
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
17
-
18
6
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
19
-
20
7
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
21
-
22
8
  var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
23
-
24
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
-
26
10
  var _excluded = ["componentRef", "__relayContext", "__rootIsQueryRenderer"];
27
-
28
11
  var buildReactRelayContainer = require('./buildReactRelayContainer');
29
-
30
12
  var getRootVariablesForFragments = require('./getRootVariablesForFragments');
31
-
32
13
  var _require = require('./ReactRelayContainerUtils'),
33
- getContainerName = _require.getContainerName;
34
-
14
+ getContainerName = _require.getContainerName;
35
15
  var ReactRelayContext = require('./ReactRelayContext');
36
-
37
16
  var ReactRelayQueryFetcher = require('./ReactRelayQueryFetcher');
38
-
39
17
  var _require2 = require('./RelayContext'),
40
- assertRelayContext = _require2.assertRelayContext;
41
-
18
+ assertRelayContext = _require2.assertRelayContext;
42
19
  var areEqual = require("fbjs/lib/areEqual");
43
-
44
20
  var React = require('react');
45
-
46
21
  var _require3 = require('relay-runtime'),
47
- Observable = _require3.Observable,
48
- createFragmentSpecResolver = _require3.createFragmentSpecResolver,
49
- createOperationDescriptor = _require3.createOperationDescriptor,
50
- getDataIDsFromObject = _require3.getDataIDsFromObject,
51
- getRequest = _require3.getRequest,
52
- getVariablesFromObject = _require3.getVariablesFromObject,
53
- isScalarAndEqual = _require3.isScalarAndEqual;
54
-
22
+ Observable = _require3.Observable,
23
+ createFragmentSpecResolver = _require3.createFragmentSpecResolver,
24
+ createOperationDescriptor = _require3.createOperationDescriptor,
25
+ getDataIDsFromObject = _require3.getDataIDsFromObject,
26
+ getRequest = _require3.getRequest,
27
+ getVariablesFromObject = _require3.getVariablesFromObject,
28
+ isScalarAndEqual = _require3.isScalarAndEqual;
55
29
  var warning = require("fbjs/lib/warning");
56
-
57
- /**
58
- * Composes a React component class, returning a new class that intercepts
59
- * props, resolving them with the provided fragments and subscribing for
60
- * updates.
61
- */
62
30
  function createContainerWithFragments(Component, fragments, taggedNode) {
63
31
  var _class;
64
-
65
32
  var containerName = getContainerName(Component);
66
33
  return _class = /*#__PURE__*/function (_React$Component) {
67
34
  (0, _inheritsLoose2["default"])(_class, _React$Component);
68
-
69
35
  function _class(props) {
70
36
  var _props$__rootIsQueryR, _this;
71
-
72
37
  _this = _React$Component.call(this, props) || this;
73
38
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_handleFragmentDataUpdate", function () {
74
39
  var resolverFromThisUpdate = _this.state.resolver;
75
-
76
40
  _this.setState(function (updatedState) {
77
- return (// If this event belongs to the current data source, update.
78
- // Otherwise we should ignore it.
79
- resolverFromThisUpdate === updatedState.resolver ? {
80
- data: updatedState.resolver.resolve()
81
- } : null
82
- );
41
+ return resolverFromThisUpdate === updatedState.resolver ? {
42
+ data: updatedState.resolver.resolve()
43
+ } : null;
83
44
  });
84
45
  });
85
46
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_refetch", function (refetchVariables, renderVariables, observerOrCallback, options) {
@@ -89,10 +50,8 @@ function createContainerWithFragments(Component, fragments, taggedNode) {
89
50
  dispose: function dispose() {}
90
51
  };
91
52
  }
92
-
93
53
  var _assertRelayContext = assertRelayContext(_this.props.__relayContext),
94
- environment = _assertRelayContext.environment;
95
-
54
+ environment = _assertRelayContext.environment;
96
55
  var rootVariables = getRootVariablesForFragments(fragments, _this.props);
97
56
  var fetchVariables = typeof refetchVariables === 'function' ? refetchVariables(_this._getFragmentVariables()) : refetchVariables;
98
57
  fetchVariables = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, rootVariables), fetchVariables);
@@ -100,32 +59,21 @@ function createContainerWithFragments(Component, fragments, taggedNode) {
100
59
  var cacheConfig = options ? {
101
60
  force: !!options.force
102
61
  } : undefined;
103
-
104
62
  if (cacheConfig != null && (options === null || options === void 0 ? void 0 : options.metadata) != null) {
105
63
  cacheConfig.metadata = options === null || options === void 0 ? void 0 : options.metadata;
106
64
  }
107
-
108
65
  var observer = typeof observerOrCallback === 'function' ? {
109
- // callback is not exectued on complete or unsubscribe
110
- // for backward compatibility
111
66
  next: observerOrCallback,
112
67
  error: observerOrCallback
113
68
  } : observerOrCallback || {};
114
69
  var query = getRequest(taggedNode);
115
- var operation = createOperationDescriptor(query, fetchVariables, cacheConfig); // TODO: T26288752 find a better way
116
-
117
- _this.state.localVariables = fetchVariables; // Cancel any previously running refetch.
118
-
119
- _this._refetchSubscription && _this._refetchSubscription.unsubscribe(); // Declare refetchSubscription before assigning it in .start(), since
120
- // synchronous completion may call callbacks .subscribe() returns.
121
-
70
+ var operation = createOperationDescriptor(query, fetchVariables, cacheConfig);
71
+ _this.state.localVariables = fetchVariables;
72
+ _this._refetchSubscription && _this._refetchSubscription.unsubscribe();
122
73
  var refetchSubscription;
123
-
124
74
  var storeSnapshot = _this._getQueryFetcher().lookupInStore(environment, operation, options === null || options === void 0 ? void 0 : options.fetchPolicy);
125
-
126
75
  if (storeSnapshot != null) {
127
76
  _this.state.resolver.setVariables(fragmentVariables, operation.request.node);
128
-
129
77
  _this.setState(function (latestState) {
130
78
  return {
131
79
  data: latestState.resolver.resolve(),
@@ -137,20 +85,16 @@ function createContainerWithFragments(Component, fragments, taggedNode) {
137
85
  observer.next && observer.next();
138
86
  observer.complete && observer.complete();
139
87
  });
140
-
141
88
  return {
142
89
  dispose: function dispose() {}
143
90
  };
144
91
  }
145
-
146
92
  _this._getQueryFetcher().execute({
147
93
  environment: environment,
148
94
  operation: operation,
149
- // TODO (T26430099): Cleanup old references
150
95
  preservePreviousReferences: true
151
96
  }).mergeMap(function (response) {
152
97
  _this.state.resolver.setVariables(fragmentVariables, operation.request.node);
153
-
154
98
  return Observable.create(function (sink) {
155
99
  return _this.setState(function (latestState) {
156
100
  return {
@@ -165,8 +109,6 @@ function createContainerWithFragments(Component, fragments, taggedNode) {
165
109
  });
166
110
  });
167
111
  })["finally"](function () {
168
- // Finalizing a refetch should only clear this._refetchSubscription
169
- // if the finizing subscription is the most recent call.
170
112
  if (_this._refetchSubscription === refetchSubscription) {
171
113
  _this._refetchSubscription = null;
172
114
  }
@@ -176,7 +118,6 @@ function createContainerWithFragments(Component, fragments, taggedNode) {
176
118
  observer.start && observer.start(subscription);
177
119
  }
178
120
  }));
179
-
180
121
  return {
181
122
  dispose: function dispose() {
182
123
  refetchSubscription && refetchSubscription.unsubscribe();
@@ -185,11 +126,7 @@ function createContainerWithFragments(Component, fragments, taggedNode) {
185
126
  });
186
127
  var relayContext = assertRelayContext(props.__relayContext);
187
128
  var rootIsQueryRenderer = (_props$__rootIsQueryR = props.__rootIsQueryRenderer) !== null && _props$__rootIsQueryR !== void 0 ? _props$__rootIsQueryR : false;
188
- _this._refetchSubscription = null; // Do not provide a subscription/callback here.
189
- // It is possible for this render to be interrupted or aborted,
190
- // In which case the subscription would cause a leak.
191
- // We will add the subscription in componentDidMount().
192
-
129
+ _this._refetchSubscription = null;
193
130
  var resolver = createFragmentSpecResolver(relayContext, containerName, fragments, props, rootIsQueryRenderer);
194
131
  _this.state = {
195
132
  data: resolver.resolve(),
@@ -203,42 +140,23 @@ function createContainerWithFragments(Component, fragments, taggedNode) {
203
140
  _this._isUnmounted = false;
204
141
  return _this;
205
142
  }
206
-
207
143
  var _proto = _class.prototype;
208
-
209
144
  _proto.componentDidMount = function componentDidMount() {
210
145
  this._isUnmounted = false;
211
-
212
146
  this._subscribeToNewResolverAndRerenderIfStoreHasChanged();
213
147
  };
214
-
215
148
  _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {
216
- // If the environment has changed or props point to new records then
217
- // previously fetched data and any pending fetches no longer apply:
218
- // - Existing references are on the old environment.
219
- // - Existing references are based on old variables.
220
- // - Pending fetches are for the previous records.
221
149
  if (this.state.resolver !== prevState.resolver) {
222
150
  prevState.resolver.dispose();
223
151
  this._queryFetcher && this._queryFetcher.dispose();
224
152
  this._refetchSubscription && this._refetchSubscription.unsubscribe();
225
-
226
153
  this._subscribeToNewResolverAndRerenderIfStoreHasChanged();
227
154
  } else {
228
155
  this._rerenderIfStoreHasChanged();
229
156
  }
230
- }
231
- /**
232
- * When new props are received, read data for the new props and add it to
233
- * state. Props may be the same in which case previous data can be reused.
234
- */
235
- ;
236
-
157
+ };
237
158
  _class.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {
238
159
  var _nextProps$__rootIsQu;
239
-
240
- // Any props change could impact the query, so we mirror props in state.
241
- // This is an unusual pattern, but necessary for this container usecase.
242
160
  var prevProps = prevState.prevProps;
243
161
  var relayContext = assertRelayContext(nextProps.__relayContext);
244
162
  var rootIsQueryRenderer = (_nextProps$__rootIsQu = nextProps.__rootIsQueryRenderer) !== null && _nextProps$__rootIsQu !== void 0 ? _nextProps$__rootIsQu : false;
@@ -246,17 +164,8 @@ function createContainerWithFragments(Component, fragments, taggedNode) {
246
164
  var nextIDs = getDataIDsFromObject(fragments, nextProps);
247
165
  var prevRootVariables = getRootVariablesForFragments(fragments, prevProps);
248
166
  var nextRootVariables = getRootVariablesForFragments(fragments, nextProps);
249
- var resolver = prevState.resolver; // If the environment has changed or props point to new records then
250
- // previously fetched data and any pending fetches no longer apply:
251
- // - Existing references are on the old environment.
252
- // - Existing references are based on old variables.
253
- // - Pending fetches are for the previous records.
254
-
167
+ var resolver = prevState.resolver;
255
168
  if (prevState.prevPropsContext.environment !== relayContext.environment || !areEqual(prevRootVariables, nextRootVariables) || !areEqual(prevIDs, nextIDs)) {
256
- // Do not provide a subscription/callback here.
257
- // It is possible for this render to be interrupted or aborted,
258
- // In which case the subscription would cause a leak.
259
- // We will add the subscription in componentDidUpdate().
260
169
  resolver = createFragmentSpecResolver(relayContext, containerName, fragments, nextProps, rootIsQueryRenderer);
261
170
  return {
262
171
  data: resolver.resolve(),
@@ -270,39 +179,28 @@ function createContainerWithFragments(Component, fragments, taggedNode) {
270
179
  } else if (!prevState.localVariables) {
271
180
  resolver.setProps(nextProps);
272
181
  }
273
-
274
182
  var data = resolver.resolve();
275
-
276
183
  if (data !== prevState.data) {
277
184
  return {
278
185
  data: data,
279
186
  prevProps: nextProps
280
187
  };
281
188
  }
282
-
283
189
  return null;
284
190
  };
285
-
286
191
  _proto.componentWillUnmount = function componentWillUnmount() {
287
192
  this._isUnmounted = true;
288
193
  this.state.resolver.dispose();
289
194
  this._queryFetcher && this._queryFetcher.dispose();
290
195
  this._refetchSubscription && this._refetchSubscription.unsubscribe();
291
196
  };
292
-
293
197
  _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {
294
- // Short-circuit if any Relay-related data has changed
295
198
  if (nextState.data !== this.state.data || nextState.relayProp !== this.state.relayProp) {
296
199
  return true;
297
- } // Otherwise, for convenience short-circuit if all non-Relay props
298
- // are scalar and equal
299
-
300
-
200
+ }
301
201
  var keys = Object.keys(nextProps);
302
-
303
202
  for (var ii = 0; ii < keys.length; ii++) {
304
203
  var key = keys[ii];
305
-
306
204
  if (key === '__relayContext') {
307
205
  if (this.state.prevPropsContext.environment !== nextState.prevPropsContext.environment) {
308
206
  return true;
@@ -313,67 +211,49 @@ function createContainerWithFragments(Component, fragments, taggedNode) {
313
211
  }
314
212
  }
315
213
  }
316
-
317
214
  return false;
318
215
  };
319
-
320
216
  _proto._rerenderIfStoreHasChanged = function _rerenderIfStoreHasChanged() {
321
217
  var _this$state = this.state,
322
- data = _this$state.data,
323
- resolver = _this$state.resolver; // External values could change between render and commit.
324
- // Check for this case, even though it requires an extra store read.
325
-
218
+ data = _this$state.data,
219
+ resolver = _this$state.resolver;
326
220
  var maybeNewData = resolver.resolve();
327
-
328
221
  if (data !== maybeNewData) {
329
222
  this.setState({
330
223
  data: maybeNewData
331
224
  });
332
225
  }
333
226
  };
334
-
335
227
  _proto._subscribeToNewResolverAndRerenderIfStoreHasChanged = function _subscribeToNewResolverAndRerenderIfStoreHasChanged() {
336
228
  var _this$state2 = this.state,
337
- data = _this$state2.data,
338
- resolver = _this$state2.resolver;
339
- var maybeNewData = resolver.resolve(); // Event listeners are only safe to add during the commit phase,
340
- // So they won't leak if render is interrupted or errors.
341
-
342
- resolver.setCallback(this.props, this._handleFragmentDataUpdate); // External values could change between render and commit.
343
- // Check for this case, even though it requires an extra store read.
344
-
229
+ data = _this$state2.data,
230
+ resolver = _this$state2.resolver;
231
+ var maybeNewData = resolver.resolve();
232
+ resolver.setCallback(this.props, this._handleFragmentDataUpdate);
345
233
  if (data !== maybeNewData) {
346
234
  this.setState({
347
235
  data: maybeNewData
348
236
  });
349
237
  }
350
- }
351
- /**
352
- * Render new data for the existing props/context.
353
- */
354
- ;
355
-
238
+ };
356
239
  _proto._getFragmentVariables = function _getFragmentVariables() {
357
240
  return getVariablesFromObject(fragments, this.props);
358
241
  };
359
-
360
242
  _proto._getQueryFetcher = function _getQueryFetcher() {
361
243
  if (!this._queryFetcher) {
362
244
  this._queryFetcher = new ReactRelayQueryFetcher();
363
245
  }
364
-
365
246
  return this._queryFetcher;
366
247
  };
367
-
368
248
  _proto.render = function render() {
369
249
  var _this$props = this.props,
370
- componentRef = _this$props.componentRef,
371
- __relayContext = _this$props.__relayContext,
372
- __rootIsQueryRenderer = _this$props.__rootIsQueryRenderer,
373
- props = (0, _objectWithoutPropertiesLoose2["default"])(_this$props, _excluded);
250
+ componentRef = _this$props.componentRef,
251
+ __relayContext = _this$props.__relayContext,
252
+ __rootIsQueryRenderer = _this$props.__rootIsQueryRenderer,
253
+ props = (0, _objectWithoutPropertiesLoose2["default"])(_this$props, _excluded);
374
254
  var _this$state3 = this.state,
375
- relayProp = _this$state3.relayProp,
376
- contextForChildren = _this$state3.contextForChildren;
255
+ relayProp = _this$state3.relayProp,
256
+ contextForChildren = _this$state3.contextForChildren;
377
257
  return /*#__PURE__*/React.createElement(ReactRelayContext.Provider, {
378
258
  value: contextForChildren
379
259
  }, /*#__PURE__*/React.createElement(Component, (0, _extends2["default"])({}, props, this.state.data, {
@@ -381,33 +261,20 @@ function createContainerWithFragments(Component, fragments, taggedNode) {
381
261
  relay: relayProp
382
262
  })));
383
263
  };
384
-
385
264
  return _class;
386
265
  }(React.Component), (0, _defineProperty2["default"])(_class, "displayName", containerName), _class;
387
266
  }
388
-
389
267
  function getRelayProp(environment, refetch) {
390
268
  return {
391
269
  environment: environment,
392
270
  refetch: refetch
393
271
  };
394
272
  }
395
- /**
396
- * Wrap the basic `createContainer()` function with logic to adapt to the
397
- * `context.relay.environment` in which it is rendered. Specifically, the
398
- * extraction of the environment-specific version of fragments in the
399
- * `fragmentSpec` is memoized once per environment, rather than once per
400
- * instance of the container constructed/rendered.
401
- */
402
-
403
-
404
273
  function createContainer(Component, fragmentSpec, taggedNode) {
405
- // $FlowFixMe[incompatible-return]
406
274
  return buildReactRelayContainer(Component, fragmentSpec, function (ComponentClass, fragments) {
407
275
  return createContainerWithFragments(ComponentClass, fragments, taggedNode);
408
276
  });
409
277
  }
410
-
411
278
  module.exports = {
412
279
  createContainer: createContainer
413
280
  };