react-relay 14.1.0 → 16.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
  };