react-relay 14.0.0 → 15.0.0

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