react-relay 16.2.0 → 17.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 +8 -6
- package/ReactRelayLocalQueryRenderer.js.flow +4 -1
- package/ReactRelayPaginationContainer.js.flow +2 -0
- package/ReactRelayQueryRenderer.js.flow +1 -1
- package/buildReactRelayContainer.js.flow +5 -3
- package/getRootVariablesForFragments.js.flow +1 -0
- package/hooks.js +1 -1
- package/index.js +1 -1
- package/legacy.js +1 -1
- package/lib/ReactRelayFragmentContainer.js +2 -2
- package/lib/buildReactRelayContainer.js +3 -3
- package/lib/relay-hooks/legacy/FragmentResource.js +14 -16
- package/lib/relay-hooks/{experimental/readFragmentInternal_EXPERIMENTAL.js → readFragmentInternal.js} +7 -5
- package/lib/relay-hooks/useFragment.js +3 -13
- package/lib/relay-hooks/{experimental/useFragmentInternal_EXPERIMENTAL.js → useFragmentInternal.js} +9 -7
- package/lib/relay-hooks/useLazyLoadQueryNode.js +2 -13
- package/lib/relay-hooks/usePaginationFragment.js +17 -13
- package/lib/relay-hooks/useRefetchableFragment.js +3 -12
- package/lib/relay-hooks/{experimental/useRefetchableFragmentInternal_EXPERIMENTAL.js → useRefetchableFragmentInternal.js} +7 -7
- package/multi-actor/useRelayActorEnvironment.js.flow +1 -1
- 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/relay-hooks/EntryPointTypes.flow.js.flow +14 -13
- package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +14 -1
- package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +21 -0
- package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +19 -0
- package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +22 -0
- package/relay-hooks/legacy/FragmentResource.js.flow +13 -16
- package/relay-hooks/legacy/useBlockingPaginationFragment.js.flow +2 -2
- package/relay-hooks/legacy/useFragmentNode.js.flow +1 -1
- package/relay-hooks/legacy/useRefetchableFragmentNode.js.flow +2 -2
- package/relay-hooks/loadQuery.js.flow +9 -8
- package/relay-hooks/{experimental/readFragmentInternal_EXPERIMENTAL.js.flow → readFragmentInternal.js.flow} +6 -4
- package/relay-hooks/useClientQuery.js.flow +1 -1
- package/relay-hooks/useEntryPointLoader.js.flow +1 -1
- package/relay-hooks/useFetchTrackingRef.js.flow +1 -1
- package/relay-hooks/useFragment.js.flow +8 -20
- package/relay-hooks/{experimental/useFragmentInternal_EXPERIMENTAL.js.flow → useFragmentInternal.js.flow} +14 -5
- package/relay-hooks/useIsMountedRef.js.flow +1 -1
- package/relay-hooks/useIsOperationNodeActive.js.flow +1 -1
- package/relay-hooks/useIsParentQueryActive.js.flow +5 -2
- package/relay-hooks/useLazyLoadQuery.js.flow +3 -2
- package/relay-hooks/useLazyLoadQueryNode.js.flow +3 -19
- package/relay-hooks/useLoadMoreFunction.js.flow +1 -1
- package/relay-hooks/useMemoOperationDescriptor.js.flow +1 -1
- package/relay-hooks/useMemoVariables.js.flow +1 -1
- package/relay-hooks/useMutation.js.flow +1 -1
- package/relay-hooks/usePaginationFragment.js.flow +62 -50
- package/relay-hooks/usePreloadedQuery.js.flow +2 -1
- package/relay-hooks/useQueryLoader.js.flow +2 -5
- package/relay-hooks/useRefetchableFragment.js.flow +7 -37
- package/relay-hooks/{experimental/useRefetchableFragmentInternal_EXPERIMENTAL.js.flow → useRefetchableFragmentInternal.js.flow} +11 -11
- package/relay-hooks/useRelayEnvironment.js.flow +1 -1
- package/relay-hooks/useStaticFragmentNodeWarning.js.flow +3 -1
- package/relay-hooks/useSubscribeToInvalidationState.js.flow +1 -1
- package/relay-hooks/useSubscription.js.flow +1 -1
- package/relay-hooks/useUnsafeRef_DEPRECATED.js.flow +1 -1
- package/lib/relay-hooks/HooksImplementation.js +0 -15
- package/lib/relay-hooks/experimental/useFragment_EXPERIMENTAL.js +0 -26
- package/lib/relay-hooks/experimental/usePaginationFragment_EXPERIMENTAL.js +0 -127
- package/lib/relay-hooks/experimental/useRefetchableFragment_EXPERIMENTAL.js +0 -23
- package/relay-hooks/HooksImplementation.js.flow +0 -45
- package/relay-hooks/experimental/useFragment_EXPERIMENTAL.js.flow +0 -72
- package/relay-hooks/experimental/usePaginationFragment_EXPERIMENTAL.js.flow +0 -161
- package/relay-hooks/experimental/useRefetchableFragment_EXPERIMENTAL.js.flow +0 -49
@@ -1,72 +0,0 @@
|
|
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
|
-
* @flow strict-local
|
8
|
-
* @format
|
9
|
-
* @oncall relay
|
10
|
-
*/
|
11
|
-
|
12
|
-
'use strict';
|
13
|
-
|
14
|
-
import type {Fragment, FragmentType, GraphQLTaggedNode} from 'relay-runtime';
|
15
|
-
|
16
|
-
const {useTrackLoadQueryInRender} = require('../loadQuery');
|
17
|
-
const useStaticFragmentNodeWarning = require('../useStaticFragmentNodeWarning');
|
18
|
-
const useFragmentInternal = require('./useFragmentInternal_EXPERIMENTAL');
|
19
|
-
const {useDebugValue} = require('react');
|
20
|
-
const {getFragment} = require('relay-runtime');
|
21
|
-
|
22
|
-
type HasSpread<TFragmentType> = {
|
23
|
-
+$fragmentSpreads: TFragmentType,
|
24
|
-
...
|
25
|
-
};
|
26
|
-
|
27
|
-
// if the key is non-nullable, return non-nullable value
|
28
|
-
declare function useFragment<TFragmentType: FragmentType, TData>(
|
29
|
-
fragment: Fragment<TFragmentType, TData>,
|
30
|
-
key: HasSpread<TFragmentType>,
|
31
|
-
): TData;
|
32
|
-
|
33
|
-
// if the key is nullable, return nullable value
|
34
|
-
declare function useFragment<TFragmentType: FragmentType, TData>(
|
35
|
-
fragment: Fragment<TFragmentType, TData>,
|
36
|
-
key: ?HasSpread<TFragmentType>,
|
37
|
-
): ?TData;
|
38
|
-
|
39
|
-
// if the key is a non-nullable array of keys, return non-nullable array
|
40
|
-
declare function useFragment<TFragmentType: FragmentType, TData>(
|
41
|
-
fragment: Fragment<TFragmentType, TData>,
|
42
|
-
key: $ReadOnlyArray<HasSpread<TFragmentType>>,
|
43
|
-
): TData;
|
44
|
-
|
45
|
-
// if the key is a nullable array of keys, return nullable array
|
46
|
-
declare function useFragment<TFragmentType: FragmentType, TData>(
|
47
|
-
fragment: Fragment<TFragmentType, TData>,
|
48
|
-
key: ?$ReadOnlyArray<HasSpread<TFragmentType>>,
|
49
|
-
): ?TData;
|
50
|
-
|
51
|
-
function useFragment(fragment: GraphQLTaggedNode, key: mixed): mixed {
|
52
|
-
// We need to use this hook in order to be able to track if
|
53
|
-
// loadQuery was called during render
|
54
|
-
useTrackLoadQueryInRender();
|
55
|
-
|
56
|
-
const fragmentNode = getFragment(fragment);
|
57
|
-
if (__DEV__) {
|
58
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
59
|
-
useStaticFragmentNodeWarning(
|
60
|
-
fragmentNode,
|
61
|
-
'first argument of useFragment()',
|
62
|
-
);
|
63
|
-
}
|
64
|
-
const data = useFragmentInternal(fragmentNode, key, 'useFragment()');
|
65
|
-
if (__DEV__) {
|
66
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
67
|
-
useDebugValue({fragment: fragmentNode.name, data});
|
68
|
-
}
|
69
|
-
return data;
|
70
|
-
}
|
71
|
-
|
72
|
-
module.exports = useFragment;
|
@@ -1,161 +0,0 @@
|
|
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
|
-
* @flow strict-local
|
8
|
-
* @format
|
9
|
-
* @oncall relay
|
10
|
-
*/
|
11
|
-
|
12
|
-
'use strict';
|
13
|
-
|
14
|
-
import type {LoadMoreFn, UseLoadMoreFunctionArgs} from '../useLoadMoreFunction';
|
15
|
-
import type {ReturnType} from '../usePaginationFragment';
|
16
|
-
import type {Options} from './useRefetchableFragmentInternal_EXPERIMENTAL';
|
17
|
-
import type {
|
18
|
-
FragmentType,
|
19
|
-
GraphQLResponse,
|
20
|
-
Observer,
|
21
|
-
RefetchableFragment,
|
22
|
-
Variables,
|
23
|
-
} from 'relay-runtime';
|
24
|
-
|
25
|
-
const useLoadMoreFunction = require('../useLoadMoreFunction');
|
26
|
-
const useRelayEnvironment = require('../useRelayEnvironment');
|
27
|
-
const useStaticFragmentNodeWarning = require('../useStaticFragmentNodeWarning');
|
28
|
-
const useRefetchableFragmentInternal = require('./useRefetchableFragmentInternal_EXPERIMENTAL');
|
29
|
-
const {useCallback, useDebugValue, useState} = require('react');
|
30
|
-
const {
|
31
|
-
getFragment,
|
32
|
-
getFragmentIdentifier,
|
33
|
-
getPaginationMetadata,
|
34
|
-
} = require('relay-runtime');
|
35
|
-
|
36
|
-
function usePaginationFragment<
|
37
|
-
TFragmentType: FragmentType,
|
38
|
-
TVariables: Variables,
|
39
|
-
TData,
|
40
|
-
TKey: ?{+$fragmentSpreads: TFragmentType, ...},
|
41
|
-
>(
|
42
|
-
fragmentInput: RefetchableFragment<TFragmentType, TData, TVariables>,
|
43
|
-
parentFragmentRef: TKey,
|
44
|
-
): ReturnType<TVariables, TData, TKey> {
|
45
|
-
const fragmentNode = getFragment(fragmentInput);
|
46
|
-
useStaticFragmentNodeWarning(
|
47
|
-
fragmentNode,
|
48
|
-
'first argument of usePaginationFragment()',
|
49
|
-
);
|
50
|
-
const componentDisplayName = 'usePaginationFragment()';
|
51
|
-
|
52
|
-
const {connectionPathInFragmentData, paginationRequest, paginationMetadata} =
|
53
|
-
getPaginationMetadata(fragmentNode, componentDisplayName);
|
54
|
-
|
55
|
-
const {fragmentData, fragmentRef, refetch} = useRefetchableFragmentInternal<
|
56
|
-
{variables: TVariables, response: TData},
|
57
|
-
{data?: TData},
|
58
|
-
>(fragmentNode, parentFragmentRef, componentDisplayName);
|
59
|
-
const fragmentIdentifier = getFragmentIdentifier(fragmentNode, fragmentRef);
|
60
|
-
|
61
|
-
// Backward pagination
|
62
|
-
const [loadPrevious, hasPrevious, isLoadingPrevious, disposeFetchPrevious] =
|
63
|
-
useLoadMore<TVariables>({
|
64
|
-
componentDisplayName,
|
65
|
-
connectionPathInFragmentData,
|
66
|
-
direction: 'backward',
|
67
|
-
fragmentData,
|
68
|
-
fragmentIdentifier,
|
69
|
-
fragmentNode,
|
70
|
-
fragmentRef,
|
71
|
-
paginationMetadata,
|
72
|
-
paginationRequest,
|
73
|
-
});
|
74
|
-
|
75
|
-
// Forward pagination
|
76
|
-
const [loadNext, hasNext, isLoadingNext, disposeFetchNext] =
|
77
|
-
useLoadMore<TVariables>({
|
78
|
-
componentDisplayName,
|
79
|
-
connectionPathInFragmentData,
|
80
|
-
direction: 'forward',
|
81
|
-
fragmentData,
|
82
|
-
fragmentIdentifier,
|
83
|
-
fragmentNode,
|
84
|
-
fragmentRef,
|
85
|
-
paginationMetadata,
|
86
|
-
paginationRequest,
|
87
|
-
});
|
88
|
-
|
89
|
-
const refetchPagination = useCallback(
|
90
|
-
(variables: TVariables, options: void | Options) => {
|
91
|
-
disposeFetchNext();
|
92
|
-
disposeFetchPrevious();
|
93
|
-
return refetch(variables, {...options, __environment: undefined});
|
94
|
-
},
|
95
|
-
[disposeFetchNext, disposeFetchPrevious, refetch],
|
96
|
-
);
|
97
|
-
|
98
|
-
if (__DEV__) {
|
99
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
100
|
-
useDebugValue({
|
101
|
-
fragment: fragmentNode.name,
|
102
|
-
data: fragmentData,
|
103
|
-
hasNext,
|
104
|
-
isLoadingNext,
|
105
|
-
hasPrevious,
|
106
|
-
isLoadingPrevious,
|
107
|
-
});
|
108
|
-
}
|
109
|
-
return {
|
110
|
-
// $FlowFixMe[incompatible-return]
|
111
|
-
data: fragmentData,
|
112
|
-
loadNext,
|
113
|
-
loadPrevious,
|
114
|
-
hasNext,
|
115
|
-
hasPrevious,
|
116
|
-
isLoadingNext,
|
117
|
-
isLoadingPrevious,
|
118
|
-
refetch: refetchPagination,
|
119
|
-
};
|
120
|
-
}
|
121
|
-
|
122
|
-
function useLoadMore<TVariables: Variables>(
|
123
|
-
args: $Diff<
|
124
|
-
UseLoadMoreFunctionArgs,
|
125
|
-
{
|
126
|
-
observer: Observer<GraphQLResponse>,
|
127
|
-
onReset: () => void,
|
128
|
-
...
|
129
|
-
},
|
130
|
-
>,
|
131
|
-
): [LoadMoreFn<TVariables>, boolean, boolean, () => void] {
|
132
|
-
const environment = useRelayEnvironment();
|
133
|
-
const [isLoadingMore, reallySetIsLoadingMore] = useState(false);
|
134
|
-
// Schedule this update since it must be observed by components at the same
|
135
|
-
// batch as when hasNext changes. hasNext is read from the store and store
|
136
|
-
// updates are scheduled, so this must be scheduled too.
|
137
|
-
const setIsLoadingMore = (value: boolean) => {
|
138
|
-
const schedule = environment.getScheduler()?.schedule;
|
139
|
-
if (schedule) {
|
140
|
-
schedule(() => {
|
141
|
-
reallySetIsLoadingMore(value);
|
142
|
-
});
|
143
|
-
} else {
|
144
|
-
reallySetIsLoadingMore(value);
|
145
|
-
}
|
146
|
-
};
|
147
|
-
const observer = {
|
148
|
-
start: () => setIsLoadingMore(true),
|
149
|
-
complete: () => setIsLoadingMore(false),
|
150
|
-
error: () => setIsLoadingMore(false),
|
151
|
-
};
|
152
|
-
const handleReset = () => setIsLoadingMore(false);
|
153
|
-
const [loadMore, hasMore, disposeFetch] = useLoadMoreFunction<TVariables>({
|
154
|
-
...args,
|
155
|
-
observer,
|
156
|
-
onReset: handleReset,
|
157
|
-
});
|
158
|
-
return [loadMore, hasMore, isLoadingMore, disposeFetch];
|
159
|
-
}
|
160
|
-
|
161
|
-
module.exports = usePaginationFragment;
|
@@ -1,49 +0,0 @@
|
|
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
|
-
* @flow strict-local
|
8
|
-
* @format
|
9
|
-
* @oncall relay
|
10
|
-
*/
|
11
|
-
|
12
|
-
'use strict';
|
13
|
-
|
14
|
-
import type {ReturnType} from '../useRefetchableFragment';
|
15
|
-
import type {FragmentType, RefetchableFragment, Variables} from 'relay-runtime';
|
16
|
-
|
17
|
-
const useStaticFragmentNodeWarning = require('../useStaticFragmentNodeWarning');
|
18
|
-
const useRefetchableFragmentInternal = require('./useRefetchableFragmentInternal_EXPERIMENTAL');
|
19
|
-
const {useDebugValue} = require('react');
|
20
|
-
const {getFragment} = require('relay-runtime');
|
21
|
-
|
22
|
-
function useRefetchableFragment<
|
23
|
-
TFragmentType: FragmentType,
|
24
|
-
TVariables: Variables,
|
25
|
-
TData,
|
26
|
-
TKey: ?{+$fragmentSpreads: TFragmentType, ...},
|
27
|
-
>(
|
28
|
-
fragmentInput: RefetchableFragment<TFragmentType, TData, TVariables>,
|
29
|
-
fragmentRef: TKey,
|
30
|
-
): ReturnType<TVariables, TData, TKey> {
|
31
|
-
const fragmentNode = getFragment(fragmentInput);
|
32
|
-
useStaticFragmentNodeWarning(
|
33
|
-
fragmentNode,
|
34
|
-
'first argument of useRefetchableFragment()',
|
35
|
-
);
|
36
|
-
const {fragmentData, refetch} = useRefetchableFragmentInternal<
|
37
|
-
{variables: TVariables, response: TData},
|
38
|
-
{data?: TData},
|
39
|
-
>(fragmentNode, fragmentRef, 'useRefetchableFragment()');
|
40
|
-
if (__DEV__) {
|
41
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
42
|
-
useDebugValue({fragment: fragmentNode.name, data: fragmentData});
|
43
|
-
}
|
44
|
-
// $FlowFixMe[incompatible-return]
|
45
|
-
// $FlowFixMe[prop-missing]
|
46
|
-
return [fragmentData, refetch];
|
47
|
-
}
|
48
|
-
|
49
|
-
module.exports = useRefetchableFragment;
|