react-relay 11.0.2 → 13.0.0-rc.2
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/README.md +47 -0
- package/ReactRelayContainerUtils.js.flow +1 -1
- package/ReactRelayContext.js +1 -1
- package/ReactRelayContext.js.flow +3 -4
- package/ReactRelayFragmentContainer.js.flow +25 -25
- package/ReactRelayFragmentMockRenderer.js.flow +2 -2
- package/ReactRelayLocalQueryRenderer.js.flow +7 -8
- package/ReactRelayPaginationContainer.js.flow +112 -59
- package/ReactRelayQueryFetcher.js.flow +10 -11
- package/ReactRelayQueryRenderer.js.flow +116 -82
- package/ReactRelayQueryRendererContext.js.flow +1 -1
- package/ReactRelayRefetchContainer.js.flow +42 -39
- package/ReactRelayTestMocker.js.flow +17 -15
- package/ReactRelayTypes.js.flow +11 -11
- package/RelayContext.js.flow +4 -4
- package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +2 -3
- package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +12 -8
- package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +11 -7
- package/__flowtests__/RelayModern-flowtest.js.flow +79 -47
- package/__flowtests__/RelayModernFlowtest_badref.graphql.js.flow +6 -5
- package/__flowtests__/RelayModernFlowtest_notref.graphql.js.flow +6 -5
- package/__flowtests__/RelayModernFlowtest_user.graphql.js.flow +5 -4
- package/__flowtests__/RelayModernFlowtest_users.graphql.js.flow +5 -4
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow +72 -0
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +72 -0
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +227 -0
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +164 -0
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +227 -0
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +164 -0
- package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +66 -0
- package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +66 -0
- package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +59 -0
- package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +61 -0
- package/assertFragmentMap.js.flow +3 -3
- package/buildReactRelayContainer.js.flow +12 -11
- package/getRootVariablesForFragments.js.flow +3 -5
- package/hooks.js +1 -1
- package/hooks.js.flow +6 -7
- package/index.js +1 -1
- package/index.js.flow +7 -8
- package/isRelayEnvironment.js.flow +1 -1
- package/jest-react/enqueueTask.js.flow +56 -0
- package/jest-react/index.js.flow +12 -0
- package/jest-react/internalAct.js.flow +138 -0
- package/legacy.js +1 -1
- package/legacy.js.flow +1 -1
- package/lib/ReactRelayContainerUtils.js +1 -1
- package/lib/ReactRelayContext.js +1 -1
- package/lib/ReactRelayFragmentContainer.js +22 -16
- package/lib/ReactRelayFragmentMockRenderer.js +3 -3
- package/lib/ReactRelayLocalQueryRenderer.js +8 -9
- package/lib/ReactRelayPaginationContainer.js +97 -39
- package/lib/ReactRelayQueryFetcher.js +3 -3
- package/lib/ReactRelayQueryRenderer.js +87 -54
- package/lib/ReactRelayQueryRendererContext.js +1 -1
- package/lib/ReactRelayRefetchContainer.js +39 -26
- package/lib/ReactRelayTestMocker.js +8 -9
- package/lib/ReactRelayTypes.js +1 -1
- package/lib/RelayContext.js +4 -3
- package/lib/assertFragmentMap.js +3 -2
- package/lib/buildReactRelayContainer.js +8 -8
- package/lib/getRootVariablesForFragments.js +2 -3
- package/lib/hooks.js +6 -6
- package/lib/index.js +8 -8
- package/lib/isRelayEnvironment.js +1 -1
- package/lib/jest-react/enqueueTask.js +53 -0
- package/lib/jest-react/index.js +13 -0
- package/lib/jest-react/internalAct.js +115 -0
- package/lib/legacy.js +1 -1
- package/lib/multi-actor/ActorChange.js +30 -0
- package/lib/multi-actor/index.js +11 -0
- package/lib/multi-actor/useRelayActorEnvironment.js +29 -0
- package/lib/readContext.js +1 -1
- package/lib/relay-hooks/EntryPointContainer.react.js +4 -4
- package/lib/relay-hooks/EntryPointTypes.flow.js +1 -1
- package/lib/relay-hooks/FragmentResource.js +342 -89
- package/lib/relay-hooks/InternalLogger.js +1 -1
- package/lib/relay-hooks/LRUCache.js +1 -1
- package/lib/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js +5 -5
- package/lib/relay-hooks/MatchContainer.js +2 -2
- package/lib/relay-hooks/ProfilerContext.js +1 -1
- package/lib/relay-hooks/QueryResource.js +172 -29
- package/lib/relay-hooks/RelayEnvironmentProvider.js +6 -4
- package/lib/relay-hooks/SuspenseResource.js +130 -0
- package/lib/relay-hooks/loadEntryPoint.js +1 -1
- package/lib/relay-hooks/loadQuery.js +42 -20
- package/lib/relay-hooks/preloadQuery_DEPRECATED.js +25 -16
- package/lib/relay-hooks/prepareEntryPoint_DEPRECATED.js +1 -1
- package/lib/relay-hooks/useBlockingPaginationFragment.js +5 -6
- package/lib/relay-hooks/useEntryPointLoader.js +3 -3
- package/lib/relay-hooks/useFetchTrackingRef.js +3 -2
- package/lib/relay-hooks/useFragment.js +7 -7
- package/lib/relay-hooks/useFragmentNode.js +5 -5
- package/lib/relay-hooks/useIsMountedRef.js +1 -1
- package/lib/relay-hooks/useIsOperationNodeActive.js +3 -3
- package/lib/relay-hooks/useIsParentQueryActive.js +1 -1
- package/lib/relay-hooks/useLazyLoadQuery.js +4 -4
- package/lib/relay-hooks/useLazyLoadQueryNode.js +11 -5
- package/lib/relay-hooks/useLoadMoreFunction.js +9 -13
- package/lib/relay-hooks/useMemoOperationDescriptor.js +3 -3
- package/lib/relay-hooks/useMemoVariables.js +3 -3
- package/lib/relay-hooks/useMutation.js +18 -7
- package/lib/relay-hooks/usePaginationFragment.js +3 -4
- package/lib/relay-hooks/usePreloadedQuery.js +6 -6
- package/lib/relay-hooks/useQueryLoader.js +31 -11
- package/lib/relay-hooks/useRefetchableFragment.js +1 -1
- package/lib/relay-hooks/useRefetchableFragmentNode.js +14 -18
- package/lib/relay-hooks/useRelayEnvironment.js +3 -3
- package/lib/relay-hooks/useStaticFragmentNodeWarning.js +3 -3
- package/lib/relay-hooks/useSubscribeToInvalidationState.js +3 -2
- package/lib/relay-hooks/useSubscription.js +11 -8
- package/multi-actor/ActorChange.js.flow +58 -0
- package/multi-actor/index.js.flow +14 -0
- package/multi-actor/useRelayActorEnvironment.js.flow +49 -0
- package/package.json +3 -3
- 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 -1
- package/relay-hooks/EntryPointContainer.react.js.flow +9 -16
- package/relay-hooks/EntryPointTypes.flow.js.flow +25 -26
- package/relay-hooks/FragmentResource.js.flow +359 -93
- package/relay-hooks/InternalLogger.js.flow +1 -1
- package/relay-hooks/LRUCache.js.flow +1 -1
- package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +33 -47
- package/relay-hooks/MatchContainer.js.flow +4 -3
- package/relay-hooks/ProfilerContext.js.flow +1 -1
- package/relay-hooks/QueryResource.js.flow +217 -26
- package/relay-hooks/RelayEnvironmentProvider.js.flow +15 -5
- package/relay-hooks/SuspenseResource.js.flow +115 -0
- package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +5 -4
- package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +2 -2
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +59 -0
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +61 -0
- package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +11 -10
- package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +55 -32
- package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +11 -10
- package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +11 -10
- package/relay-hooks/__flowtests__/utils.js.flow +21 -32
- package/relay-hooks/loadEntryPoint.js.flow +7 -13
- package/relay-hooks/loadQuery.js.flow +50 -32
- package/relay-hooks/preloadQuery_DEPRECATED.js.flow +31 -22
- package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +7 -13
- package/relay-hooks/useBlockingPaginationFragment.js.flow +14 -12
- package/relay-hooks/useEntryPointLoader.js.flow +8 -11
- package/relay-hooks/useFetchTrackingRef.js.flow +3 -3
- package/relay-hooks/useFragment.js.flow +31 -62
- package/relay-hooks/useFragmentNode.js.flow +6 -8
- package/relay-hooks/useIsMountedRef.js.flow +1 -1
- package/relay-hooks/useIsOperationNodeActive.js.flow +4 -6
- package/relay-hooks/useIsParentQueryActive.js.flow +4 -5
- package/relay-hooks/useLazyLoadQuery.js.flow +14 -16
- package/relay-hooks/useLazyLoadQueryNode.js.flow +20 -14
- package/relay-hooks/useLoadMoreFunction.js.flow +21 -30
- package/relay-hooks/useMemoOperationDescriptor.js.flow +6 -8
- package/relay-hooks/useMemoVariables.js.flow +7 -7
- package/relay-hooks/useMutation.js.flow +27 -27
- package/relay-hooks/usePaginationFragment.js.flow +39 -45
- package/relay-hooks/usePreloadedQuery.js.flow +14 -20
- package/relay-hooks/useQueryLoader.js.flow +42 -23
- package/relay-hooks/useRefetchableFragment.js.flow +8 -9
- package/relay-hooks/useRefetchableFragmentNode.js.flow +25 -33
- package/relay-hooks/useRelayEnvironment.js.flow +3 -5
- package/relay-hooks/useStaticFragmentNodeWarning.js.flow +3 -4
- package/relay-hooks/useSubscribeToInvalidationState.js.flow +4 -7
- package/relay-hooks/useSubscription.js.flow +21 -11
- package/lib/relay-hooks/getPaginationMetadata.js +0 -41
- package/lib/relay-hooks/getPaginationVariables.js +0 -67
- package/lib/relay-hooks/getRefetchMetadata.js +0 -36
- package/lib/relay-hooks/getValueAtPath.js +0 -51
- package/relay-hooks/getPaginationMetadata.js.flow +0 -74
- package/relay-hooks/getPaginationVariables.js.flow +0 -110
- package/relay-hooks/getRefetchMetadata.js.flow +0 -80
- package/relay-hooks/getValueAtPath.js.flow +0 -46
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
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.
|
|
@@ -13,34 +13,32 @@
|
|
|
13
13
|
|
|
14
14
|
'use strict';
|
|
15
15
|
|
|
16
|
+
import type {
|
|
17
|
+
CacheConfig,
|
|
18
|
+
FetchPolicy,
|
|
19
|
+
Query,
|
|
20
|
+
RenderPolicy,
|
|
21
|
+
Variables,
|
|
22
|
+
} from 'relay-runtime';
|
|
23
|
+
|
|
24
|
+
const {useTrackLoadQueryInRender} = require('./loadQuery');
|
|
16
25
|
const useLazyLoadQueryNode = require('./useLazyLoadQueryNode');
|
|
17
26
|
const useMemoOperationDescriptor = require('./useMemoOperationDescriptor');
|
|
18
27
|
const useRelayEnvironment = require('./useRelayEnvironment');
|
|
19
|
-
|
|
20
|
-
const {useTrackLoadQueryInRender} = require('./loadQuery');
|
|
21
28
|
const {
|
|
22
29
|
__internal: {fetchQuery},
|
|
23
30
|
} = require('relay-runtime');
|
|
24
31
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
GraphQLTaggedNode,
|
|
29
|
-
OperationType,
|
|
30
|
-
RenderPolicy,
|
|
31
|
-
VariablesOf,
|
|
32
|
-
} from 'relay-runtime';
|
|
33
|
-
|
|
34
|
-
function useLazyLoadQuery<TQuery: OperationType>(
|
|
35
|
-
gqlQuery: GraphQLTaggedNode,
|
|
36
|
-
variables: VariablesOf<TQuery>,
|
|
32
|
+
function useLazyLoadQuery<TVariables: Variables, TData>(
|
|
33
|
+
gqlQuery: Query<TVariables, TData>,
|
|
34
|
+
variables: TVariables,
|
|
37
35
|
options?: {|
|
|
38
36
|
fetchKey?: string | number,
|
|
39
37
|
fetchPolicy?: FetchPolicy,
|
|
40
38
|
networkCacheConfig?: CacheConfig,
|
|
41
39
|
UNSTABLE_renderPolicy?: RenderPolicy,
|
|
42
40
|
|},
|
|
43
|
-
):
|
|
41
|
+
): TData {
|
|
44
42
|
// We need to use this hook in order to be able to track if
|
|
45
43
|
// loadQuery was called during render
|
|
46
44
|
useTrackLoadQueryInRender();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
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.
|
|
@@ -13,18 +13,6 @@
|
|
|
13
13
|
|
|
14
14
|
'use strict';
|
|
15
15
|
|
|
16
|
-
const ProfilerContext = require('./ProfilerContext');
|
|
17
|
-
const React = require('react');
|
|
18
|
-
|
|
19
|
-
const useFetchTrackingRef = require('./useFetchTrackingRef');
|
|
20
|
-
const useFragmentNode = require('./useFragmentNode');
|
|
21
|
-
const useRelayEnvironment = require('./useRelayEnvironment');
|
|
22
|
-
|
|
23
|
-
const {
|
|
24
|
-
getQueryResourceForEnvironment,
|
|
25
|
-
getQueryCacheIdentifier,
|
|
26
|
-
} = require('./QueryResource');
|
|
27
|
-
|
|
28
16
|
import type {
|
|
29
17
|
FetchPolicy,
|
|
30
18
|
GraphQLResponse,
|
|
@@ -34,6 +22,16 @@ import type {
|
|
|
34
22
|
RenderPolicy,
|
|
35
23
|
} from 'relay-runtime';
|
|
36
24
|
|
|
25
|
+
const ProfilerContext = require('./ProfilerContext');
|
|
26
|
+
const {
|
|
27
|
+
getQueryCacheIdentifier,
|
|
28
|
+
getQueryResourceForEnvironment,
|
|
29
|
+
} = require('./QueryResource');
|
|
30
|
+
const useFetchTrackingRef = require('./useFetchTrackingRef');
|
|
31
|
+
const useFragmentNode = require('./useFragmentNode');
|
|
32
|
+
const useRelayEnvironment = require('./useRelayEnvironment');
|
|
33
|
+
const React = require('react');
|
|
34
|
+
|
|
37
35
|
const {useContext, useEffect, useState, useRef} = React;
|
|
38
36
|
|
|
39
37
|
function useLazyLoadQueryNode<TQuery: OperationType>({
|
|
@@ -50,7 +48,7 @@ function useLazyLoadQueryNode<TQuery: OperationType>({
|
|
|
50
48
|
fetchPolicy?: ?FetchPolicy,
|
|
51
49
|
fetchKey?: ?string | ?number,
|
|
52
50
|
renderPolicy?: ?RenderPolicy,
|
|
53
|
-
|}):
|
|
51
|
+
|}): TQuery['response'] {
|
|
54
52
|
const environment = useRelayEnvironment();
|
|
55
53
|
const profilerContext = useContext(ProfilerContext);
|
|
56
54
|
const QueryResource = getQueryResourceForEnvironment(environment);
|
|
@@ -120,6 +118,14 @@ function useLazyLoadQueryNode<TQuery: OperationType>({
|
|
|
120
118
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
121
119
|
}, [environment, cacheIdentifier]);
|
|
122
120
|
|
|
121
|
+
useEffect(() => {
|
|
122
|
+
// Release any temporary retain that's not released. At this point, if the
|
|
123
|
+
// cacheIdentifier doesn't change, the query is still permanently retained,
|
|
124
|
+
// and the temporary retain is redundant.
|
|
125
|
+
QueryResource.releaseTemporaryRetain(preparedQueryResult);
|
|
126
|
+
// This effect is intended to run on every commit, thus no dependency
|
|
127
|
+
});
|
|
128
|
+
|
|
123
129
|
const {fragmentNode, fragmentRef} = preparedQueryResult;
|
|
124
130
|
const {data} = useFragmentNode(
|
|
125
131
|
fragmentNode,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
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.
|
|
@@ -13,25 +13,9 @@
|
|
|
13
13
|
|
|
14
14
|
'use strict';
|
|
15
15
|
|
|
16
|
-
const getPaginationVariables = require('./getPaginationVariables');
|
|
17
|
-
const getValueAtPath = require('./getValueAtPath');
|
|
18
|
-
const invariant = require('invariant');
|
|
19
|
-
const useFetchTrackingRef = require('./useFetchTrackingRef');
|
|
20
|
-
const useIsMountedRef = require('./useIsMountedRef');
|
|
21
|
-
const useIsOperationNodeActive = require('./useIsOperationNodeActive');
|
|
22
|
-
const useRelayEnvironment = require('./useRelayEnvironment');
|
|
23
|
-
const warning = require('warning');
|
|
24
|
-
|
|
25
|
-
const {useCallback, useEffect, useState} = require('react');
|
|
26
|
-
const {
|
|
27
|
-
ConnectionInterface,
|
|
28
|
-
__internal: {fetchQuery},
|
|
29
|
-
createOperationDescriptor,
|
|
30
|
-
getSelector,
|
|
31
|
-
} = require('relay-runtime');
|
|
32
|
-
|
|
33
16
|
import type {
|
|
34
17
|
ConcreteRequest,
|
|
18
|
+
Direction,
|
|
35
19
|
Disposable,
|
|
36
20
|
GraphQLResponse,
|
|
37
21
|
Observer,
|
|
@@ -41,7 +25,21 @@ import type {
|
|
|
41
25
|
VariablesOf,
|
|
42
26
|
} from 'relay-runtime';
|
|
43
27
|
|
|
44
|
-
|
|
28
|
+
const useFetchTrackingRef = require('./useFetchTrackingRef');
|
|
29
|
+
const useIsMountedRef = require('./useIsMountedRef');
|
|
30
|
+
const useIsOperationNodeActive = require('./useIsOperationNodeActive');
|
|
31
|
+
const useRelayEnvironment = require('./useRelayEnvironment');
|
|
32
|
+
const invariant = require('invariant');
|
|
33
|
+
const {useCallback, useEffect, useState} = require('react');
|
|
34
|
+
const {
|
|
35
|
+
ConnectionInterface,
|
|
36
|
+
__internal: {fetchQuery},
|
|
37
|
+
createOperationDescriptor,
|
|
38
|
+
getPaginationVariables,
|
|
39
|
+
getSelector,
|
|
40
|
+
getValueAtPath,
|
|
41
|
+
} = require('relay-runtime');
|
|
42
|
+
const warning = require('warning');
|
|
45
43
|
|
|
46
44
|
export type LoadMoreFn<TQuery: OperationType> = (
|
|
47
45
|
count: number,
|
|
@@ -84,12 +82,8 @@ function useLoadMoreFunction<TQuery: OperationType>(
|
|
|
84
82
|
identifierField,
|
|
85
83
|
} = args;
|
|
86
84
|
const environment = useRelayEnvironment();
|
|
87
|
-
const {
|
|
88
|
-
|
|
89
|
-
startFetch,
|
|
90
|
-
disposeFetch,
|
|
91
|
-
completeFetch,
|
|
92
|
-
} = useFetchTrackingRef();
|
|
85
|
+
const {isFetchingRef, startFetch, disposeFetch, completeFetch} =
|
|
86
|
+
useFetchTrackingRef();
|
|
93
87
|
const identifierValue =
|
|
94
88
|
identifierField != null &&
|
|
95
89
|
fragmentData != null &&
|
|
@@ -98,9 +92,8 @@ function useLoadMoreFunction<TQuery: OperationType>(
|
|
|
98
92
|
: null;
|
|
99
93
|
const isMountedRef = useIsMountedRef();
|
|
100
94
|
const [mirroredEnvironment, setMirroredEnvironment] = useState(environment);
|
|
101
|
-
const [mirroredFragmentIdentifier, setMirroredFragmentIdentifier] =
|
|
102
|
-
fragmentIdentifier
|
|
103
|
-
);
|
|
95
|
+
const [mirroredFragmentIdentifier, setMirroredFragmentIdentifier] =
|
|
96
|
+
useState(fragmentIdentifier);
|
|
104
97
|
|
|
105
98
|
const isParentQueryActive = useIsOperationNodeActive(
|
|
106
99
|
fragmentNode,
|
|
@@ -190,7 +183,6 @@ function useLoadMoreFunction<TQuery: OperationType>(
|
|
|
190
183
|
const parentVariables = fragmentSelector.owner.variables;
|
|
191
184
|
const fragmentVariables = fragmentSelector.variables;
|
|
192
185
|
const extraVariables = options?.UNSTABLE_extraVariables;
|
|
193
|
-
// $FlowFixMe[cannot-spread-interface]
|
|
194
186
|
const baseVariables = {
|
|
195
187
|
...parentVariables,
|
|
196
188
|
...fragmentVariables,
|
|
@@ -200,7 +192,6 @@ function useLoadMoreFunction<TQuery: OperationType>(
|
|
|
200
192
|
count,
|
|
201
193
|
cursor,
|
|
202
194
|
baseVariables,
|
|
203
|
-
// $FlowFixMe[cannot-spread-interface]
|
|
204
195
|
{...extraVariables},
|
|
205
196
|
paginationMetadata,
|
|
206
197
|
);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
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.
|
|
@@ -13,19 +13,17 @@
|
|
|
13
13
|
|
|
14
14
|
'use strict';
|
|
15
15
|
|
|
16
|
-
const React = require('react');
|
|
17
|
-
|
|
18
|
-
const useMemoVariables = require('./useMemoVariables');
|
|
19
|
-
|
|
20
|
-
const {createOperationDescriptor, getRequest} = require('relay-runtime');
|
|
21
|
-
|
|
22
16
|
import type {
|
|
17
|
+
CacheConfig,
|
|
23
18
|
GraphQLTaggedNode,
|
|
24
19
|
OperationDescriptor,
|
|
25
20
|
Variables,
|
|
26
|
-
CacheConfig,
|
|
27
21
|
} from 'relay-runtime';
|
|
28
22
|
|
|
23
|
+
const useMemoVariables = require('./useMemoVariables');
|
|
24
|
+
const React = require('react');
|
|
25
|
+
const {createOperationDescriptor, getRequest} = require('relay-runtime');
|
|
26
|
+
|
|
29
27
|
const {useMemo} = React;
|
|
30
28
|
|
|
31
29
|
function useMemoOperationDescriptor(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
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.
|
|
@@ -13,11 +13,10 @@
|
|
|
13
13
|
|
|
14
14
|
'use strict';
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
import type {Variables} from 'relay-runtime';
|
|
17
17
|
|
|
18
18
|
const areEqual = require('areEqual');
|
|
19
|
-
|
|
20
|
-
import type {Variables} from 'relay-runtime';
|
|
19
|
+
const React = require('react');
|
|
21
20
|
|
|
22
21
|
const {useMemo, useRef, useState} = React;
|
|
23
22
|
|
|
@@ -45,9 +44,10 @@ function useMemoVariables<TVariables: Variables | null>(
|
|
|
45
44
|
// NOTE: We disable react-hooks-deps warning because we explicitly
|
|
46
45
|
// don't want to memoize on object identity
|
|
47
46
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
48
|
-
const memoVariables = useMemo(
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
const memoVariables = useMemo(
|
|
48
|
+
() => variables,
|
|
49
|
+
[variablesChangedGenerationRef.current],
|
|
50
|
+
);
|
|
51
51
|
return [memoVariables, variablesChangedGenerationRef.current ?? 0];
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
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.
|
|
@@ -13,46 +13,43 @@
|
|
|
13
13
|
|
|
14
14
|
'use strict';
|
|
15
15
|
|
|
16
|
-
const React = require('react');
|
|
17
|
-
|
|
18
|
-
const useRelayEnvironment = require('./useRelayEnvironment');
|
|
19
|
-
|
|
20
|
-
const {commitMutation: defaultCommitMutation} = require('relay-runtime');
|
|
21
|
-
const {useState, useEffect, useRef, useCallback} = React;
|
|
22
|
-
const useIsMountedRef = require('./useIsMountedRef');
|
|
23
|
-
|
|
24
16
|
import type {
|
|
25
|
-
|
|
17
|
+
DeclarativeMutationConfig,
|
|
26
18
|
Disposable,
|
|
19
|
+
GraphQLTaggedNode,
|
|
20
|
+
IEnvironment,
|
|
27
21
|
MutationConfig,
|
|
28
22
|
MutationParameters,
|
|
29
|
-
IEnvironment,
|
|
30
23
|
PayloadError,
|
|
31
|
-
DeclarativeMutationConfig,
|
|
32
24
|
SelectorStoreUpdater,
|
|
33
25
|
UploadableMap,
|
|
34
26
|
} from 'relay-runtime';
|
|
35
27
|
|
|
28
|
+
const useIsMountedRef = require('./useIsMountedRef');
|
|
29
|
+
const useRelayEnvironment = require('./useRelayEnvironment');
|
|
30
|
+
const React = require('react');
|
|
31
|
+
const {commitMutation: defaultCommitMutation} = require('relay-runtime');
|
|
32
|
+
|
|
33
|
+
const {useState, useEffect, useRef, useCallback} = React;
|
|
34
|
+
|
|
36
35
|
export type UseMutationConfig<TMutation: MutationParameters> = {|
|
|
37
36
|
configs?: Array<DeclarativeMutationConfig>,
|
|
38
37
|
onError?: ?(error: Error) => void,
|
|
39
38
|
onCompleted?: ?(
|
|
40
|
-
response:
|
|
39
|
+
response: TMutation['response'],
|
|
41
40
|
errors: ?Array<PayloadError>,
|
|
42
41
|
) => void,
|
|
42
|
+
onNext?: ?() => void,
|
|
43
43
|
onUnsubscribe?: ?() => void,
|
|
44
|
-
optimisticResponse?:
|
|
45
|
-
{
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
>,
|
|
52
|
-
optimisticUpdater?: ?SelectorStoreUpdater,
|
|
53
|
-
updater?: ?SelectorStoreUpdater,
|
|
44
|
+
optimisticResponse?: {
|
|
45
|
+
+rawResponse?: {...},
|
|
46
|
+
...TMutation,
|
|
47
|
+
...
|
|
48
|
+
}['rawResponse'],
|
|
49
|
+
optimisticUpdater?: ?SelectorStoreUpdater<TMutation['response']>,
|
|
50
|
+
updater?: ?SelectorStoreUpdater<TMutation['response']>,
|
|
54
51
|
uploadables?: UploadableMap,
|
|
55
|
-
variables:
|
|
52
|
+
variables: TMutation['variables'],
|
|
56
53
|
|};
|
|
57
54
|
|
|
58
55
|
function useMutation<TMutation: MutationParameters>(
|
|
@@ -105,15 +102,18 @@ function useMutation<TMutation: MutationParameters>(
|
|
|
105
102
|
mutation,
|
|
106
103
|
onCompleted: (response, errors) => {
|
|
107
104
|
cleanup(disposable);
|
|
108
|
-
config.onCompleted
|
|
105
|
+
config.onCompleted?.(response, errors);
|
|
109
106
|
},
|
|
110
107
|
onError: error => {
|
|
111
108
|
cleanup(disposable);
|
|
112
|
-
config.onError
|
|
109
|
+
config.onError?.(error);
|
|
113
110
|
},
|
|
114
111
|
onUnsubscribe: () => {
|
|
115
112
|
cleanup(disposable);
|
|
116
|
-
config.onUnsubscribe
|
|
113
|
+
config.onUnsubscribe?.();
|
|
114
|
+
},
|
|
115
|
+
onNext: () => {
|
|
116
|
+
config.onNext?.();
|
|
117
117
|
},
|
|
118
118
|
});
|
|
119
119
|
inFlightMutationsRef.current.add(disposable);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
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.
|
|
@@ -13,24 +13,26 @@
|
|
|
13
13
|
|
|
14
14
|
'use strict';
|
|
15
15
|
|
|
16
|
-
const getPaginationMetadata = require('./getPaginationMetadata');
|
|
17
|
-
const useLoadMoreFunction = require('./useLoadMoreFunction');
|
|
18
|
-
const useRefetchableFragmentNode = require('./useRefetchableFragmentNode');
|
|
19
|
-
const useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
|
|
20
|
-
|
|
21
|
-
const {useCallback, useDebugValue, useState} = require('react');
|
|
22
|
-
const {getFragment, getFragmentIdentifier} = require('relay-runtime');
|
|
23
|
-
|
|
24
16
|
import type {LoadMoreFn, UseLoadMoreFunctionArgs} from './useLoadMoreFunction';
|
|
25
17
|
import type {RefetchFnDynamic} from './useRefetchableFragmentNode';
|
|
26
18
|
import type {
|
|
19
|
+
FragmentType,
|
|
27
20
|
GraphQLResponse,
|
|
28
21
|
GraphQLTaggedNode,
|
|
29
22
|
Observer,
|
|
30
23
|
OperationType,
|
|
31
|
-
FragmentReference,
|
|
32
24
|
} from 'relay-runtime';
|
|
33
25
|
|
|
26
|
+
const useLoadMoreFunction = require('./useLoadMoreFunction');
|
|
27
|
+
const useRefetchableFragmentNode = require('./useRefetchableFragmentNode');
|
|
28
|
+
const useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
|
|
29
|
+
const {useCallback, useDebugValue, useState} = require('react');
|
|
30
|
+
const {
|
|
31
|
+
getFragment,
|
|
32
|
+
getFragmentIdentifier,
|
|
33
|
+
getPaginationMetadata,
|
|
34
|
+
} = require('relay-runtime');
|
|
35
|
+
|
|
34
36
|
export type ReturnType<TQuery: OperationType, TKey, TFragmentData> = {|
|
|
35
37
|
data: TFragmentData,
|
|
36
38
|
loadNext: LoadMoreFn<TQuery>,
|
|
@@ -44,7 +46,7 @@ export type ReturnType<TQuery: OperationType, TKey, TFragmentData> = {|
|
|
|
44
46
|
|
|
45
47
|
function usePaginationFragment<
|
|
46
48
|
TQuery: OperationType,
|
|
47
|
-
TKey: ?{+$data?: mixed, +$
|
|
49
|
+
TKey: ?{+$data?: mixed, +$fragmentSpreads: FragmentType, ...},
|
|
48
50
|
>(
|
|
49
51
|
fragmentInput: GraphQLTaggedNode,
|
|
50
52
|
parentFragmentRef: TKey,
|
|
@@ -82,42 +84,34 @@ function usePaginationFragment<
|
|
|
82
84
|
const fragmentIdentifier = getFragmentIdentifier(fragmentNode, fragmentRef);
|
|
83
85
|
|
|
84
86
|
// Backward pagination
|
|
85
|
-
const [
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
identifierField,
|
|
99
|
-
paginationMetadata,
|
|
100
|
-
paginationRequest,
|
|
101
|
-
});
|
|
87
|
+
const [loadPrevious, hasPrevious, isLoadingPrevious, disposeFetchPrevious] =
|
|
88
|
+
useLoadMore<TQuery>({
|
|
89
|
+
componentDisplayName,
|
|
90
|
+
connectionPathInFragmentData,
|
|
91
|
+
direction: 'backward',
|
|
92
|
+
fragmentData,
|
|
93
|
+
fragmentIdentifier,
|
|
94
|
+
fragmentNode,
|
|
95
|
+
fragmentRef,
|
|
96
|
+
identifierField,
|
|
97
|
+
paginationMetadata,
|
|
98
|
+
paginationRequest,
|
|
99
|
+
});
|
|
102
100
|
|
|
103
101
|
// Forward pagination
|
|
104
|
-
const [
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
identifierField,
|
|
118
|
-
paginationMetadata,
|
|
119
|
-
paginationRequest,
|
|
120
|
-
});
|
|
102
|
+
const [loadNext, hasNext, isLoadingNext, disposeFetchNext] =
|
|
103
|
+
useLoadMore<TQuery>({
|
|
104
|
+
componentDisplayName,
|
|
105
|
+
connectionPathInFragmentData,
|
|
106
|
+
direction: 'forward',
|
|
107
|
+
fragmentData,
|
|
108
|
+
fragmentIdentifier,
|
|
109
|
+
fragmentNode,
|
|
110
|
+
fragmentRef,
|
|
111
|
+
identifierField,
|
|
112
|
+
paginationMetadata,
|
|
113
|
+
paginationRequest,
|
|
114
|
+
});
|
|
121
115
|
|
|
122
116
|
const refetchPagination: RefetchFnDynamic<TQuery, TKey> = useCallback(
|
|
123
117
|
(variables, options) => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
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.
|
|
@@ -13,24 +13,23 @@
|
|
|
13
13
|
|
|
14
14
|
'use strict';
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
import type {PreloadedQuery} from './EntryPointTypes.flow';
|
|
17
|
+
import type {
|
|
18
|
+
GraphQLTaggedNode,
|
|
19
|
+
OperationType,
|
|
20
|
+
RenderPolicy,
|
|
21
|
+
} from 'relay-runtime';
|
|
22
|
+
|
|
23
|
+
const {useTrackLoadQueryInRender} = require('./loadQuery');
|
|
17
24
|
const useLazyLoadQueryNode = require('./useLazyLoadQueryNode');
|
|
18
25
|
const useMemoOperationDescriptor = require('./useMemoOperationDescriptor');
|
|
19
26
|
const useRelayEnvironment = require('./useRelayEnvironment');
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
const {useTrackLoadQueryInRender} = require('./loadQuery');
|
|
27
|
+
const invariant = require('invariant');
|
|
23
28
|
const {useDebugValue} = require('react');
|
|
24
29
|
const {
|
|
25
30
|
__internal: {fetchQueryDeduped, fetchQuery},
|
|
26
31
|
} = require('relay-runtime');
|
|
27
|
-
|
|
28
|
-
import type {PreloadedQuery} from './EntryPointTypes.flow';
|
|
29
|
-
import type {
|
|
30
|
-
GraphQLTaggedNode,
|
|
31
|
-
OperationType,
|
|
32
|
-
RenderPolicy,
|
|
33
|
-
} from 'relay-runtime';
|
|
32
|
+
const warning = require('warning');
|
|
34
33
|
|
|
35
34
|
function usePreloadedQuery<TQuery: OperationType>(
|
|
36
35
|
gqlQuery: GraphQLTaggedNode,
|
|
@@ -38,19 +37,14 @@ function usePreloadedQuery<TQuery: OperationType>(
|
|
|
38
37
|
options?: {|
|
|
39
38
|
UNSTABLE_renderPolicy?: RenderPolicy,
|
|
40
39
|
|},
|
|
41
|
-
):
|
|
40
|
+
): TQuery['response'] {
|
|
42
41
|
// We need to use this hook in order to be able to track if
|
|
43
42
|
// loadQuery was called during render
|
|
44
43
|
useTrackLoadQueryInRender();
|
|
45
44
|
|
|
46
45
|
const environment = useRelayEnvironment();
|
|
47
|
-
const {
|
|
48
|
-
|
|
49
|
-
fetchPolicy,
|
|
50
|
-
source,
|
|
51
|
-
variables,
|
|
52
|
-
networkCacheConfig,
|
|
53
|
-
} = preloadedQuery;
|
|
46
|
+
const {fetchKey, fetchPolicy, source, variables, networkCacheConfig} =
|
|
47
|
+
preloadedQuery;
|
|
54
48
|
const operation = useMemoOperationDescriptor(
|
|
55
49
|
gqlQuery,
|
|
56
50
|
variables,
|