react-relay 12.0.0 → 13.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/LICENSE +1 -1
- package/README.md +47 -0
- package/ReactRelayContainerUtils.js.flow +1 -1
- package/ReactRelayContext.js +2 -2
- package/ReactRelayContext.js.flow +3 -4
- package/ReactRelayFragmentContainer.js.flow +11 -17
- package/ReactRelayFragmentMockRenderer.js.flow +2 -2
- package/ReactRelayLocalQueryRenderer.js.flow +7 -8
- package/ReactRelayPaginationContainer.js.flow +30 -40
- package/ReactRelayQueryFetcher.js.flow +10 -11
- package/ReactRelayQueryRenderer.js.flow +16 -16
- package/ReactRelayQueryRendererContext.js.flow +1 -1
- package/ReactRelayRefetchContainer.js.flow +25 -33
- 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 +2 -3
- package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +2 -3
- 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 +14 -11
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +14 -11
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +14 -9
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +14 -11
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +14 -9
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +14 -11
- package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +16 -13
- package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +16 -13
- package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +14 -11
- package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +14 -11
- package/assertFragmentMap.js.flow +3 -3
- package/buildReactRelayContainer.js.flow +12 -11
- package/getRootVariablesForFragments.js.flow +3 -5
- package/hooks.js +2 -2
- package/hooks.js.flow +4 -6
- package/index.js +2 -2
- package/index.js.flow +5 -7
- package/isRelayEnvironment.js.flow +1 -1
- package/jest-react/enqueueTask.js.flow +2 -2
- package/jest-react/index.js.flow +1 -1
- package/jest-react/internalAct.js.flow +2 -4
- package/legacy.js +2 -2
- package/legacy.js.flow +1 -1
- package/lib/ReactRelayContainerUtils.js +1 -1
- package/lib/ReactRelayContext.js +1 -1
- package/lib/ReactRelayFragmentContainer.js +5 -5
- package/lib/ReactRelayFragmentMockRenderer.js +3 -3
- package/lib/ReactRelayLocalQueryRenderer.js +8 -9
- package/lib/ReactRelayPaginationContainer.js +19 -23
- package/lib/ReactRelayQueryFetcher.js +3 -3
- package/lib/ReactRelayQueryRenderer.js +5 -5
- package/lib/ReactRelayQueryRendererContext.js +1 -1
- package/lib/ReactRelayRefetchContainer.js +13 -15
- 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 +1 -1
- package/lib/jest-react/internalAct.js +3 -4
- package/lib/legacy.js +1 -1
- package/lib/multi-actor/ActorChange.js +3 -3
- package/lib/multi-actor/index.js +1 -1
- package/lib/multi-actor/useRelayActorEnvironment.js +3 -3
- 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 +242 -46
- 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 +84 -5
- package/lib/relay-hooks/RelayEnvironmentProvider.js +1 -1
- package/lib/relay-hooks/SuspenseResource.js +130 -0
- package/lib/relay-hooks/loadEntryPoint.js +1 -1
- package/lib/relay-hooks/loadQuery.js +9 -10
- package/lib/relay-hooks/preloadQuery_DEPRECATED.js +25 -11
- package/lib/relay-hooks/prepareEntryPoint_DEPRECATED.js +1 -1
- package/lib/relay-hooks/useBlockingPaginationFragment.js +3 -3
- 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 +5 -5
- package/lib/relay-hooks/useLoadMoreFunction.js +8 -10
- 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 +1 -1
- package/lib/relay-hooks/usePreloadedQuery.js +6 -6
- package/lib/relay-hooks/useQueryLoader.js +5 -5
- package/lib/relay-hooks/useRefetchableFragment.js +1 -1
- package/lib/relay-hooks/useRefetchableFragmentNode.js +11 -13
- 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 +1 -1
- package/multi-actor/ActorChange.js.flow +4 -5
- package/multi-actor/index.js.flow +1 -1
- package/multi-actor/useRelayActorEnvironment.js.flow +6 -8
- package/package.json +3 -3
- package/react-relay-hooks.js +2 -2
- package/react-relay-hooks.min.js +3 -3
- package/react-relay-legacy.js +2 -2
- package/react-relay-legacy.min.js +3 -3
- package/react-relay.js +2 -2
- package/react-relay.min.js +3 -3
- package/readContext.js.flow +1 -1
- package/relay-hooks/EntryPointContainer.react.js.flow +9 -16
- package/relay-hooks/EntryPointTypes.flow.js.flow +19 -25
- package/relay-hooks/FragmentResource.js.flow +221 -35
- 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 +120 -18
- package/relay-hooks/RelayEnvironmentProvider.js.flow +10 -10
- 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 +23 -24
- package/relay-hooks/preloadQuery_DEPRECATED.js.flow +30 -14
- package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +7 -13
- package/relay-hooks/useBlockingPaginationFragment.js.flow +13 -14
- 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 +12 -14
- package/relay-hooks/useLoadMoreFunction.js.flow +20 -28
- 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 +38 -47
- package/relay-hooks/usePreloadedQuery.js.flow +14 -20
- package/relay-hooks/useQueryLoader.js.flow +14 -17
- package/relay-hooks/useRefetchableFragment.js.flow +8 -9
- package/relay-hooks/useRefetchableFragmentNode.js.flow +23 -31
- 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 +7 -8
|
@@ -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,82 +13,51 @@
|
|
|
13
13
|
|
|
14
14
|
'use strict';
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
const useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
|
|
16
|
+
import type {Fragment, FragmentType, GraphQLTaggedNode} from 'relay-runtime';
|
|
18
17
|
|
|
19
18
|
const {useTrackLoadQueryInRender} = require('./loadQuery');
|
|
19
|
+
const useFragmentNode = require('./useFragmentNode');
|
|
20
|
+
const useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
|
|
20
21
|
const {useDebugValue} = require('react');
|
|
21
22
|
const {getFragment} = require('relay-runtime');
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
// - nullable if the provided ref type is nullable
|
|
28
|
-
// - array of non-nullable if the privoided ref type is an array of
|
|
29
|
-
// non-nullable refs
|
|
30
|
-
// - array of nullable if the privoided ref type is an array of nullable refs
|
|
24
|
+
type HasSpread<TFragmentType> = {
|
|
25
|
+
+$fragmentSpreads: TFragmentType,
|
|
26
|
+
...
|
|
27
|
+
};
|
|
31
28
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
): $Call<<TFragmentData>({+$data?: TFragmentData, ...}) => TFragmentData, TKey>;
|
|
29
|
+
// if the key is non-nullable, return non-nullable value
|
|
30
|
+
declare function useFragment<TFragmentType: FragmentType, TData>(
|
|
31
|
+
fragment: Fragment<TFragmentType, TData>,
|
|
32
|
+
key: HasSpread<TFragmentType>,
|
|
33
|
+
): TData;
|
|
38
34
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
): $Call<
|
|
45
|
-
<TFragmentData>(?{+$data?: TFragmentData, ...}) => ?TFragmentData,
|
|
46
|
-
TKey,
|
|
47
|
-
>;
|
|
35
|
+
// if the key is nullable, return nullable value
|
|
36
|
+
declare function useFragment<TFragmentType: FragmentType, TData>(
|
|
37
|
+
fragment: Fragment<TFragmentType, TData>,
|
|
38
|
+
key: ?HasSpread<TFragmentType>,
|
|
39
|
+
): ?TData;
|
|
48
40
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}>,
|
|
55
|
-
>(
|
|
56
|
-
fragmentInput: GraphQLTaggedNode,
|
|
57
|
-
fragmentRef: TKey,
|
|
58
|
-
): $Call<
|
|
59
|
-
<TFragmentData>(
|
|
60
|
-
$ReadOnlyArray<{+$data?: TFragmentData, ...}>,
|
|
61
|
-
) => TFragmentData,
|
|
62
|
-
TKey,
|
|
63
|
-
>;
|
|
41
|
+
// if the key is a non-nullable array of keys, return non-nullable array
|
|
42
|
+
declare function useFragment<TFragmentType: FragmentType, TData>(
|
|
43
|
+
fragment: Fragment<TFragmentType, TData>,
|
|
44
|
+
key: $ReadOnlyArray<HasSpread<TFragmentType>>,
|
|
45
|
+
): TData;
|
|
64
46
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}>,
|
|
71
|
-
>(
|
|
72
|
-
fragmentInput: GraphQLTaggedNode,
|
|
73
|
-
fragmentRef: TKey,
|
|
74
|
-
): $Call<
|
|
75
|
-
<TFragmentData>(
|
|
76
|
-
?$ReadOnlyArray<{+$data?: TFragmentData, ...}>,
|
|
77
|
-
) => ?TFragmentData,
|
|
78
|
-
TKey,
|
|
79
|
-
>;
|
|
47
|
+
// if the key is a nullable array of keys, return nullable array
|
|
48
|
+
declare function useFragment<TFragmentType: FragmentType, TData>(
|
|
49
|
+
fragment: Fragment<TFragmentType, TData>,
|
|
50
|
+
key: ?$ReadOnlyArray<HasSpread<TFragmentType>>,
|
|
51
|
+
): ?TData;
|
|
80
52
|
|
|
81
|
-
function useFragment(
|
|
82
|
-
fragmentInput: GraphQLTaggedNode,
|
|
83
|
-
fragmentRef: mixed,
|
|
84
|
-
): mixed {
|
|
53
|
+
function useFragment(fragment: GraphQLTaggedNode, key: mixed): mixed {
|
|
85
54
|
// We need to use this hook in order to be able to track if
|
|
86
55
|
// loadQuery was called during render
|
|
87
56
|
useTrackLoadQueryInRender();
|
|
88
57
|
|
|
89
|
-
const fragmentNode = getFragment(
|
|
58
|
+
const fragmentNode = getFragment(fragment);
|
|
90
59
|
useStaticFragmentNodeWarning(fragmentNode, 'first argument of useFragment()');
|
|
91
|
-
const {data} = useFragmentNode<_>(fragmentNode,
|
|
60
|
+
const {data} = useFragmentNode<_>(fragmentNode, key, 'useFragment()');
|
|
92
61
|
if (__DEV__) {
|
|
93
62
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
94
63
|
useDebugValue({fragment: fragmentNode.name, data});
|
|
@@ -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,14 +13,13 @@
|
|
|
13
13
|
|
|
14
14
|
'use strict';
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
const warning = require('warning');
|
|
16
|
+
import type {ReaderFragment} from 'relay-runtime';
|
|
18
17
|
|
|
19
18
|
const {getFragmentResourceForEnvironment} = require('./FragmentResource');
|
|
19
|
+
const useRelayEnvironment = require('./useRelayEnvironment');
|
|
20
20
|
const {useEffect, useRef, useState} = require('react');
|
|
21
21
|
const {getFragmentIdentifier} = require('relay-runtime');
|
|
22
|
-
|
|
23
|
-
import type {ReaderFragment} from 'relay-runtime';
|
|
22
|
+
const warning = require('warning');
|
|
24
23
|
|
|
25
24
|
type ReturnType<TFragmentData: mixed> = {|
|
|
26
25
|
data: TFragmentData,
|
|
@@ -51,9 +50,8 @@ function useFragmentNode<TFragmentData: mixed>(
|
|
|
51
50
|
const isListeningForUpdatesRef = useRef(true);
|
|
52
51
|
function enableStoreUpdates() {
|
|
53
52
|
isListeningForUpdatesRef.current = true;
|
|
54
|
-
const didMissUpdates =
|
|
55
|
-
fragmentResult
|
|
56
|
-
)[0];
|
|
53
|
+
const didMissUpdates =
|
|
54
|
+
FragmentResource.checkMissedUpdates(fragmentResult)[0];
|
|
57
55
|
if (didMissUpdates) {
|
|
58
56
|
handleDataUpdate();
|
|
59
57
|
}
|
|
@@ -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.
|
|
@@ -11,18 +11,16 @@
|
|
|
11
11
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
import type {ReaderFragment} from 'relay-runtime';
|
|
15
15
|
|
|
16
|
-
const invariant = require('invariant');
|
|
17
16
|
const useRelayEnvironment = require('./useRelayEnvironment');
|
|
18
|
-
|
|
17
|
+
const invariant = require('invariant');
|
|
18
|
+
const React = require('react');
|
|
19
19
|
const {
|
|
20
20
|
__internal: {getObservableForActiveRequest},
|
|
21
21
|
getSelector,
|
|
22
22
|
} = require('relay-runtime');
|
|
23
23
|
|
|
24
|
-
import type {ReaderFragment} from 'relay-runtime';
|
|
25
|
-
|
|
26
24
|
const {useEffect, useState, useMemo} = React;
|
|
27
25
|
|
|
28
26
|
function useIsOperationNodeActive(
|
|
@@ -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.
|
|
@@ -11,15 +11,14 @@
|
|
|
11
11
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
+
import type {FragmentType, GraphQLTaggedNode} from 'relay-runtime';
|
|
15
|
+
|
|
14
16
|
const useIsOperationNodeActive = require('./useIsOperationNodeActive');
|
|
15
17
|
const useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
|
|
16
|
-
|
|
17
18
|
const {getFragment} = require('relay-runtime');
|
|
18
19
|
|
|
19
|
-
import type {GraphQLTaggedNode, FragmentReference} from 'relay-runtime';
|
|
20
|
-
|
|
21
20
|
function useIsParentQueryActive<
|
|
22
|
-
TKey: ?{+$data?: mixed, +$
|
|
21
|
+
TKey: ?{+$data?: mixed, +$fragmentSpreads: FragmentType, ...},
|
|
23
22
|
>(fragmentInput: GraphQLTaggedNode, fragmentRef: TKey): boolean {
|
|
24
23
|
const fragmentNode = getFragment(fragmentInput);
|
|
25
24
|
useStaticFragmentNodeWarning(
|
|
@@ -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);
|
|
@@ -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,33 @@
|
|
|
13
13
|
|
|
14
14
|
'use strict';
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
import type {
|
|
17
|
+
ConcreteRequest,
|
|
18
|
+
Direction,
|
|
19
|
+
Disposable,
|
|
20
|
+
GraphQLResponse,
|
|
21
|
+
Observer,
|
|
22
|
+
OperationType,
|
|
23
|
+
ReaderFragment,
|
|
24
|
+
ReaderPaginationMetadata,
|
|
25
|
+
VariablesOf,
|
|
26
|
+
} from 'relay-runtime';
|
|
27
|
+
|
|
17
28
|
const useFetchTrackingRef = require('./useFetchTrackingRef');
|
|
18
29
|
const useIsMountedRef = require('./useIsMountedRef');
|
|
19
30
|
const useIsOperationNodeActive = require('./useIsOperationNodeActive');
|
|
20
31
|
const useRelayEnvironment = require('./useRelayEnvironment');
|
|
21
|
-
const
|
|
22
|
-
|
|
32
|
+
const invariant = require('invariant');
|
|
23
33
|
const {useCallback, useEffect, useState} = require('react');
|
|
24
34
|
const {
|
|
25
35
|
ConnectionInterface,
|
|
26
36
|
__internal: {fetchQuery},
|
|
27
37
|
createOperationDescriptor,
|
|
28
38
|
getPaginationVariables,
|
|
29
|
-
getValueAtPath,
|
|
30
39
|
getSelector,
|
|
40
|
+
getValueAtPath,
|
|
31
41
|
} = require('relay-runtime');
|
|
32
|
-
|
|
33
|
-
import type {
|
|
34
|
-
ConcreteRequest,
|
|
35
|
-
Direction,
|
|
36
|
-
Disposable,
|
|
37
|
-
GraphQLResponse,
|
|
38
|
-
Observer,
|
|
39
|
-
OperationType,
|
|
40
|
-
ReaderFragment,
|
|
41
|
-
ReaderPaginationMetadata,
|
|
42
|
-
VariablesOf,
|
|
43
|
-
} from 'relay-runtime';
|
|
42
|
+
const warning = require('warning');
|
|
44
43
|
|
|
45
44
|
export type LoadMoreFn<TQuery: OperationType> = (
|
|
46
45
|
count: number,
|
|
@@ -83,12 +82,8 @@ function useLoadMoreFunction<TQuery: OperationType>(
|
|
|
83
82
|
identifierField,
|
|
84
83
|
} = args;
|
|
85
84
|
const environment = useRelayEnvironment();
|
|
86
|
-
const {
|
|
87
|
-
|
|
88
|
-
startFetch,
|
|
89
|
-
disposeFetch,
|
|
90
|
-
completeFetch,
|
|
91
|
-
} = useFetchTrackingRef();
|
|
85
|
+
const {isFetchingRef, startFetch, disposeFetch, completeFetch} =
|
|
86
|
+
useFetchTrackingRef();
|
|
92
87
|
const identifierValue =
|
|
93
88
|
identifierField != null &&
|
|
94
89
|
fragmentData != null &&
|
|
@@ -97,9 +92,8 @@ function useLoadMoreFunction<TQuery: OperationType>(
|
|
|
97
92
|
: null;
|
|
98
93
|
const isMountedRef = useIsMountedRef();
|
|
99
94
|
const [mirroredEnvironment, setMirroredEnvironment] = useState(environment);
|
|
100
|
-
const [mirroredFragmentIdentifier, setMirroredFragmentIdentifier] =
|
|
101
|
-
fragmentIdentifier
|
|
102
|
-
);
|
|
95
|
+
const [mirroredFragmentIdentifier, setMirroredFragmentIdentifier] =
|
|
96
|
+
useState(fragmentIdentifier);
|
|
103
97
|
|
|
104
98
|
const isParentQueryActive = useIsOperationNodeActive(
|
|
105
99
|
fragmentNode,
|
|
@@ -189,7 +183,6 @@ function useLoadMoreFunction<TQuery: OperationType>(
|
|
|
189
183
|
const parentVariables = fragmentSelector.owner.variables;
|
|
190
184
|
const fragmentVariables = fragmentSelector.variables;
|
|
191
185
|
const extraVariables = options?.UNSTABLE_extraVariables;
|
|
192
|
-
// $FlowFixMe[cannot-spread-interface]
|
|
193
186
|
const baseVariables = {
|
|
194
187
|
...parentVariables,
|
|
195
188
|
...fragmentVariables,
|
|
@@ -199,7 +192,6 @@ function useLoadMoreFunction<TQuery: OperationType>(
|
|
|
199
192
|
count,
|
|
200
193
|
cursor,
|
|
201
194
|
baseVariables,
|
|
202
|
-
// $FlowFixMe[cannot-spread-interface]
|
|
203
195
|
{...extraVariables},
|
|
204
196
|
paginationMetadata,
|
|
205
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);
|