react-relay 13.2.0 → 14.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/ReactRelayFragmentContainer.js.flow +7 -4
- package/ReactRelayPaginationContainer.js.flow +13 -8
- package/ReactRelayQueryFetcher.js.flow +1 -0
- package/ReactRelayQueryRenderer.js.flow +6 -2
- package/ReactRelayRefetchContainer.js.flow +10 -3
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow +2 -2
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +2 -2
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +3 -3
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +3 -3
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +3 -3
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +3 -3
- package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +2 -2
- package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +2 -2
- package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +2 -2
- package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +2 -2
- package/buildReactRelayContainer.js.flow +2 -2
- package/hooks.js +1 -1
- package/index.js +1 -1
- package/legacy.js +1 -1
- package/lib/ReactRelayQueryFetcher.js +1 -0
- package/lib/ReactRelayQueryRenderer.js +0 -1
- package/lib/readContext.js +2 -1
- package/lib/relay-hooks/FragmentResource.js +52 -10
- package/lib/relay-hooks/HooksImplementation.js +29 -0
- package/lib/relay-hooks/MatchContainer.js +1 -0
- package/lib/relay-hooks/QueryResource.js +2 -1
- package/lib/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js +203 -56
- package/lib/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js +254 -109
- package/lib/relay-hooks/react-cache/useFragment_REACT_CACHE.js +51 -0
- package/lib/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js +13 -2
- package/lib/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js +125 -0
- package/lib/relay-hooks/useFragment.js +15 -1
- package/lib/relay-hooks/useLazyLoadQuery.js +18 -2
- package/lib/relay-hooks/useMutation.js +4 -5
- package/lib/relay-hooks/usePreloadedQuery.js +18 -2
- package/package.json +2 -2
- package/react-relay-hooks.js +2 -2
- package/react-relay-hooks.min.js +2 -2
- package/react-relay-legacy.js +2 -2
- package/react-relay-legacy.min.js +2 -2
- package/react-relay.js +2 -2
- package/react-relay.min.js +2 -2
- package/readContext.js.flow +1 -0
- package/relay-hooks/FragmentResource.js.flow +55 -9
- package/relay-hooks/HooksImplementation.js.flow +45 -0
- package/relay-hooks/MatchContainer.js.flow +8 -1
- package/relay-hooks/QueryResource.js.flow +4 -2
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +2 -2
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +2 -2
- package/relay-hooks/loadQuery.js.flow +2 -1
- package/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js.flow +245 -64
- package/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js.flow +242 -99
- package/relay-hooks/react-cache/useFragment_REACT_CACHE.js.flow +74 -0
- package/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js.flow +10 -4
- package/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js.flow +153 -0
- package/relay-hooks/useFragment.js.flow +17 -10
- package/relay-hooks/useLazyLoadQuery.js.flow +38 -3
- package/relay-hooks/useMutation.js.flow +3 -3
- package/relay-hooks/usePreloadedQuery.js.flow +30 -2
- package/relay-hooks/useRefetchableFragmentNode.js.flow +26 -11
- package/relay-hooks/useSubscription.js.flow +14 -8
package/ReactRelayContext.js
CHANGED
@@ -11,11 +11,11 @@
|
|
11
11
|
// flowlint ambiguous-object-type:error
|
12
12
|
|
13
13
|
'use strict';
|
14
|
-
|
15
14
|
import type {GeneratedNodeMap, RelayProp, $RelayProps} from './ReactRelayTypes';
|
16
15
|
import type {
|
17
16
|
FragmentMap,
|
18
17
|
FragmentSpecResolver,
|
18
|
+
IEnvironment,
|
19
19
|
RelayContext,
|
20
20
|
} from 'relay-runtime';
|
21
21
|
|
@@ -58,7 +58,7 @@ function createContainerWithFragments<
|
|
58
58
|
|
59
59
|
return class extends React.Component<ContainerProps, ContainerState> {
|
60
60
|
static displayName = containerName;
|
61
|
-
constructor(props) {
|
61
|
+
constructor(props: $FlowFixMe) {
|
62
62
|
super(props);
|
63
63
|
const relayContext = assertRelayContext(props.__relayContext);
|
64
64
|
const rootIsQueryRenderer = props.__rootIsQueryRenderer ?? false;
|
@@ -163,7 +163,10 @@ function createContainerWithFragments<
|
|
163
163
|
this.state.resolver.dispose();
|
164
164
|
}
|
165
165
|
|
166
|
-
shouldComponentUpdate(
|
166
|
+
shouldComponentUpdate(
|
167
|
+
nextProps: ContainerProps,
|
168
|
+
nextState: ContainerState,
|
169
|
+
): boolean {
|
167
170
|
// Short-circuit if any Relay-related data has changed
|
168
171
|
if (nextState.data !== this.state.data) {
|
169
172
|
return true;
|
@@ -247,7 +250,7 @@ function createContainerWithFragments<
|
|
247
250
|
};
|
248
251
|
}
|
249
252
|
|
250
|
-
function getRelayProp(environment) {
|
253
|
+
function getRelayProp(environment: IEnvironment) {
|
251
254
|
return {
|
252
255
|
environment,
|
253
256
|
};
|
@@ -235,7 +235,7 @@ function createGetConnectionFromProps(metadata: ReactConnectionMetadata) {
|
|
235
235
|
'ReactRelayPaginationContainer: Unable to synthesize a ' +
|
236
236
|
'getConnectionFromProps function.',
|
237
237
|
);
|
238
|
-
return props => {
|
238
|
+
return (props: any) => {
|
239
239
|
let data = props[metadata.fragmentName];
|
240
240
|
for (let i = 0; i < path.length; i++) {
|
241
241
|
if (!data || typeof data !== 'object') {
|
@@ -264,7 +264,9 @@ function createGetFragmentVariables(
|
|
264
264
|
|
265
265
|
type ReactConnectionMetadata = ConnectionMetadata & {fragmentName: string, ...};
|
266
266
|
|
267
|
-
function findConnectionMetadata(
|
267
|
+
function findConnectionMetadata(
|
268
|
+
fragments: FragmentMap,
|
269
|
+
): ReactConnectionMetadata {
|
268
270
|
let foundConnectionMetadata = null;
|
269
271
|
let isRelayModern = false;
|
270
272
|
for (const fragmentName in fragments) {
|
@@ -308,7 +310,7 @@ function toObserver(observerOrCallback: ?ObserverOrCallback): Observer<void> {
|
|
308
310
|
? {
|
309
311
|
error: observerOrCallback,
|
310
312
|
complete: observerOrCallback,
|
311
|
-
unsubscribe: subscription => {
|
313
|
+
unsubscribe: (subscription: Subscription) => {
|
312
314
|
typeof observerOrCallback === 'function' && observerOrCallback();
|
313
315
|
},
|
314
316
|
}
|
@@ -356,7 +358,7 @@ function createContainerWithFragments<
|
|
356
358
|
_isUnmounted: boolean;
|
357
359
|
_hasFetched: boolean;
|
358
360
|
|
359
|
-
constructor(props) {
|
361
|
+
constructor(props: any) {
|
360
362
|
super(props);
|
361
363
|
const relayContext = assertRelayContext(props.__relayContext);
|
362
364
|
const rootIsQueryRenderer = props.__rootIsQueryRenderer ?? false;
|
@@ -415,7 +417,7 @@ function createContainerWithFragments<
|
|
415
417
|
* for updates. Props may be the same in which case previous data and
|
416
418
|
* subscriptions can be reused.
|
417
419
|
*/
|
418
|
-
UNSAFE_componentWillReceiveProps(nextProps) {
|
420
|
+
UNSAFE_componentWillReceiveProps(nextProps: any) {
|
419
421
|
const relayContext = assertRelayContext(nextProps.__relayContext);
|
420
422
|
const rootIsQueryRenderer = nextProps.__rootIsQueryRenderer ?? false;
|
421
423
|
const prevIDs = getDataIDsFromObject(fragments, this.props);
|
@@ -479,7 +481,10 @@ function createContainerWithFragments<
|
|
479
481
|
this._cleanup();
|
480
482
|
}
|
481
483
|
|
482
|
-
shouldComponentUpdate(
|
484
|
+
shouldComponentUpdate(
|
485
|
+
nextProps: Props,
|
486
|
+
nextState: ContainerState,
|
487
|
+
): boolean {
|
483
488
|
// Short-circuit if any Relay-related data has changed
|
484
489
|
if (
|
485
490
|
nextState.data !== this.state.data ||
|
@@ -722,7 +727,7 @@ function createContainerWithFragments<
|
|
722
727
|
return this._queryFetcher;
|
723
728
|
}
|
724
729
|
|
725
|
-
_canFetchPage(method): boolean {
|
730
|
+
_canFetchPage(method: 'loadMore' | 'refetchConnection'): boolean {
|
726
731
|
if (this._isUnmounted) {
|
727
732
|
warning(
|
728
733
|
false,
|
@@ -813,7 +818,7 @@ function createContainerWithFragments<
|
|
813
818
|
}
|
814
819
|
this._hasFetched = true;
|
815
820
|
|
816
|
-
const onNext = (payload, complete) => {
|
821
|
+
const onNext = (payload: mixed, complete: () => void) => {
|
817
822
|
const prevData = this._resolver.resolve();
|
818
823
|
this._resolver.setVariables(
|
819
824
|
getFragmentVariables(
|
@@ -29,7 +29,6 @@ const ReactRelayQueryRendererContext = require('./ReactRelayQueryRendererContext
|
|
29
29
|
const areEqual = require('areEqual');
|
30
30
|
const React = require('react');
|
31
31
|
const {
|
32
|
-
RelayFeatureFlags,
|
33
32
|
createOperationDescriptor,
|
34
33
|
deepFreeze,
|
35
34
|
getRequest,
|
@@ -56,7 +55,12 @@ export type RenderProps<T> = {|
|
|
56
55
|
* constructor. If a request is already in flight from a previous call to the
|
57
56
|
* constructor, just reuse the query fetcher and wait for the response.
|
58
57
|
*/
|
59
|
-
const requestCache
|
58
|
+
const requestCache: {
|
59
|
+
[string]: void | {|
|
60
|
+
queryFetcher: ReactRelayQueryFetcher,
|
61
|
+
snapshot: ?Snapshot,
|
62
|
+
|},
|
63
|
+
} = {};
|
60
64
|
|
61
65
|
const queryRendererContext: ReactRelayQueryRendererContextType = {
|
62
66
|
rootIsQueryRenderer: true,
|
@@ -24,6 +24,7 @@ import type {
|
|
24
24
|
Disposable,
|
25
25
|
FragmentMap,
|
26
26
|
GraphQLTaggedNode,
|
27
|
+
IEnvironment,
|
27
28
|
RelayContext,
|
28
29
|
Subscription,
|
29
30
|
Variables,
|
@@ -86,7 +87,7 @@ function createContainerWithFragments<
|
|
86
87
|
_queryFetcher: ?ReactRelayQueryFetcher;
|
87
88
|
_isUnmounted: boolean;
|
88
89
|
|
89
|
-
constructor(props) {
|
90
|
+
constructor(props: any) {
|
90
91
|
super(props);
|
91
92
|
const relayContext = assertRelayContext(props.__relayContext);
|
92
93
|
const rootIsQueryRenderer = props.__rootIsQueryRenderer ?? false;
|
@@ -217,7 +218,10 @@ function createContainerWithFragments<
|
|
217
218
|
this._refetchSubscription && this._refetchSubscription.unsubscribe();
|
218
219
|
}
|
219
220
|
|
220
|
-
shouldComponentUpdate(
|
221
|
+
shouldComponentUpdate(
|
222
|
+
nextProps: ContainerProps,
|
223
|
+
nextState: ContainerState,
|
224
|
+
): boolean {
|
221
225
|
// Short-circuit if any Relay-related data has changed
|
222
226
|
if (
|
223
227
|
nextState.data !== this.state.data ||
|
@@ -465,7 +469,10 @@ function createContainerWithFragments<
|
|
465
469
|
};
|
466
470
|
}
|
467
471
|
|
468
|
-
function getRelayProp(
|
472
|
+
function getRelayProp(
|
473
|
+
environment: IEnvironment,
|
474
|
+
refetch: RelayRefetchProp['refetch'],
|
475
|
+
): RelayRefetchProp {
|
469
476
|
return {
|
470
477
|
environment,
|
471
478
|
refetch,
|
package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/**
|
2
2
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
|
-
*
|
3
|
+
*
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<23bcef30afc22a42d79dd52e0cfe899c>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/**
|
2
2
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
|
-
*
|
3
|
+
*
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<af6c4570779066ea564051c9c71c494f>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/**
|
2
2
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
|
-
*
|
3
|
+
*
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<6d173a357c286b417fdc586a839384d4>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -27,8 +27,8 @@ export type ReactRelayPaginationContainerFlowtestQuery$data = {|
|
|
27
27
|
|},
|
28
28
|
|};
|
29
29
|
export type ReactRelayPaginationContainerFlowtestQuery = {|
|
30
|
-
variables: ReactRelayPaginationContainerFlowtestQuery$variables,
|
31
30
|
response: ReactRelayPaginationContainerFlowtestQuery$data,
|
31
|
+
variables: ReactRelayPaginationContainerFlowtestQuery$variables,
|
32
32
|
|};
|
33
33
|
*/
|
34
34
|
|
package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/**
|
2
2
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
|
-
*
|
3
|
+
*
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<b3cddee250d0ff22e89a7f0331e85df6>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -23,7 +23,7 @@ export type ReactRelayPaginationContainerFlowtest_viewer$data = {|
|
|
23
23
|
+friends: ?{|
|
24
24
|
+edges: ?$ReadOnlyArray<?{|
|
25
25
|
+node: ?{|
|
26
|
-
+__typename:
|
26
|
+
+__typename: "User",
|
27
27
|
|},
|
28
28
|
|}>,
|
29
29
|
|},
|
@@ -1,10 +1,10 @@
|
|
1
1
|
/**
|
2
2
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
|
-
*
|
3
|
+
*
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<3b1b16b5d5ec1c94783d6161ae61bc3d>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -27,8 +27,8 @@ export type ReactRelayRefetchContainerFlowtestQuery$data = {|
|
|
27
27
|
|},
|
28
28
|
|};
|
29
29
|
export type ReactRelayRefetchContainerFlowtestQuery = {|
|
30
|
-
variables: ReactRelayRefetchContainerFlowtestQuery$variables,
|
31
30
|
response: ReactRelayRefetchContainerFlowtestQuery$data,
|
31
|
+
variables: ReactRelayRefetchContainerFlowtestQuery$variables,
|
32
32
|
|};
|
33
33
|
*/
|
34
34
|
|
package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/**
|
2
2
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
|
-
*
|
3
|
+
*
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<6d04d7f7bf097d5869a1fdf0dea1e659>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -23,7 +23,7 @@ export type ReactRelayRefetchContainerFlowtest_viewer$data = {|
|
|
23
23
|
+friends: ?{|
|
24
24
|
+edges: ?$ReadOnlyArray<?{|
|
25
25
|
+node: ?{|
|
26
|
-
+__typename:
|
26
|
+
+__typename: "User",
|
27
27
|
|},
|
28
28
|
|}>,
|
29
29
|
|},
|
@@ -1,10 +1,10 @@
|
|
1
1
|
/**
|
2
2
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
|
-
*
|
3
|
+
*
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<d3c71cb965d8374d40fb30f3c5ae9fd4>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -1,10 +1,10 @@
|
|
1
1
|
/**
|
2
2
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
|
-
*
|
3
|
+
*
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<bd60df80c19d8248426865abbc23562e>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -1,10 +1,10 @@
|
|
1
1
|
/**
|
2
2
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
|
-
*
|
3
|
+
*
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<527809017626cb43378afb92fed67feb>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -1,10 +1,10 @@
|
|
1
1
|
/**
|
2
2
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
|
-
*
|
3
|
+
*
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<8a94ce305c03af7280da9b95a665349f>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -11,7 +11,7 @@
|
|
11
11
|
// flowlint ambiguous-object-type:error
|
12
12
|
|
13
13
|
'use strict';
|
14
|
-
|
14
|
+
import type {ReaderFragment} from '../relay-runtime/util/ReaderNode';
|
15
15
|
import type {GeneratedNodeMap} from './ReactRelayTypes';
|
16
16
|
import type {FragmentMap} from 'relay-runtime';
|
17
17
|
|
@@ -45,7 +45,7 @@ function buildReactRelayContainer<TBase: React$ComponentType<any>>(
|
|
45
45
|
const containerName = getContainerName(ComponentClass);
|
46
46
|
assertFragmentMap(getComponentName(ComponentClass), fragmentSpec);
|
47
47
|
|
48
|
-
const fragments = {};
|
48
|
+
const fragments: {[string]: ReaderFragment} = {};
|
49
49
|
for (const key in fragmentSpec) {
|
50
50
|
fragments[key] = getFragment(fragmentSpec[key]);
|
51
51
|
}
|
package/hooks.js
CHANGED
package/index.js
CHANGED
package/legacy.js
CHANGED
@@ -153,6 +153,7 @@ var ReactRelayQueryFetcher = /*#__PURE__*/function () {
|
|
153
153
|
};
|
154
154
|
|
155
155
|
if (onDataChange && this._fetchOptions.onDataChangeCallbacks.indexOf(onDataChange) === -1) {
|
156
|
+
// $FlowFixMe[incompatible-use]
|
156
157
|
this._fetchOptions.onDataChangeCallbacks.push(onDataChange);
|
157
158
|
}
|
158
159
|
|
@@ -31,7 +31,6 @@ var areEqual = require("fbjs/lib/areEqual");
|
|
31
31
|
var React = require('react');
|
32
32
|
|
33
33
|
var _require = require('relay-runtime'),
|
34
|
-
RelayFeatureFlags = _require.RelayFeatureFlags,
|
35
34
|
createOperationDescriptor = _require.createOperationDescriptor,
|
36
35
|
deepFreeze = _require.deepFreeze,
|
37
36
|
getRequest = _require.getRequest;
|
package/lib/readContext.js
CHANGED
@@ -10,7 +10,8 @@
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
11
11
|
'use strict';
|
12
12
|
|
13
|
-
var React = require('react');
|
13
|
+
var React = require('react'); // $FlowFixMe[incompatible-use]
|
14
|
+
|
14
15
|
|
15
16
|
var _React$__SECRET_INTER =
|
16
17
|
/* $FlowFixMe[prop-missing] Flow doesn't know about React's internals for
|
@@ -74,6 +74,16 @@ function hasMissingClientEdges(snapshot) {
|
|
74
74
|
return ((_snapshot$missingClie = (_snapshot$missingClie2 = snapshot.missingClientEdges) === null || _snapshot$missingClie2 === void 0 ? void 0 : _snapshot$missingClie2.length) !== null && _snapshot$missingClie !== void 0 ? _snapshot$missingClie : 0) > 0;
|
75
75
|
}
|
76
76
|
|
77
|
+
function missingLiveResolverFields(snapshot) {
|
78
|
+
if (Array.isArray(snapshot)) {
|
79
|
+
return snapshot.map(function (s) {
|
80
|
+
return s.missingLiveResolverFields;
|
81
|
+
}).filter(Boolean).flat();
|
82
|
+
}
|
83
|
+
|
84
|
+
return snapshot.missingLiveResolverFields;
|
85
|
+
}
|
86
|
+
|
77
87
|
function singularOrPluralForEach(snapshot, f) {
|
78
88
|
if (Array.isArray(snapshot)) {
|
79
89
|
snapshot.forEach(f);
|
@@ -210,7 +220,7 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
210
220
|
_proto2.readWithIdentifier = function readWithIdentifier(fragmentNode, fragmentRef, fragmentIdentifier, componentDisplayName, fragmentKey) {
|
211
221
|
var _this3 = this;
|
212
222
|
|
213
|
-
var _fragmentNode$metadat,
|
223
|
+
var _fragmentNode$metadat, _fragmentNode$metadat2, _missingLiveResolverF2, _missingLiveResolverF3;
|
214
224
|
|
215
225
|
var environment = this._environment; // If fragmentRef is null or undefined, pass it directly through.
|
216
226
|
// This is a convenience when consuming fragments via a HOC API, when the
|
@@ -248,6 +258,8 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
248
258
|
var cachedValue = this._cache.get(fragmentIdentifier);
|
249
259
|
|
250
260
|
if (cachedValue != null) {
|
261
|
+
var _missingLiveResolverF;
|
262
|
+
|
251
263
|
if (cachedValue.kind === 'pending' && isPromise(cachedValue.promise)) {
|
252
264
|
environment.__log({
|
253
265
|
name: 'suspense.fragment',
|
@@ -262,7 +274,7 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
262
274
|
throw cachedValue.promise;
|
263
275
|
}
|
264
276
|
|
265
|
-
if (cachedValue.kind === 'done' && cachedValue.result.snapshot) {
|
277
|
+
if (cachedValue.kind === 'done' && cachedValue.result.snapshot && !((_missingLiveResolverF = missingLiveResolverFields(cachedValue.result.snapshot)) === null || _missingLiveResolverF === void 0 ? void 0 : _missingLiveResolverF.length)) {
|
266
278
|
this._handlePotentialSnapshotErrorsInSnapshot(cachedValue.result.snapshot);
|
267
279
|
|
268
280
|
return cachedValue.result;
|
@@ -300,7 +312,7 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
300
312
|
|
301
313
|
var clientEdgeRequests = null;
|
302
314
|
|
303
|
-
if (RelayFeatureFlags.ENABLE_CLIENT_EDGES && hasMissingClientEdges(snapshot)) {
|
315
|
+
if (RelayFeatureFlags.ENABLE_CLIENT_EDGES && ((_fragmentNode$metadat2 = fragmentNode.metadata) === null || _fragmentNode$metadat2 === void 0 ? void 0 : _fragmentNode$metadat2.hasClientEdges) === true && hasMissingClientEdges(snapshot)) {
|
304
316
|
clientEdgeRequests = [];
|
305
317
|
var queryResource = getQueryResourceForEnvironment(this._environment);
|
306
318
|
var queryResults = [];
|
@@ -328,14 +340,12 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
328
340
|
this._clientEdgeQueryResultsCache.recordQueryResults(fragmentIdentifier, queryResults);
|
329
341
|
}
|
330
342
|
|
331
|
-
var clientEdgePromises =
|
343
|
+
var clientEdgePromises = [];
|
332
344
|
|
333
345
|
if (RelayFeatureFlags.ENABLE_CLIENT_EDGES && clientEdgeRequests) {
|
334
346
|
clientEdgePromises = clientEdgeRequests.map(function (request) {
|
335
347
|
return getPromiseForActiveRequest(_this3._environment, request);
|
336
|
-
}).filter(
|
337
|
-
return p != null;
|
338
|
-
});
|
348
|
+
}).filter(Boolean);
|
339
349
|
} // Finally look for operations in flight for our parent query:
|
340
350
|
|
341
351
|
|
@@ -345,8 +355,15 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
345
355
|
|
346
356
|
var parentQueryPromiseResultPromise = parentQueryPromiseResult === null || parentQueryPromiseResult === void 0 ? void 0 : parentQueryPromiseResult.promise; // for refinement
|
347
357
|
|
348
|
-
|
349
|
-
var
|
358
|
+
var missingResolverFieldPromises = (_missingLiveResolverF2 = (_missingLiveResolverF3 = missingLiveResolverFields(snapshot)) === null || _missingLiveResolverF3 === void 0 ? void 0 : _missingLiveResolverF3.map(function (_ref2) {
|
359
|
+
var liveStateID = _ref2.liveStateID;
|
360
|
+
var store = environment.getStore(); // $FlowFixMe[prop-missing] This is expected to be a LiveResolverStore
|
361
|
+
|
362
|
+
return store.getLiveResolverPromise(liveStateID);
|
363
|
+
})) !== null && _missingLiveResolverF2 !== void 0 ? _missingLiveResolverF2 : [];
|
364
|
+
|
365
|
+
if (clientEdgePromises.length || missingResolverFieldPromises.length || isPromise(parentQueryPromiseResultPromise)) {
|
366
|
+
var _parentQueryPromiseRe, _clientEdgeRequests2;
|
350
367
|
|
351
368
|
environment.__log({
|
352
369
|
name: 'suspense.fragment',
|
@@ -355,10 +372,34 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
355
372
|
isRelayHooks: true,
|
356
373
|
isPromiseCached: false,
|
357
374
|
isMissingData: fragmentResult.isMissingData,
|
375
|
+
// TODO! Attach information here about missing live resolver fields
|
358
376
|
pendingOperations: [].concat((0, _toConsumableArray2["default"])((_parentQueryPromiseRe = parentQueryPromiseResult === null || parentQueryPromiseResult === void 0 ? void 0 : parentQueryPromiseResult.pendingOperations) !== null && _parentQueryPromiseRe !== void 0 ? _parentQueryPromiseRe : []), (0, _toConsumableArray2["default"])((_clientEdgeRequests2 = clientEdgeRequests) !== null && _clientEdgeRequests2 !== void 0 ? _clientEdgeRequests2 : []))
|
359
377
|
});
|
360
378
|
|
361
|
-
|
379
|
+
var promises = [];
|
380
|
+
|
381
|
+
if (clientEdgePromises.length > 0) {
|
382
|
+
promises = promises.concat(clientEdgePromises);
|
383
|
+
}
|
384
|
+
|
385
|
+
if (missingResolverFieldPromises.length > 0) {
|
386
|
+
promises = promises.concat(missingResolverFieldPromises);
|
387
|
+
}
|
388
|
+
|
389
|
+
if (promises.length > 0) {
|
390
|
+
if (parentQueryPromiseResultPromise) {
|
391
|
+
promises.push(parentQueryPromiseResultPromise);
|
392
|
+
}
|
393
|
+
|
394
|
+
throw Promise.all(promises);
|
395
|
+
} // Note: we are re-throwing the `parentQueryPromiseResultPromise` here,
|
396
|
+
// because some of our suspense-related code is relying on the instance equality
|
397
|
+
// of thrown promises. See FragmentResource-test.js
|
398
|
+
|
399
|
+
|
400
|
+
if (parentQueryPromiseResultPromise) {
|
401
|
+
throw parentQueryPromiseResultPromise;
|
402
|
+
}
|
362
403
|
}
|
363
404
|
|
364
405
|
this._handlePotentialSnapshotErrorsInSnapshot(snapshot);
|
@@ -553,6 +594,7 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
553
594
|
data: updatedData,
|
554
595
|
isMissingData: currentSnapshot.isMissingData,
|
555
596
|
missingClientEdges: currentSnapshot.missingClientEdges,
|
597
|
+
missingLiveResolverFields: currentSnapshot.missingLiveResolverFields,
|
556
598
|
seenRecords: currentSnapshot.seenRecords,
|
557
599
|
selector: currentSnapshot.selector,
|
558
600
|
missingRequiredFields: currentSnapshot.missingRequiredFields,
|
@@ -0,0 +1,29 @@
|
|
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
|
+
* @emails oncall+relay
|
8
|
+
*
|
9
|
+
* @format
|
10
|
+
*/
|
11
|
+
'use strict'; // flowlint ambiguous-object-type:error
|
12
|
+
|
13
|
+
var warning = require("fbjs/lib/warning");
|
14
|
+
|
15
|
+
var implementation = null;
|
16
|
+
|
17
|
+
function inject(impl) {
|
18
|
+
process.env.NODE_ENV !== "production" ? warning(implementation !== null, 'Relay HooksImplementation was injected twice.') : void 0;
|
19
|
+
implementation = impl;
|
20
|
+
}
|
21
|
+
|
22
|
+
function get() {
|
23
|
+
return implementation;
|
24
|
+
}
|
25
|
+
|
26
|
+
module.exports = {
|
27
|
+
inject: inject,
|
28
|
+
get: get
|
29
|
+
};
|
@@ -137,6 +137,7 @@ function MatchContainer(_ref2) {
|
|
137
137
|
|
138
138
|
if (LoadedContainer != null && fragmentProps != null) {
|
139
139
|
// $FlowFixMe[incompatible-type]
|
140
|
+
// $FlowFixMe[cannot-spread-indexer]
|
140
141
|
return /*#__PURE__*/React.createElement(LoadedContainer, (0, _extends2["default"])({}, props, fragmentProps));
|
141
142
|
} else {
|
142
143
|
return fallback !== null && fallback !== void 0 ? fallback : null;
|
@@ -266,7 +266,8 @@ var QueryResourceImpl = /*#__PURE__*/function () {
|
|
266
266
|
var hasFullQuery = queryStatus === 'available';
|
267
267
|
var canPartialRender = hasFullQuery || renderPolicy === 'partial' && queryStatus !== 'stale';
|
268
268
|
var shouldFetch;
|
269
|
-
var shouldAllowRender;
|
269
|
+
var shouldAllowRender; // Different definitions for Promise in our repos can cause this variable
|
270
|
+
// to cause errors when synced elsewhere
|
270
271
|
|
271
272
|
var resolveNetworkPromise = function resolveNetworkPromise() {};
|
272
273
|
|