react-relay 20.1.0 → 21.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.
- package/ReactRelayContext.js +1 -1
- package/ReactRelayContext.js.flow +2 -2
- package/ReactRelayFragmentContainer.js.flow +9 -10
- package/ReactRelayLocalQueryRenderer.js.flow +11 -3
- package/ReactRelayLoggingContext.js.flow +3 -3
- package/ReactRelayPaginationContainer.js.flow +32 -25
- package/ReactRelayQueryFetcher.js.flow +1 -1
- package/ReactRelayQueryRenderer.js.flow +2 -2
- package/ReactRelayQueryRendererContext.js.flow +2 -2
- package/ReactRelayRefetchContainer.js.flow +18 -15
- package/ReactRelayTestMocker.js.flow +10 -10
- package/ReactRelayTypes.js.flow +18 -20
- package/RelayContext.js.flow +3 -3
- package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +11 -11
- package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +5 -5
- package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +5 -5
- package/__flowtests__/RelayModern-flowtest.js.flow +24 -27
- package/__flowtests__/RelayModernFlowtest_users.graphql.js.flow +1 -1
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow +3 -4
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +3 -4
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +9 -10
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +4 -5
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +9 -10
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +4 -5
- package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +3 -4
- package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +3 -4
- package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +3 -4
- package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +5 -6
- package/buildReactRelayContainer.js.flow +4 -4
- package/getRootVariablesForFragments.js.flow +3 -3
- package/hooks.js +1 -1
- package/hooks.js.flow +23 -8
- package/index.js +1 -1
- package/index.js.flow +40 -14
- package/isRelayEnvironment.js.flow +1 -1
- package/jest-react/internalAct.js.flow +1 -1
- package/legacy.js +1 -1
- package/legacy.js.flow +32 -13
- package/lib/ReactRelayFragmentContainer.js +1 -1
- package/lib/ReactRelayPaginationContainer.js +8 -8
- package/lib/ReactRelayRefetchContainer.js +8 -8
- package/lib/ReactRelayTestMocker.js +5 -5
- package/lib/hooks.js +18 -8
- package/lib/index.js +30 -14
- package/lib/legacy.js +26 -13
- package/lib/relay-hooks/legacy/useBlockingPaginationFragment.js +5 -5
- package/lib/relay-hooks/legacy/useRefetchableFragmentNode.js +34 -34
- package/lib/relay-hooks/loadEntryPoint.js +2 -2
- package/lib/relay-hooks/loadQuery.js +14 -14
- package/lib/relay-hooks/preloadQuery_DEPRECATED.js +10 -10
- package/lib/relay-hooks/readFragmentInternal.js +6 -6
- package/lib/relay-hooks/rsc/serverFetchQuery.js +20 -0
- package/lib/relay-hooks/rsc/serverPreloadQuery.js +31 -0
- package/lib/relay-hooks/rsc/serverReadFragment.js +15 -0
- package/lib/relay-hooks/rsc/useQueryFromServer.js +62 -0
- package/lib/relay-hooks/useFragmentInternal_CURRENT.js +49 -25
- package/lib/relay-hooks/useFragmentInternal_EXPERIMENTAL.js +81 -44
- package/lib/relay-hooks/useLazyLoadQueryNode.js +32 -19
- package/lib/relay-hooks/useMutation.js +6 -14
- package/lib/relay-hooks/useMutationAction_EXPERIMENTAL.js +26 -0
- package/lib/relay-hooks/usePreloadedQuery.js +52 -47
- package/lib/relay-hooks/useQueryLoader.js +2 -2
- package/lib/relay-hooks/useQueryLoader_EXPERIMENTAL.js +2 -2
- package/lib/relay-hooks/useRefetchableFragmentInternal.js +31 -31
- package/lib/rsc-client_EXPERIMENTAL.js +7 -0
- package/lib/rsc_EXPERIMENTAL.js +43 -0
- package/multi-actor/ActorChange.js.flow +1 -1
- package/package.json +3 -2
- package/relay-hooks/EntryPointContainer.react.js.flow +6 -6
- package/relay-hooks/EntryPointTypes.flow.js.flow +61 -67
- package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +23 -21
- package/relay-hooks/MatchContainer.js.flow +12 -6
- package/relay-hooks/NestedRelayEntryPointBuilderUtils.js.flow +3 -9
- package/relay-hooks/QueryResource.js.flow +6 -6
- package/relay-hooks/RelayEnvironmentProvider.js.flow +2 -2
- package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +6 -6
- package/relay-hooks/__flowtests__/EntryPointTypes/ExtractQueryTypes-flowtest.js.flow +48 -1
- package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +9 -9
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +3 -4
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +5 -6
- package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +27 -32
- package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +25 -25
- package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +26 -32
- package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +23 -30
- package/relay-hooks/__flowtests__/utils.js.flow +4 -4
- package/relay-hooks/getConnectionState.js.flow +4 -4
- package/relay-hooks/legacy/FragmentResource.js.flow +13 -13
- package/relay-hooks/legacy/useBlockingPaginationFragment.js.flow +24 -25
- package/relay-hooks/legacy/useFragmentNode.js.flow +4 -4
- package/relay-hooks/legacy/useRefetchableFragmentNode.js.flow +79 -81
- package/relay-hooks/loadEntryPoint.js.flow +16 -14
- package/relay-hooks/loadQuery.js.flow +18 -18
- package/relay-hooks/preloadQuery_DEPRECATED.js.flow +16 -13
- package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +7 -7
- package/relay-hooks/readFragmentInternal.js.flow +9 -9
- package/relay-hooks/rsc/serverFetchQuery.js.flow +31 -0
- package/relay-hooks/rsc/serverPreloadQuery.js.flow +69 -0
- package/relay-hooks/rsc/serverReadFragment.js.flow +33 -0
- package/relay-hooks/rsc/useQueryFromServer.js.flow +135 -0
- package/relay-hooks/useClientQuery.js.flow +2 -2
- package/relay-hooks/useEntryPointLoader.js.flow +11 -11
- package/relay-hooks/useFragment.js.flow +7 -7
- package/relay-hooks/useFragmentInternal.js.flow +1 -1
- package/relay-hooks/useFragmentInternal_CURRENT.js.flow +54 -22
- package/relay-hooks/useFragmentInternal_EXPERIMENTAL.js.flow +95 -46
- package/relay-hooks/useIsOperationNodeActive.js.flow +1 -1
- package/relay-hooks/useIsParentQueryActive.js.flow +1 -1
- package/relay-hooks/useLazyLoadQuery.js.flow +10 -3
- package/relay-hooks/useLazyLoadQueryNode.js.flow +67 -28
- package/relay-hooks/useLoadMoreFunction.js.flow +7 -6
- package/relay-hooks/useLoadMoreFunction_EXPERIMENTAL.js.flow +5 -5
- package/relay-hooks/useMemoVariables.js.flow +1 -1
- package/relay-hooks/useMutation.js.flow +8 -16
- package/relay-hooks/useMutationAction_EXPERIMENTAL.js.flow +68 -0
- package/relay-hooks/usePaginationFragment.js.flow +15 -11
- package/relay-hooks/usePrefetchableForwardPaginationFragment.js.flow +19 -18
- package/relay-hooks/usePrefetchableForwardPaginationFragment_EXPERIMENTAL.js.flow +19 -18
- package/relay-hooks/usePreloadedQuery.js.flow +119 -85
- package/relay-hooks/useQueryLoader.js.flow +27 -23
- package/relay-hooks/useQueryLoader_EXPERIMENTAL.js.flow +10 -10
- package/relay-hooks/useRefetchableFragment.js.flow +16 -11
- package/relay-hooks/useRefetchableFragmentInternal.js.flow +77 -79
- package/relay-hooks/useRelayLoggingContext.js.flow +1 -1
- package/relay-hooks/useSubscribeToInvalidationState.js.flow +1 -1
- package/relay-hooks/useSubscription.js.flow +1 -1
- package/rsc-client_EXPERIMENTAL.js +10 -0
- package/rsc-client_EXPERIMENTAL.js.flow +23 -0
- package/rsc_EXPERIMENTAL.js +10 -0
- package/rsc_EXPERIMENTAL.js.flow +90 -0
|
@@ -146,17 +146,17 @@ function handleMissedUpdates(environment, state) {
|
|
|
146
146
|
var updatedData = recycleNodesInto(state.snapshot.data, currentSnapshot.data);
|
|
147
147
|
var updatedCurrentSnapshot = {
|
|
148
148
|
data: updatedData,
|
|
149
|
+
fieldErrors: currentSnapshot.fieldErrors,
|
|
149
150
|
isMissingData: currentSnapshot.isMissingData,
|
|
150
151
|
missingClientEdges: currentSnapshot.missingClientEdges,
|
|
151
152
|
missingLiveResolverFields: currentSnapshot.missingLiveResolverFields,
|
|
152
153
|
seenRecords: currentSnapshot.seenRecords,
|
|
153
|
-
selector: currentSnapshot.selector
|
|
154
|
-
fieldErrors: currentSnapshot.fieldErrors
|
|
154
|
+
selector: currentSnapshot.selector
|
|
155
155
|
};
|
|
156
156
|
return [updatedData !== state.snapshot.data, {
|
|
157
|
+
epoch: currentEpoch,
|
|
157
158
|
kind: 'singular',
|
|
158
|
-
snapshot: updatedCurrentSnapshot
|
|
159
|
-
epoch: currentEpoch
|
|
159
|
+
snapshot: updatedCurrentSnapshot
|
|
160
160
|
}];
|
|
161
161
|
} else {
|
|
162
162
|
var didMissUpdates = false;
|
|
@@ -167,12 +167,12 @@ function handleMissedUpdates(environment, state) {
|
|
|
167
167
|
var _updatedData = recycleNodesInto(snapshot.data, _currentSnapshot.data);
|
|
168
168
|
var _updatedCurrentSnapshot = {
|
|
169
169
|
data: _updatedData,
|
|
170
|
+
fieldErrors: _currentSnapshot.fieldErrors,
|
|
170
171
|
isMissingData: _currentSnapshot.isMissingData,
|
|
171
172
|
missingClientEdges: _currentSnapshot.missingClientEdges,
|
|
172
173
|
missingLiveResolverFields: _currentSnapshot.missingLiveResolverFields,
|
|
173
174
|
seenRecords: _currentSnapshot.seenRecords,
|
|
174
|
-
selector: _currentSnapshot.selector
|
|
175
|
-
fieldErrors: _currentSnapshot.fieldErrors
|
|
175
|
+
selector: _currentSnapshot.selector
|
|
176
176
|
};
|
|
177
177
|
if (_updatedData !== snapshot.data) {
|
|
178
178
|
didMissUpdates = true;
|
|
@@ -181,9 +181,9 @@ function handleMissedUpdates(environment, state) {
|
|
|
181
181
|
}
|
|
182
182
|
!(currentSnapshots.length === state.snapshots.length) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Expected same number of snapshots') : invariant(false) : void 0;
|
|
183
183
|
return [didMissUpdates, {
|
|
184
|
+
epoch: currentEpoch,
|
|
184
185
|
kind: 'plural',
|
|
185
|
-
snapshots: currentSnapshots
|
|
186
|
-
epoch: currentEpoch
|
|
186
|
+
snapshots: currentSnapshots
|
|
187
187
|
}];
|
|
188
188
|
}
|
|
189
189
|
}
|
|
@@ -209,8 +209,8 @@ function subscribeToSnapshot(environment, state, setState, hasPendingStateChange
|
|
|
209
209
|
var dataChanged = updates[0],
|
|
210
210
|
nextState = updates[1];
|
|
211
211
|
environment.__log({
|
|
212
|
-
|
|
213
|
-
|
|
212
|
+
hasDataChanges: dataChanged,
|
|
213
|
+
name: 'useFragment.subscription.missedUpdates'
|
|
214
214
|
});
|
|
215
215
|
hasPendingStateChanges.current = dataChanged;
|
|
216
216
|
return dataChanged ? nextState : prevState;
|
|
@@ -220,9 +220,9 @@ function subscribeToSnapshot(environment, state, setState, hasPendingStateChange
|
|
|
220
220
|
}
|
|
221
221
|
hasPendingStateChanges.current = true;
|
|
222
222
|
return {
|
|
223
|
+
epoch: environment.getStore().getEpoch(),
|
|
223
224
|
kind: 'singular',
|
|
224
|
-
snapshot: latestSnapshot
|
|
225
|
-
epoch: environment.getStore().getEpoch()
|
|
225
|
+
snapshot: latestSnapshot
|
|
226
226
|
};
|
|
227
227
|
});
|
|
228
228
|
});
|
|
@@ -240,8 +240,8 @@ function subscribeToSnapshot(environment, state, setState, hasPendingStateChange
|
|
|
240
240
|
var dataChanged = updates[0],
|
|
241
241
|
nextState = updates[1];
|
|
242
242
|
environment.__log({
|
|
243
|
-
|
|
244
|
-
|
|
243
|
+
hasDataChanges: dataChanged,
|
|
244
|
+
name: 'useFragment.subscription.missedUpdates'
|
|
245
245
|
});
|
|
246
246
|
hasPendingStateChanges.current = hasPendingStateChanges.current || dataChanged;
|
|
247
247
|
return dataChanged ? nextState : prevState;
|
|
@@ -253,9 +253,9 @@ function subscribeToSnapshot(environment, state, setState, hasPendingStateChange
|
|
|
253
253
|
updated[index] = latestSnapshot;
|
|
254
254
|
hasPendingStateChanges.current = true;
|
|
255
255
|
return {
|
|
256
|
+
epoch: environment.getStore().getEpoch(),
|
|
256
257
|
kind: 'plural',
|
|
257
|
-
snapshots: updated
|
|
258
|
-
epoch: environment.getStore().getEpoch()
|
|
258
|
+
snapshots: updated
|
|
259
259
|
};
|
|
260
260
|
});
|
|
261
261
|
});
|
|
@@ -283,17 +283,17 @@ function getFragmentState(environment, fragmentSelector) {
|
|
|
283
283
|
};
|
|
284
284
|
} else if (fragmentSelector.kind === 'PluralReaderSelector') {
|
|
285
285
|
return {
|
|
286
|
+
epoch: environment.getStore().getEpoch(),
|
|
286
287
|
kind: 'plural',
|
|
287
288
|
snapshots: fragmentSelector.selectors.map(function (s) {
|
|
288
289
|
return environment.lookup(s);
|
|
289
|
-
})
|
|
290
|
-
epoch: environment.getStore().getEpoch()
|
|
290
|
+
})
|
|
291
291
|
};
|
|
292
292
|
} else {
|
|
293
293
|
return {
|
|
294
|
+
epoch: environment.getStore().getEpoch(),
|
|
294
295
|
kind: 'singular',
|
|
295
|
-
snapshot: environment.lookup(fragmentSelector)
|
|
296
|
-
epoch: environment.getStore().getEpoch()
|
|
296
|
+
snapshot: environment.lookup(fragmentSelector)
|
|
297
297
|
};
|
|
298
298
|
}
|
|
299
299
|
}
|
|
@@ -374,6 +374,14 @@ function useFragmentInternal(fragmentNode, fragmentRef, hookDisplayName, queryOp
|
|
|
374
374
|
clientEdgeQueries = _useMemo[0],
|
|
375
375
|
activeRequestPromises = _useMemo[1];
|
|
376
376
|
if (activeRequestPromises.length) {
|
|
377
|
+
!(fragmentSelector != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'refinement, see invariants above') : invariant(false) : void 0;
|
|
378
|
+
var fragmentOwner = fragmentSelector.kind === 'PluralReaderSelector' ? fragmentSelector.selectors[0].owner : fragmentSelector.owner;
|
|
379
|
+
environment.__log({
|
|
380
|
+
name: 'suspense.client_edge',
|
|
381
|
+
fragment: fragmentNode,
|
|
382
|
+
fragmentOwner: fragmentOwner,
|
|
383
|
+
isMount: committedFragmentSelectorRef.current === false
|
|
384
|
+
});
|
|
377
385
|
throw Promise.all(activeRequestPromises);
|
|
378
386
|
}
|
|
379
387
|
useEffect(function () {
|
|
@@ -404,15 +412,31 @@ function useFragmentInternal(fragmentNode, fragmentRef, hookDisplayName, queryOp
|
|
|
404
412
|
if (isMissingData(state)) {
|
|
405
413
|
var suspendingLiveResolvers = getSuspendingLiveResolver(state);
|
|
406
414
|
if (suspendingLiveResolvers != null && suspendingLiveResolvers.length > 0) {
|
|
415
|
+
!(fragmentSelector != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'refinement, see invariants above') : invariant(false) : void 0;
|
|
416
|
+
var _fragmentOwner = fragmentSelector.kind === 'PluralReaderSelector' ? fragmentSelector.selectors[0].owner : fragmentSelector.owner;
|
|
417
|
+
environment.__log({
|
|
418
|
+
name: 'suspense.resolver',
|
|
419
|
+
fragment: fragmentNode,
|
|
420
|
+
fragmentOwner: _fragmentOwner,
|
|
421
|
+
isMount: committedFragmentSelectorRef.current === false,
|
|
422
|
+
suspendingLiveResolvers: suspendingLiveResolvers
|
|
423
|
+
});
|
|
407
424
|
throw Promise.all(suspendingLiveResolvers.map(function (liveStateID) {
|
|
408
425
|
return environment.getStore().getLiveResolverPromise(liveStateID);
|
|
409
426
|
}));
|
|
410
427
|
}
|
|
411
|
-
if (RelayFeatureFlags.ENABLE_RELAY_OPERATION_TRACKER_SUSPENSE || environment !== previousEnvironment ||
|
|
428
|
+
if (RelayFeatureFlags.ENABLE_RELAY_OPERATION_TRACKER_SUSPENSE || environment !== previousEnvironment || committedFragmentSelectorRef.current === false || !areEqualSelectors(committedFragmentSelectorRef.current, fragmentSelector)) {
|
|
412
429
|
!(fragmentSelector != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'refinement, see invariants above') : invariant(false) : void 0;
|
|
413
|
-
var
|
|
414
|
-
var pendingOperationsResult = getPendingOperationsForFragment(environment, fragmentNode,
|
|
430
|
+
var _fragmentOwner2 = fragmentSelector.kind === 'PluralReaderSelector' ? fragmentSelector.selectors[0].owner : fragmentSelector.owner;
|
|
431
|
+
var pendingOperationsResult = getPendingOperationsForFragment(environment, fragmentNode, _fragmentOwner2);
|
|
415
432
|
if (pendingOperationsResult) {
|
|
433
|
+
environment.__log({
|
|
434
|
+
name: 'suspense.missing_data',
|
|
435
|
+
fragment: fragmentNode,
|
|
436
|
+
fragmentOwner: _fragmentOwner2,
|
|
437
|
+
isMount: committedFragmentSelectorRef.current === false,
|
|
438
|
+
pendingOperations: pendingOperationsResult.pendingOperations
|
|
439
|
+
});
|
|
416
440
|
throw pendingOperationsResult.promise;
|
|
417
441
|
}
|
|
418
442
|
}
|
|
@@ -472,8 +496,8 @@ function useFragmentInternal(fragmentNode, fragmentRef, hookDisplayName, queryOp
|
|
|
472
496
|
}
|
|
473
497
|
if (process.env.NODE_ENV !== "production") {
|
|
474
498
|
useDebugValue({
|
|
475
|
-
|
|
476
|
-
|
|
499
|
+
data: data,
|
|
500
|
+
fragment: fragmentNode.name
|
|
477
501
|
});
|
|
478
502
|
}
|
|
479
503
|
return data;
|
|
@@ -146,19 +146,19 @@ function handleMissedUpdates(environment, state) {
|
|
|
146
146
|
var updatedData = recycleNodesInto(state.snapshot.data, currentSnapshot.data);
|
|
147
147
|
var updatedCurrentSnapshot = {
|
|
148
148
|
data: updatedData,
|
|
149
|
+
fieldErrors: currentSnapshot.fieldErrors,
|
|
149
150
|
isMissingData: currentSnapshot.isMissingData,
|
|
150
151
|
missingClientEdges: currentSnapshot.missingClientEdges,
|
|
151
152
|
missingLiveResolverFields: currentSnapshot.missingLiveResolverFields,
|
|
152
153
|
seenRecords: currentSnapshot.seenRecords,
|
|
153
|
-
selector: currentSnapshot.selector
|
|
154
|
-
fieldErrors: currentSnapshot.fieldErrors
|
|
154
|
+
selector: currentSnapshot.selector
|
|
155
155
|
};
|
|
156
156
|
return [updatedData !== state.snapshot.data, {
|
|
157
|
-
|
|
158
|
-
snapshot: updatedCurrentSnapshot,
|
|
157
|
+
environment: state.environment,
|
|
159
158
|
epoch: currentEpoch,
|
|
159
|
+
kind: 'singular',
|
|
160
160
|
selector: state.selector,
|
|
161
|
-
|
|
161
|
+
snapshot: updatedCurrentSnapshot
|
|
162
162
|
}];
|
|
163
163
|
} else {
|
|
164
164
|
var didMissUpdates = false;
|
|
@@ -169,12 +169,12 @@ function handleMissedUpdates(environment, state) {
|
|
|
169
169
|
var _updatedData = recycleNodesInto(snapshot.data, _currentSnapshot.data);
|
|
170
170
|
var _updatedCurrentSnapshot = {
|
|
171
171
|
data: _updatedData,
|
|
172
|
+
fieldErrors: _currentSnapshot.fieldErrors,
|
|
172
173
|
isMissingData: _currentSnapshot.isMissingData,
|
|
173
174
|
missingClientEdges: _currentSnapshot.missingClientEdges,
|
|
174
175
|
missingLiveResolverFields: _currentSnapshot.missingLiveResolverFields,
|
|
175
176
|
seenRecords: _currentSnapshot.seenRecords,
|
|
176
|
-
selector: _currentSnapshot.selector
|
|
177
|
-
fieldErrors: _currentSnapshot.fieldErrors
|
|
177
|
+
selector: _currentSnapshot.selector
|
|
178
178
|
};
|
|
179
179
|
if (_updatedData !== snapshot.data) {
|
|
180
180
|
didMissUpdates = true;
|
|
@@ -183,11 +183,11 @@ function handleMissedUpdates(environment, state) {
|
|
|
183
183
|
}
|
|
184
184
|
!(currentSnapshots.length === state.snapshots.length) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Expected same number of snapshots') : invariant(false) : void 0;
|
|
185
185
|
return [didMissUpdates, {
|
|
186
|
-
|
|
187
|
-
snapshots: currentSnapshots,
|
|
186
|
+
environment: state.environment,
|
|
188
187
|
epoch: currentEpoch,
|
|
188
|
+
kind: 'plural',
|
|
189
189
|
selector: state.selector,
|
|
190
|
-
|
|
190
|
+
snapshots: currentSnapshots
|
|
191
191
|
}];
|
|
192
192
|
}
|
|
193
193
|
}
|
|
@@ -218,8 +218,8 @@ function subscribeToSnapshot(environment, state, setState) {
|
|
|
218
218
|
var dataChanged = updates[0],
|
|
219
219
|
updatedState = updates[1];
|
|
220
220
|
environment.__log({
|
|
221
|
-
|
|
222
|
-
|
|
221
|
+
hasDataChanges: dataChanged,
|
|
222
|
+
name: 'useFragment.subscription.missedUpdates'
|
|
223
223
|
});
|
|
224
224
|
nextState = dataChanged ? updatedState : prevState;
|
|
225
225
|
} else {
|
|
@@ -227,11 +227,11 @@ function subscribeToSnapshot(environment, state, setState) {
|
|
|
227
227
|
}
|
|
228
228
|
} else {
|
|
229
229
|
nextState = {
|
|
230
|
-
|
|
231
|
-
snapshot: latestSnapshot,
|
|
230
|
+
environment: state.environment,
|
|
232
231
|
epoch: environment.getStore().getEpoch(),
|
|
232
|
+
kind: 'singular',
|
|
233
233
|
selector: state.selector,
|
|
234
|
-
|
|
234
|
+
snapshot: latestSnapshot
|
|
235
235
|
};
|
|
236
236
|
}
|
|
237
237
|
return nextState;
|
|
@@ -252,8 +252,8 @@ function subscribeToSnapshot(environment, state, setState) {
|
|
|
252
252
|
var dataChanged = updates[0],
|
|
253
253
|
updatedState = updates[1];
|
|
254
254
|
environment.__log({
|
|
255
|
-
|
|
256
|
-
|
|
255
|
+
hasDataChanges: dataChanged,
|
|
256
|
+
name: 'useFragment.subscription.missedUpdates'
|
|
257
257
|
});
|
|
258
258
|
nextState = dataChanged ? updatedState : prevState;
|
|
259
259
|
} else {
|
|
@@ -263,11 +263,11 @@ function subscribeToSnapshot(environment, state, setState) {
|
|
|
263
263
|
var updated = (0, _toConsumableArray2["default"])(prevState.snapshots);
|
|
264
264
|
updated[index] = latestSnapshot;
|
|
265
265
|
nextState = {
|
|
266
|
-
|
|
267
|
-
snapshots: updated,
|
|
266
|
+
environment: state.environment,
|
|
268
267
|
epoch: environment.getStore().getEpoch(),
|
|
268
|
+
kind: 'plural',
|
|
269
269
|
selector: state.selector,
|
|
270
|
-
|
|
270
|
+
snapshots: updated
|
|
271
271
|
};
|
|
272
272
|
}
|
|
273
273
|
return nextState;
|
|
@@ -293,26 +293,26 @@ function subscribeToSnapshot(environment, state, setState) {
|
|
|
293
293
|
function getFragmentState(environment, fragmentSelector) {
|
|
294
294
|
if (fragmentSelector == null) {
|
|
295
295
|
return {
|
|
296
|
-
|
|
297
|
-
|
|
296
|
+
environment: environment,
|
|
297
|
+
kind: 'bailout'
|
|
298
298
|
};
|
|
299
299
|
} else if (fragmentSelector.kind === 'PluralReaderSelector') {
|
|
300
300
|
return {
|
|
301
|
+
environment: environment,
|
|
302
|
+
epoch: environment.getStore().getEpoch(),
|
|
301
303
|
kind: 'plural',
|
|
304
|
+
selector: fragmentSelector,
|
|
302
305
|
snapshots: fragmentSelector.selectors.map(function (s) {
|
|
303
306
|
return environment.lookup(s);
|
|
304
|
-
})
|
|
305
|
-
epoch: environment.getStore().getEpoch(),
|
|
306
|
-
selector: fragmentSelector,
|
|
307
|
-
environment: environment
|
|
307
|
+
})
|
|
308
308
|
};
|
|
309
309
|
} else {
|
|
310
310
|
return {
|
|
311
|
-
|
|
312
|
-
snapshot: environment.lookup(fragmentSelector),
|
|
311
|
+
environment: environment,
|
|
313
312
|
epoch: environment.getStore().getEpoch(),
|
|
313
|
+
kind: 'singular',
|
|
314
314
|
selector: fragmentSelector,
|
|
315
|
-
|
|
315
|
+
snapshot: environment.lookup(fragmentSelector)
|
|
316
316
|
};
|
|
317
317
|
}
|
|
318
318
|
}
|
|
@@ -380,6 +380,14 @@ function useFragmentInternal_EXPERIMENTAL(fragmentNode, fragmentRef, hookDisplay
|
|
|
380
380
|
clientEdgeQueries = _useMemo[0],
|
|
381
381
|
activeRequestPromises = _useMemo[1];
|
|
382
382
|
if (activeRequestPromises.length) {
|
|
383
|
+
!(fragmentSelector != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'refinement, see invariants above') : invariant(false) : void 0;
|
|
384
|
+
var fragmentOwner = fragmentSelector.kind === 'PluralReaderSelector' ? fragmentSelector.selectors[0].owner : fragmentSelector.owner;
|
|
385
|
+
environment.__log({
|
|
386
|
+
name: 'suspense.client_edge',
|
|
387
|
+
fragment: fragmentNode,
|
|
388
|
+
fragmentOwner: fragmentOwner,
|
|
389
|
+
isMount: committedFragmentSelectorRef.current === false
|
|
390
|
+
});
|
|
383
391
|
var allPromises = Promise.all(activeRequestPromises);
|
|
384
392
|
allPromises.displayName = "RelayClientEdge(".concat(activeRequestPromises.map(function (promise) {
|
|
385
393
|
return promise.displayName;
|
|
@@ -414,30 +422,51 @@ function useFragmentInternal_EXPERIMENTAL(fragmentNode, fragmentRef, hookDisplay
|
|
|
414
422
|
if (isMissingData(state)) {
|
|
415
423
|
var suspendingLiveResolvers = getSuspendingLiveResolver(state);
|
|
416
424
|
if (suspendingLiveResolvers != null && suspendingLiveResolvers.length > 0) {
|
|
425
|
+
!(fragmentSelector != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'refinement, see invariants above') : invariant(false) : void 0;
|
|
426
|
+
var _fragmentOwner = fragmentSelector.kind === 'PluralReaderSelector' ? fragmentSelector.selectors[0].owner : fragmentSelector.owner;
|
|
427
|
+
environment.__log({
|
|
428
|
+
name: 'suspense.resolver',
|
|
429
|
+
fragment: fragmentNode,
|
|
430
|
+
fragmentOwner: _fragmentOwner,
|
|
431
|
+
isMount: committedFragmentSelectorRef.current === false,
|
|
432
|
+
suspendingLiveResolvers: suspendingLiveResolvers
|
|
433
|
+
});
|
|
417
434
|
var promise = Promise.all(suspendingLiveResolvers.map(function (liveStateID) {
|
|
418
435
|
return environment.getStore().getLiveResolverPromise(liveStateID);
|
|
419
436
|
}));
|
|
420
437
|
promise.displayName = 'RelayLiveResolver(' + fragmentNode.name + ')';
|
|
421
438
|
throw promise;
|
|
422
439
|
}
|
|
423
|
-
if (RelayFeatureFlags.ENABLE_RELAY_OPERATION_TRACKER_SUSPENSE || environment !== previousEnvironment ||
|
|
440
|
+
if (RelayFeatureFlags.ENABLE_RELAY_OPERATION_TRACKER_SUSPENSE || environment !== previousEnvironment || committedFragmentSelectorRef.current === false || !areEqualSelectors(committedFragmentSelectorRef.current, fragmentSelector)) {
|
|
424
441
|
!(fragmentSelector != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'refinement, see invariants above') : invariant(false) : void 0;
|
|
425
|
-
var
|
|
426
|
-
var pendingOperationsResult = getPendingOperationsForFragment(environment, fragmentNode,
|
|
442
|
+
var _fragmentOwner2 = fragmentSelector.kind === 'PluralReaderSelector' ? fragmentSelector.selectors[0].owner : fragmentSelector.owner;
|
|
443
|
+
var pendingOperationsResult = getPendingOperationsForFragment(environment, fragmentNode, _fragmentOwner2);
|
|
427
444
|
if (pendingOperationsResult) {
|
|
445
|
+
environment.__log({
|
|
446
|
+
name: 'suspense.missing_data',
|
|
447
|
+
fragment: fragmentNode,
|
|
448
|
+
fragmentOwner: _fragmentOwner2,
|
|
449
|
+
isMount: committedFragmentSelectorRef.current === false,
|
|
450
|
+
pendingOperations: pendingOperationsResult.pendingOperations
|
|
451
|
+
});
|
|
428
452
|
throw pendingOperationsResult.promise;
|
|
429
453
|
}
|
|
430
454
|
}
|
|
431
455
|
}
|
|
432
456
|
handlePotentialSnapshotErrorsForState(environment, state, loggerContext);
|
|
433
|
-
var storeSubscriptionRef = useRef(
|
|
457
|
+
var storeSubscriptionRef = useRef({
|
|
458
|
+
kind: 'uninitialized'
|
|
459
|
+
});
|
|
434
460
|
useEffect(function () {
|
|
435
461
|
var storeSubscription = storeSubscriptionRef.current;
|
|
436
|
-
if (storeSubscription
|
|
462
|
+
if (storeSubscription.kind === 'initialized') {
|
|
437
463
|
if (state.environment === storeSubscription.environment && state.selector === storeSubscription.selector) {
|
|
438
464
|
return;
|
|
439
465
|
} else {
|
|
440
466
|
storeSubscription.dispose();
|
|
467
|
+
storeSubscriptionRef.current = {
|
|
468
|
+
kind: 'uninitialized'
|
|
469
|
+
};
|
|
441
470
|
}
|
|
442
471
|
}
|
|
443
472
|
if (state.kind === 'bailout') {
|
|
@@ -450,6 +479,9 @@ function useFragmentInternal_EXPERIMENTAL(fragmentNode, fragmentRef, hookDisplay
|
|
|
450
479
|
updatedState = updates[1];
|
|
451
480
|
if (didMissUpdates) {
|
|
452
481
|
setState(updatedState);
|
|
482
|
+
storeSubscriptionRef.current = {
|
|
483
|
+
kind: 'missed-updates'
|
|
484
|
+
};
|
|
453
485
|
return;
|
|
454
486
|
}
|
|
455
487
|
stateForSubscription = updatedState;
|
|
@@ -457,23 +489,28 @@ function useFragmentInternal_EXPERIMENTAL(fragmentNode, fragmentRef, hookDisplay
|
|
|
457
489
|
var dispose = subscribeToSnapshot(state.environment, stateForSubscription, setState);
|
|
458
490
|
storeSubscriptionRef.current = {
|
|
459
491
|
dispose: dispose,
|
|
460
|
-
|
|
461
|
-
|
|
492
|
+
environment: state.environment,
|
|
493
|
+
kind: 'initialized',
|
|
494
|
+
selector: state.selector
|
|
462
495
|
};
|
|
463
496
|
}, [state]);
|
|
464
497
|
useEffect(function () {
|
|
465
|
-
if (storeSubscriptionRef.current
|
|
498
|
+
if (storeSubscriptionRef.current.kind === 'uninitialized' && state.kind !== 'bailout') {
|
|
466
499
|
var dispose = subscribeToSnapshot(state.environment, state, setState);
|
|
467
500
|
storeSubscriptionRef.current = {
|
|
468
501
|
dispose: dispose,
|
|
469
|
-
|
|
470
|
-
|
|
502
|
+
environment: state.environment,
|
|
503
|
+
kind: 'initialized',
|
|
504
|
+
selector: state.selector
|
|
471
505
|
};
|
|
472
506
|
}
|
|
473
507
|
return function () {
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
508
|
+
if (storeSubscriptionRef.current.kind === 'initialized') {
|
|
509
|
+
storeSubscriptionRef.current.dispose();
|
|
510
|
+
}
|
|
511
|
+
storeSubscriptionRef.current = {
|
|
512
|
+
kind: 'uninitialized'
|
|
513
|
+
};
|
|
477
514
|
};
|
|
478
515
|
}, []);
|
|
479
516
|
var data;
|
|
@@ -504,8 +541,8 @@ function useFragmentInternal_EXPERIMENTAL(fragmentNode, fragmentRef, hookDisplay
|
|
|
504
541
|
}
|
|
505
542
|
if (process.env.NODE_ENV !== "production") {
|
|
506
543
|
useDebugValue({
|
|
507
|
-
|
|
508
|
-
|
|
544
|
+
data: data,
|
|
545
|
+
fragment: fragmentNode.name
|
|
509
546
|
});
|
|
510
547
|
}
|
|
511
548
|
return data;
|
|
@@ -12,13 +12,8 @@ var useContext = React.useContext,
|
|
|
12
12
|
useEffect = React.useEffect,
|
|
13
13
|
useState = React.useState,
|
|
14
14
|
useRef = React.useRef;
|
|
15
|
-
function useLazyLoadQueryNode(
|
|
16
|
-
var
|
|
17
|
-
componentDisplayName = _ref.componentDisplayName,
|
|
18
|
-
fetchObservable = _ref.fetchObservable,
|
|
19
|
-
fetchPolicy = _ref.fetchPolicy,
|
|
20
|
-
fetchKey = _ref.fetchKey,
|
|
21
|
-
renderPolicy = _ref.renderPolicy;
|
|
15
|
+
function useLazyLoadQueryNode(params) {
|
|
16
|
+
var _preparedQueryResult;
|
|
22
17
|
var environment = useRelayEnvironment();
|
|
23
18
|
var profilerContext = useContext(ProfilerContext);
|
|
24
19
|
var QueryResource = getQueryResourceForEnvironment(environment);
|
|
@@ -28,15 +23,29 @@ function useLazyLoadQueryNode(_ref) {
|
|
|
28
23
|
var _useFetchTrackingRef = useFetchTrackingRef(),
|
|
29
24
|
startFetch = _useFetchTrackingRef.startFetch,
|
|
30
25
|
completeFetch = _useFetchTrackingRef.completeFetch;
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
26
|
+
var cacheIdentifier = null;
|
|
27
|
+
var preparedQueryResult = null;
|
|
28
|
+
var fragmentNode;
|
|
29
|
+
if (params.query != null) {
|
|
30
|
+
var query = params.query,
|
|
31
|
+
fetchObservable = params.fetchObservable,
|
|
32
|
+
fetchPolicy = params.fetchPolicy,
|
|
33
|
+
fetchKey = params.fetchKey,
|
|
34
|
+
renderPolicy = params.renderPolicy;
|
|
35
|
+
var cacheBreaker = "".concat(forceUpdateKey, "-").concat(fetchKey !== null && fetchKey !== void 0 ? fetchKey : '');
|
|
36
|
+
var queryCacheIdentifier = getQueryCacheIdentifier(environment, query, fetchPolicy, renderPolicy, cacheBreaker);
|
|
37
|
+
cacheIdentifier = queryCacheIdentifier;
|
|
38
|
+
preparedQueryResult = profilerContext.wrapPrepareQueryResource(function () {
|
|
39
|
+
return QueryResource.prepareWithIdentifier(queryCacheIdentifier, query, fetchObservable, fetchPolicy, renderPolicy, {
|
|
40
|
+
start: startFetch,
|
|
41
|
+
complete: completeFetch,
|
|
42
|
+
error: completeFetch
|
|
43
|
+
}, profilerContext);
|
|
44
|
+
});
|
|
45
|
+
fragmentNode = preparedQueryResult.fragmentNode;
|
|
46
|
+
} else {
|
|
47
|
+
fragmentNode = params.fragmentNode;
|
|
48
|
+
}
|
|
40
49
|
var maybeHiddenOrFastRefresh = useRef(false);
|
|
41
50
|
useEffect(function () {
|
|
42
51
|
return function () {
|
|
@@ -51,17 +60,21 @@ function useLazyLoadQueryNode(_ref) {
|
|
|
51
60
|
});
|
|
52
61
|
return;
|
|
53
62
|
}
|
|
63
|
+
if (preparedQueryResult == null) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
54
66
|
var disposable = QueryResource.retain(preparedQueryResult, profilerContext);
|
|
55
67
|
return function () {
|
|
56
68
|
disposable.dispose();
|
|
57
69
|
};
|
|
58
70
|
}, [environment, cacheIdentifier]);
|
|
59
71
|
useEffect(function () {
|
|
72
|
+
if (preparedQueryResult == null) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
60
75
|
QueryResource.releaseTemporaryRetain(preparedQueryResult);
|
|
61
76
|
});
|
|
62
|
-
var fragmentNode = preparedQueryResult.
|
|
63
|
-
fragmentRef = preparedQueryResult.fragmentRef;
|
|
64
|
-
var data = useFragmentInternal(fragmentNode, fragmentRef, componentDisplayName);
|
|
77
|
+
var data = useFragmentInternal(fragmentNode, (_preparedQueryResult = preparedQueryResult) === null || _preparedQueryResult === void 0 ? void 0 : _preparedQueryResult.fragmentRef, params.componentDisplayName);
|
|
65
78
|
return data;
|
|
66
79
|
}
|
|
67
80
|
module.exports = useLazyLoadQueryNode;
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
4
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
5
|
-
var useIsMountedRef = require('./useIsMountedRef');
|
|
6
5
|
var useRelayEnvironment = require('./useRelayEnvironment');
|
|
7
6
|
var React = require('react');
|
|
8
7
|
var _require = require('relay-runtime'),
|
|
@@ -14,7 +13,6 @@ var useState = React.useState,
|
|
|
14
13
|
function useMutation(mutation) {
|
|
15
14
|
var commitMutationFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultCommitMutation;
|
|
16
15
|
var environment = useRelayEnvironment();
|
|
17
|
-
var isMountedRef = useIsMountedRef();
|
|
18
16
|
var environmentRef = useRef(environment);
|
|
19
17
|
var mutationRef = useRef(mutation);
|
|
20
18
|
var inFlightMutationsRef = useRef(new Set());
|
|
@@ -24,25 +22,19 @@ function useMutation(mutation) {
|
|
|
24
22
|
var cleanup = useCallback(function (disposable) {
|
|
25
23
|
if (environmentRef.current === environment && mutationRef.current === mutation) {
|
|
26
24
|
inFlightMutationsRef.current["delete"](disposable);
|
|
27
|
-
|
|
28
|
-
setMutationInFlight(inFlightMutationsRef.current.size > 0);
|
|
29
|
-
}
|
|
25
|
+
setMutationInFlight(inFlightMutationsRef.current.size > 0);
|
|
30
26
|
}
|
|
31
|
-
}, [environment,
|
|
27
|
+
}, [environment, mutation]);
|
|
32
28
|
useEffect(function () {
|
|
33
29
|
if (environmentRef.current !== environment || mutationRef.current !== mutation) {
|
|
34
30
|
inFlightMutationsRef.current = new Set();
|
|
35
|
-
|
|
36
|
-
setMutationInFlight(false);
|
|
37
|
-
}
|
|
31
|
+
setMutationInFlight(false);
|
|
38
32
|
environmentRef.current = environment;
|
|
39
33
|
mutationRef.current = mutation;
|
|
40
34
|
}
|
|
41
|
-
}, [environment,
|
|
35
|
+
}, [environment, mutation]);
|
|
42
36
|
var commit = useCallback(function (config) {
|
|
43
|
-
|
|
44
|
-
setMutationInFlight(true);
|
|
45
|
-
}
|
|
37
|
+
setMutationInFlight(true);
|
|
46
38
|
var disposable = commitMutationFn(environment, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, config), {}, {
|
|
47
39
|
mutation: mutation,
|
|
48
40
|
onCompleted: function onCompleted(response, errors) {
|
|
@@ -67,7 +59,7 @@ function useMutation(mutation) {
|
|
|
67
59
|
}));
|
|
68
60
|
inFlightMutationsRef.current.add(disposable);
|
|
69
61
|
return disposable;
|
|
70
|
-
}, [cleanup, commitMutationFn, environment,
|
|
62
|
+
}, [cleanup, commitMutationFn, environment, mutation]);
|
|
71
63
|
return [commit, isMutationInFlight];
|
|
72
64
|
}
|
|
73
65
|
module.exports = useMutation;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var useRelayEnvironment = require('./useRelayEnvironment');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var _require = require('relay-runtime'),
|
|
6
|
+
commitMutation = _require.commitMutation;
|
|
7
|
+
var useCallback = React.useCallback;
|
|
8
|
+
function useMutationAction_EXPERIMENTAL(mutation) {
|
|
9
|
+
var environment = useRelayEnvironment();
|
|
10
|
+
var commitAction = useCallback(function (variables) {
|
|
11
|
+
return new Promise(function (resolve, reject) {
|
|
12
|
+
commitMutation(environment, {
|
|
13
|
+
mutation: mutation,
|
|
14
|
+
variables: variables,
|
|
15
|
+
onCompleted: function onCompleted(response) {
|
|
16
|
+
resolve(response);
|
|
17
|
+
},
|
|
18
|
+
onError: function onError(error) {
|
|
19
|
+
reject(error);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}, [environment, mutation]);
|
|
24
|
+
return commitAction;
|
|
25
|
+
}
|
|
26
|
+
module.exports = useMutationAction_EXPERIMENTAL;
|