react-relay 14.1.0 → 16.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/ReactRelayContainerUtils.js.flow +1 -0
- package/ReactRelayContext.js +1 -1
- package/ReactRelayContext.js.flow +1 -0
- package/ReactRelayFragmentContainer.js.flow +6 -2
- package/ReactRelayFragmentMockRenderer.js.flow +1 -0
- package/ReactRelayLocalQueryRenderer.js.flow +5 -3
- package/ReactRelayPaginationContainer.js.flow +21 -12
- package/ReactRelayQueryFetcher.js.flow +20 -10
- package/ReactRelayQueryRenderer.js.flow +15 -11
- package/ReactRelayQueryRendererContext.js.flow +1 -0
- package/ReactRelayRefetchContainer.js.flow +9 -5
- package/ReactRelayTestMocker.js.flow +3 -1
- package/ReactRelayTypes.js.flow +2 -0
- package/RelayContext.js.flow +1 -0
- package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +2 -1
- package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +1 -0
- package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +1 -0
- package/__flowtests__/RelayModern-flowtest.js.flow +1 -0
- package/__flowtests__/RelayModernFlowtest_badref.graphql.js.flow +1 -0
- package/__flowtests__/RelayModernFlowtest_notref.graphql.js.flow +1 -0
- package/__flowtests__/RelayModernFlowtest_user.graphql.js.flow +1 -0
- package/__flowtests__/RelayModernFlowtest_users.graphql.js.flow +1 -0
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +4 -2
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +4 -2
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +4 -2
- package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +4 -2
- package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +3 -1
- package/assertFragmentMap.js.flow +1 -0
- package/buildReactRelayContainer.js.flow +10 -6
- package/getRootVariablesForFragments.js.flow +1 -1
- package/hooks.js +1 -1
- package/hooks.js.flow +4 -0
- package/index.js +1 -1
- package/index.js.flow +4 -0
- package/isRelayEnvironment.js.flow +1 -0
- package/jest-react/enqueueTask.js.flow +1 -1
- package/jest-react/index.js.flow +1 -1
- package/jest-react/internalAct.js.flow +1 -1
- package/legacy.js +1 -1
- package/legacy.js.flow +1 -0
- package/lib/ReactRelayContainerUtils.js +0 -11
- package/lib/ReactRelayContext.js +1 -12
- package/lib/ReactRelayFragmentContainer.js +23 -122
- package/lib/ReactRelayFragmentMockRenderer.js +0 -12
- package/lib/ReactRelayLocalQueryRenderer.js +12 -41
- package/lib/ReactRelayPaginationContainer.js +45 -341
- package/lib/ReactRelayQueryFetcher.js +36 -111
- package/lib/ReactRelayQueryRenderer.js +29 -137
- package/lib/ReactRelayQueryRendererContext.js +0 -10
- package/lib/ReactRelayRefetchContainer.js +33 -166
- package/lib/ReactRelayTestMocker.js +18 -128
- package/lib/ReactRelayTypes.js +0 -9
- package/lib/RelayContext.js +0 -23
- package/lib/assertFragmentMap.js +0 -16
- package/lib/buildReactRelayContainer.js +7 -41
- package/lib/getRootVariablesForFragments.js +2 -19
- package/lib/hooks.js +3 -30
- package/lib/index.js +3 -39
- package/lib/isRelayEnvironment.js +1 -16
- package/lib/jest-react/enqueueTask.js +1 -25
- package/lib/jest-react/index.js +0 -1
- package/lib/jest-react/internalAct.js +2 -51
- package/lib/legacy.js +0 -20
- package/lib/multi-actor/ActorChange.js +0 -14
- package/lib/multi-actor/index.js +0 -10
- package/lib/multi-actor/useRelayActorEnvironment.js +2 -16
- package/lib/relay-hooks/EntryPointContainer.react.js +7 -23
- package/lib/relay-hooks/EntryPointTypes.flow.js +0 -10
- package/lib/relay-hooks/FragmentResource.js +130 -280
- package/lib/relay-hooks/HooksImplementation.js +0 -14
- package/lib/relay-hooks/InternalLogger.js +0 -11
- package/lib/relay-hooks/LRUCache.js +0 -39
- package/lib/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js +27 -65
- package/lib/relay-hooks/MatchContainer.js +9 -111
- package/lib/relay-hooks/NestedRelayEntryPointBuilderUtils.js +9 -0
- package/lib/relay-hooks/ProfilerContext.js +0 -14
- package/lib/relay-hooks/QueryResource.js +14 -149
- package/lib/relay-hooks/RelayEnvironmentProvider.js +3 -17
- package/lib/relay-hooks/SuspenseResource.js +2 -59
- package/lib/relay-hooks/loadEntryPoint.js +10 -45
- package/lib/relay-hooks/loadQuery.js +29 -169
- package/lib/relay-hooks/preloadQuery_DEPRECATED.js +8 -58
- package/lib/relay-hooks/prepareEntryPoint_DEPRECATED.js +6 -24
- package/lib/relay-hooks/react-cache/RelayReactCache.js +4 -20
- package/lib/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js +13 -102
- package/lib/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js +18 -75
- package/lib/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js +79 -222
- package/lib/relay-hooks/react-cache/useFragment_REACT_CACHE.js +3 -27
- package/lib/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js +11 -33
- package/lib/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js +62 -85
- package/lib/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js +20 -63
- package/lib/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js +53 -179
- package/lib/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js +5 -27
- package/lib/relay-hooks/useBlockingPaginationFragment.js +58 -121
- package/lib/relay-hooks/useClientQuery.js +0 -21
- package/lib/relay-hooks/useEntryPointLoader.js +12 -100
- package/lib/relay-hooks/useFetchTrackingRef.js +6 -33
- package/lib/relay-hooks/useFragment.js +5 -32
- package/lib/relay-hooks/useFragmentNode.js +14 -55
- package/lib/relay-hooks/useIsMountedRef.js +2 -14
- package/lib/relay-hooks/useIsOperationNodeActive.js +6 -29
- package/lib/relay-hooks/useIsParentQueryActive.js +1 -15
- package/lib/relay-hooks/useLazyLoadQuery.js +2 -23
- package/lib/relay-hooks/useLazyLoadQueryNode.js +18 -63
- package/lib/relay-hooks/useLoadMoreFunction.js +44 -100
- package/lib/relay-hooks/useMemoOperationDescriptor.js +4 -23
- package/lib/relay-hooks/useMemoVariables.js +8 -43
- package/lib/relay-hooks/useMutation.js +6 -34
- package/lib/relay-hooks/usePaginationFragment.js +49 -89
- package/lib/relay-hooks/usePreloadedQuery.js +10 -54
- package/lib/relay-hooks/useQueryLoader.js +18 -116
- package/lib/relay-hooks/useRefetchableFragment.js +4 -30
- package/lib/relay-hooks/useRefetchableFragmentNode.js +58 -184
- package/lib/relay-hooks/useRelayEnvironment.js +2 -16
- package/lib/relay-hooks/useStaticFragmentNodeWarning.js +2 -20
- package/lib/relay-hooks/useSubscribeToInvalidationState.js +3 -28
- package/lib/relay-hooks/useSubscription.js +3 -22
- package/lib/relay-hooks/useUnsafeRef_DEPRECATED.js +12 -0
- package/multi-actor/ActorChange.js.flow +1 -1
- package/multi-actor/index.js.flow +1 -1
- package/multi-actor/useRelayActorEnvironment.js.flow +2 -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/relay-hooks/EntryPointContainer.react.js.flow +6 -1
- package/relay-hooks/EntryPointTypes.flow.js.flow +23 -20
- package/relay-hooks/FragmentResource.js.flow +148 -34
- package/relay-hooks/HooksImplementation.js.flow +1 -1
- package/relay-hooks/InternalLogger.js.flow +1 -1
- package/relay-hooks/LRUCache.js.flow +1 -1
- package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +19 -10
- package/relay-hooks/MatchContainer.js.flow +1 -1
- package/relay-hooks/NestedRelayEntryPointBuilderUtils.js.flow +51 -0
- package/relay-hooks/ProfilerContext.js.flow +1 -1
- package/relay-hooks/QueryResource.js.flow +25 -5
- package/relay-hooks/RelayEnvironmentProvider.js.flow +2 -2
- package/relay-hooks/SuspenseResource.js.flow +1 -1
- package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +3 -1
- package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +9 -7
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +3 -1
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +3 -1
- package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +40 -33
- package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +1 -1
- package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +38 -32
- package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +20 -18
- package/relay-hooks/__flowtests__/utils.js.flow +13 -2
- package/relay-hooks/loadEntryPoint.js.flow +15 -8
- package/relay-hooks/loadQuery.js.flow +32 -8
- package/relay-hooks/preloadQuery_DEPRECATED.js.flow +5 -6
- package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +17 -10
- package/relay-hooks/react-cache/RelayReactCache.js.flow +1 -1
- package/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js.flow +4 -4
- package/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js.flow +5 -4
- package/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js.flow +32 -14
- package/relay-hooks/react-cache/useFragment_REACT_CACHE.js.flow +4 -10
- package/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js.flow +1 -1
- package/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js.flow +39 -49
- package/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js.flow +1 -2
- package/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js.flow +29 -16
- package/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js.flow +17 -33
- package/relay-hooks/useBlockingPaginationFragment.js.flow +85 -58
- package/relay-hooks/useClientQuery.js.flow +3 -3
- package/relay-hooks/useEntryPointLoader.js.flow +10 -6
- package/relay-hooks/useFetchTrackingRef.js.flow +5 -4
- package/relay-hooks/useFragment.js.flow +2 -2
- package/relay-hooks/useFragmentNode.js.flow +7 -6
- package/relay-hooks/useIsMountedRef.js.flow +1 -1
- package/relay-hooks/useIsOperationNodeActive.js.flow +1 -1
- package/relay-hooks/useIsParentQueryActive.js.flow +1 -1
- package/relay-hooks/useLazyLoadQuery.js.flow +2 -2
- package/relay-hooks/useLazyLoadQueryNode.js.flow +2 -2
- package/relay-hooks/useLoadMoreFunction.js.flow +27 -16
- package/relay-hooks/useMemoOperationDescriptor.js.flow +3 -3
- package/relay-hooks/useMemoVariables.js.flow +13 -29
- package/relay-hooks/useMutation.js.flow +30 -13
- package/relay-hooks/usePaginationFragment.js.flow +55 -54
- package/relay-hooks/usePreloadedQuery.js.flow +47 -22
- package/relay-hooks/useQueryLoader.js.flow +78 -21
- package/relay-hooks/useRefetchableFragment.js.flow +65 -33
- package/relay-hooks/useRefetchableFragmentNode.js.flow +38 -17
- package/relay-hooks/useRelayEnvironment.js.flow +2 -2
- package/relay-hooks/useStaticFragmentNodeWarning.js.flow +3 -3
- package/relay-hooks/useSubscribeToInvalidationState.js.flow +2 -2
- package/relay-hooks/useSubscription.js.flow +1 -1
- package/relay-hooks/useUnsafeRef_DEPRECATED.js.flow +25 -0
- package/lib/readContext.js +0 -27
- package/readContext.js.flow +0 -29
@@ -1,103 +1,62 @@
|
|
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
1
|
'use strict';
|
12
2
|
|
13
3
|
var _require = require('./FragmentResource'),
|
14
|
-
|
15
|
-
|
4
|
+
getFragmentResourceForEnvironment = _require.getFragmentResourceForEnvironment;
|
16
5
|
var useRelayEnvironment = require('./useRelayEnvironment');
|
17
|
-
|
6
|
+
var useUnsafeRef_DEPRECATED = require('./useUnsafeRef_DEPRECATED');
|
18
7
|
var _require2 = require('react'),
|
19
|
-
|
20
|
-
|
21
|
-
useState = _require2.useState;
|
22
|
-
|
8
|
+
useEffect = _require2.useEffect,
|
9
|
+
useState = _require2.useState;
|
23
10
|
var _require3 = require('relay-runtime'),
|
24
|
-
|
25
|
-
|
11
|
+
RelayFeatureFlags = _require3.RelayFeatureFlags,
|
12
|
+
getFragmentIdentifier = _require3.getFragmentIdentifier;
|
26
13
|
var warning = require("fbjs/lib/warning");
|
27
|
-
|
28
14
|
function useFragmentNode(fragmentNode, fragmentRef, componentDisplayName) {
|
29
15
|
var environment = useRelayEnvironment();
|
30
16
|
var FragmentResource = getFragmentResourceForEnvironment(environment);
|
31
|
-
var isMountedRef =
|
32
|
-
|
17
|
+
var isMountedRef = useUnsafeRef_DEPRECATED(false);
|
33
18
|
var _useState = useState(0),
|
34
|
-
|
35
|
-
|
36
|
-
var fragmentIdentifier = getFragmentIdentifier(fragmentNode, fragmentRef); // Read fragment data; this might suspend.
|
37
|
-
|
19
|
+
forceUpdate = _useState[1];
|
20
|
+
var fragmentIdentifier = getFragmentIdentifier(fragmentNode, fragmentRef);
|
38
21
|
var fragmentResult = FragmentResource.readWithIdentifier(fragmentNode, fragmentRef, fragmentIdentifier, componentDisplayName);
|
39
|
-
var isListeningForUpdatesRef =
|
40
|
-
|
22
|
+
var isListeningForUpdatesRef = useUnsafeRef_DEPRECATED(true);
|
41
23
|
function enableStoreUpdates() {
|
42
24
|
isListeningForUpdatesRef.current = true;
|
43
25
|
var didMissUpdates = FragmentResource.checkMissedUpdates(fragmentResult)[0];
|
44
|
-
|
45
26
|
if (didMissUpdates) {
|
46
27
|
handleDataUpdate();
|
47
28
|
}
|
48
29
|
}
|
49
|
-
|
50
30
|
function disableStoreUpdates() {
|
51
31
|
isListeningForUpdatesRef.current = false;
|
52
32
|
}
|
53
|
-
|
54
33
|
function handleDataUpdate() {
|
55
34
|
if (isMountedRef.current === false || isListeningForUpdatesRef.current === false) {
|
56
35
|
return;
|
57
|
-
}
|
58
|
-
// If we want to force an update via setState, we need to pass an value.
|
59
|
-
// The actual value can be arbitrary though, e.g. an incremented number.
|
60
|
-
|
61
|
-
|
36
|
+
}
|
62
37
|
forceUpdate(function (count) {
|
63
38
|
return count + 1;
|
64
39
|
});
|
65
|
-
}
|
66
|
-
// rendering for the first time, or if we need to subscribe to new data
|
67
|
-
// If the fragment identifier changes, it means that the variables on the
|
68
|
-
// fragment owner changed, or the fragment ref points to different records.
|
69
|
-
// In this case, we need to resubscribe to the Relay store.
|
70
|
-
|
71
|
-
|
40
|
+
}
|
72
41
|
useEffect(function () {
|
73
42
|
isMountedRef.current = true;
|
74
43
|
var disposable = FragmentResource.subscribe(fragmentResult, handleDataUpdate);
|
75
44
|
return function () {
|
76
|
-
// When unmounting or resubscribing to new data, clean up current
|
77
|
-
// subscription. This will also make sure fragment data is no longer
|
78
|
-
// cached so that next time it its read, it will be freshly read from
|
79
|
-
// the Relay store
|
80
45
|
isMountedRef.current = false;
|
81
46
|
disposable.dispose();
|
82
|
-
};
|
83
|
-
// is capturing all information about whether the effect should be re-ran.
|
84
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
47
|
+
};
|
85
48
|
}, [environment, fragmentIdentifier]);
|
86
|
-
|
87
|
-
if (process.env.NODE_ENV !== "production") {
|
49
|
+
if (RelayFeatureFlags.LOG_MISSING_RECORDS_IN_PROD || process.env.NODE_ENV !== "production") {
|
88
50
|
if (fragmentRef != null && (fragmentResult.data === undefined || Array.isArray(fragmentResult.data) && fragmentResult.data.length > 0 && fragmentResult.data.every(function (data) {
|
89
51
|
return data === undefined;
|
90
52
|
}))) {
|
91
53
|
process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Expected to have been able to read non-null data for ' + 'fragment `%s` declared in ' + '`%s`, since fragment reference was non-null. ' + "Make sure that that `%s`'s parent isn't " + 'holding on to and/or passing a fragment reference for data that ' + 'has been deleted.', fragmentNode.name, componentDisplayName, componentDisplayName) : void 0;
|
92
54
|
}
|
93
55
|
}
|
94
|
-
|
95
56
|
return {
|
96
|
-
// $FlowFixMe[incompatible-return]
|
97
57
|
data: fragmentResult.data,
|
98
58
|
disableStoreUpdates: disableStoreUpdates,
|
99
59
|
enableStoreUpdates: enableStoreUpdates
|
100
60
|
};
|
101
61
|
}
|
102
|
-
|
103
62
|
module.exports = useFragmentNode;
|
@@ -1,19 +1,8 @@
|
|
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
1
|
'use strict';
|
12
2
|
|
13
3
|
var _require = require('react'),
|
14
|
-
|
15
|
-
|
16
|
-
|
4
|
+
useEffect = _require.useEffect,
|
5
|
+
useRef = _require.useRef;
|
17
6
|
function useIsMountedRef() {
|
18
7
|
var isMountedRef = useRef(true);
|
19
8
|
useEffect(function () {
|
@@ -24,5 +13,4 @@ function useIsMountedRef() {
|
|
24
13
|
}, []);
|
25
14
|
return isMountedRef;
|
26
15
|
}
|
27
|
-
|
28
16
|
module.exports = useIsMountedRef;
|
@@ -1,61 +1,39 @@
|
|
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
1
|
'use strict';
|
12
2
|
|
13
3
|
var useRelayEnvironment = require('./useRelayEnvironment');
|
14
|
-
|
15
4
|
var invariant = require('invariant');
|
16
|
-
|
17
5
|
var React = require('react');
|
18
|
-
|
19
6
|
var _require = require('relay-runtime'),
|
20
|
-
|
21
|
-
|
22
|
-
|
7
|
+
getObservableForActiveRequest = _require.__internal.getObservableForActiveRequest,
|
8
|
+
getSelector = _require.getSelector;
|
23
9
|
var useEffect = React.useEffect,
|
24
|
-
|
25
|
-
|
26
|
-
|
10
|
+
useState = React.useState,
|
11
|
+
useMemo = React.useMemo;
|
27
12
|
function useIsOperationNodeActive(fragmentNode, fragmentRef) {
|
28
13
|
var environment = useRelayEnvironment();
|
29
14
|
var observable = useMemo(function () {
|
30
15
|
var selector = getSelector(fragmentNode, fragmentRef);
|
31
|
-
|
32
16
|
if (selector == null) {
|
33
17
|
return null;
|
34
18
|
}
|
35
|
-
|
36
19
|
!(selector.kind === 'SingularReaderSelector') ? process.env.NODE_ENV !== "production" ? invariant(false, 'useIsOperationNodeActive: Plural fragments are not supported.') : invariant(false) : void 0;
|
37
20
|
return getObservableForActiveRequest(environment, selector.owner);
|
38
21
|
}, [environment, fragmentNode, fragmentRef]);
|
39
|
-
|
40
22
|
var _useState = useState(observable != null),
|
41
|
-
|
42
|
-
|
43
|
-
|
23
|
+
isActive = _useState[0],
|
24
|
+
setIsActive = _useState[1];
|
44
25
|
useEffect(function () {
|
45
26
|
var subscription;
|
46
27
|
setIsActive(observable != null);
|
47
|
-
|
48
28
|
if (observable != null) {
|
49
29
|
var onCompleteOrError = function onCompleteOrError() {
|
50
30
|
setIsActive(false);
|
51
31
|
};
|
52
|
-
|
53
32
|
subscription = observable.subscribe({
|
54
33
|
complete: onCompleteOrError,
|
55
34
|
error: onCompleteOrError
|
56
35
|
});
|
57
36
|
}
|
58
|
-
|
59
37
|
return function () {
|
60
38
|
if (subscription) {
|
61
39
|
subscription.unsubscribe();
|
@@ -64,5 +42,4 @@ function useIsOperationNodeActive(fragmentNode, fragmentRef) {
|
|
64
42
|
}, [observable]);
|
65
43
|
return isActive;
|
66
44
|
}
|
67
|
-
|
68
45
|
module.exports = useIsOperationNodeActive;
|
@@ -1,26 +1,12 @@
|
|
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
1
|
'use strict';
|
12
2
|
|
13
3
|
var useIsOperationNodeActive = require('./useIsOperationNodeActive');
|
14
|
-
|
15
4
|
var useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
|
16
|
-
|
17
5
|
var _require = require('relay-runtime'),
|
18
|
-
|
19
|
-
|
6
|
+
getFragment = _require.getFragment;
|
20
7
|
function useIsParentQueryActive(fragmentInput, fragmentRef) {
|
21
8
|
var fragmentNode = getFragment(fragmentInput);
|
22
9
|
useStaticFragmentNodeWarning(fragmentNode, 'first argument of useIsParentQueryActive()');
|
23
10
|
return useIsOperationNodeActive(fragmentNode, fragmentRef);
|
24
11
|
}
|
25
|
-
|
26
12
|
module.exports = useIsParentQueryActive;
|
@@ -1,33 +1,13 @@
|
|
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
1
|
'use strict';
|
12
2
|
|
13
3
|
var _require = require('./loadQuery'),
|
14
|
-
|
15
|
-
|
4
|
+
useTrackLoadQueryInRender = _require.useTrackLoadQueryInRender;
|
16
5
|
var useLazyLoadQueryNode = require('./useLazyLoadQueryNode');
|
17
|
-
|
18
6
|
var useMemoOperationDescriptor = require('./useMemoOperationDescriptor');
|
19
|
-
|
20
7
|
var useRelayEnvironment = require('./useRelayEnvironment');
|
21
|
-
|
22
8
|
var _require2 = require('relay-runtime'),
|
23
|
-
|
24
|
-
// a separate hooks implementation in ./HooksImplementation -- it can
|
25
|
-
// be removed after we stop doing that.
|
26
|
-
|
27
|
-
|
9
|
+
fetchQuery = _require2.__internal.fetchQuery;
|
28
10
|
function useLazyLoadQuery(gqlQuery, variables, options) {
|
29
|
-
// We need to use this hook in order to be able to track if
|
30
|
-
// loadQuery was called during render
|
31
11
|
useTrackLoadQueryInRender();
|
32
12
|
var environment = useRelayEnvironment();
|
33
13
|
var query = useMemoOperationDescriptor(gqlQuery, variables, options && options.networkCacheConfig ? options.networkCacheConfig : {
|
@@ -43,5 +23,4 @@ function useLazyLoadQuery(gqlQuery, variables, options) {
|
|
43
23
|
});
|
44
24
|
return data;
|
45
25
|
}
|
46
|
-
|
47
26
|
module.exports = useLazyLoadQuery;
|
@@ -1,53 +1,33 @@
|
|
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
1
|
'use strict';
|
12
2
|
|
13
3
|
var ProfilerContext = require('./ProfilerContext');
|
14
|
-
|
15
4
|
var _require = require('./QueryResource'),
|
16
|
-
|
17
|
-
|
18
|
-
|
5
|
+
getQueryCacheIdentifier = _require.getQueryCacheIdentifier,
|
6
|
+
getQueryResourceForEnvironment = _require.getQueryResourceForEnvironment;
|
19
7
|
var useFetchTrackingRef = require('./useFetchTrackingRef');
|
20
|
-
|
21
8
|
var useFragmentNode = require('./useFragmentNode');
|
22
|
-
|
23
9
|
var useRelayEnvironment = require('./useRelayEnvironment');
|
24
|
-
|
25
10
|
var React = require('react');
|
26
|
-
|
27
11
|
var useContext = React.useContext,
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
12
|
+
useEffect = React.useEffect,
|
13
|
+
useState = React.useState,
|
14
|
+
useRef = React.useRef;
|
32
15
|
function useLazyLoadQueryNode(_ref) {
|
33
16
|
var query = _ref.query,
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
17
|
+
componentDisplayName = _ref.componentDisplayName,
|
18
|
+
fetchObservable = _ref.fetchObservable,
|
19
|
+
fetchPolicy = _ref.fetchPolicy,
|
20
|
+
fetchKey = _ref.fetchKey,
|
21
|
+
renderPolicy = _ref.renderPolicy;
|
39
22
|
var environment = useRelayEnvironment();
|
40
23
|
var profilerContext = useContext(ProfilerContext);
|
41
24
|
var QueryResource = getQueryResourceForEnvironment(environment);
|
42
|
-
|
43
25
|
var _useState = useState(0),
|
44
|
-
|
45
|
-
|
46
|
-
|
26
|
+
forceUpdateKey = _useState[0],
|
27
|
+
forceUpdate = _useState[1];
|
47
28
|
var _useFetchTrackingRef = useFetchTrackingRef(),
|
48
|
-
|
49
|
-
|
50
|
-
|
29
|
+
startFetch = _useFetchTrackingRef.startFetch,
|
30
|
+
completeFetch = _useFetchTrackingRef.completeFetch;
|
51
31
|
var cacheBreaker = "".concat(forceUpdateKey, "-").concat(fetchKey !== null && fetchKey !== void 0 ? fetchKey : '');
|
52
32
|
var cacheIdentifier = getQueryCacheIdentifier(environment, query, fetchPolicy, renderPolicy, cacheBreaker);
|
53
33
|
var preparedQueryResult = profilerContext.wrapPrepareQueryResource(function () {
|
@@ -60,54 +40,29 @@ function useLazyLoadQueryNode(_ref) {
|
|
60
40
|
var maybeHiddenOrFastRefresh = useRef(false);
|
61
41
|
useEffect(function () {
|
62
42
|
return function () {
|
63
|
-
// Attempt to detect if the component was
|
64
|
-
// hidden (by Offscreen API), or fast refresh occured;
|
65
|
-
// Only in these situations would the effect cleanup
|
66
|
-
// for "unmounting" run multiple times, so if
|
67
|
-
// we are ever able to read this ref with a value
|
68
|
-
// of true, it means that one of these cases
|
69
|
-
// has happened.
|
70
43
|
maybeHiddenOrFastRefresh.current = true;
|
71
44
|
};
|
72
45
|
}, []);
|
73
46
|
useEffect(function () {
|
74
47
|
if (maybeHiddenOrFastRefresh.current === true) {
|
75
|
-
// This block only runs if the component has previously "unmounted"
|
76
|
-
// due to it being hidden by the Offscreen API, or during fast refresh.
|
77
|
-
// At this point, the current cached resource will have been disposed
|
78
|
-
// by the previous cleanup, so instead of attempting to
|
79
|
-
// do our regular commit setup, which would incorrectly attempt to
|
80
|
-
// retain a cached query resource that was disposed, we need to force
|
81
|
-
// a re-render so that the cache entry for this query is re-intiliazed and
|
82
|
-
// and re-evaluated (and potentially cause a refetch).
|
83
48
|
maybeHiddenOrFastRefresh.current = false;
|
84
49
|
forceUpdate(function (n) {
|
85
50
|
return n + 1;
|
86
51
|
});
|
87
52
|
return;
|
88
53
|
}
|
89
|
-
|
90
54
|
var disposable = QueryResource.retain(preparedQueryResult, profilerContext);
|
91
55
|
return function () {
|
92
56
|
disposable.dispose();
|
93
|
-
};
|
94
|
-
// and `cacheIdentifier` identities are capturing all information about whether
|
95
|
-
// the effect should be re-executed and the query re-retained.
|
96
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
57
|
+
};
|
97
58
|
}, [environment, cacheIdentifier]);
|
98
59
|
useEffect(function () {
|
99
|
-
|
100
|
-
// cacheIdentifier doesn't change, the query is still permanently retained,
|
101
|
-
// and the temporary retain is redundant.
|
102
|
-
QueryResource.releaseTemporaryRetain(preparedQueryResult); // This effect is intended to run on every commit, thus no dependency
|
60
|
+
QueryResource.releaseTemporaryRetain(preparedQueryResult);
|
103
61
|
});
|
104
62
|
var fragmentNode = preparedQueryResult.fragmentNode,
|
105
|
-
|
106
|
-
|
63
|
+
fragmentRef = preparedQueryResult.fragmentRef;
|
107
64
|
var _useFragmentNode = useFragmentNode(fragmentNode, fragmentRef, componentDisplayName),
|
108
|
-
|
109
|
-
|
65
|
+
data = _useFragmentNode.data;
|
110
66
|
return data;
|
111
67
|
}
|
112
|
-
|
113
68
|
module.exports = useLazyLoadQueryNode;
|
@@ -1,144 +1,101 @@
|
|
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
1
|
'use strict';
|
12
2
|
|
13
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
14
|
-
|
15
4
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
16
|
-
|
17
5
|
var useFetchTrackingRef = require('./useFetchTrackingRef');
|
18
|
-
|
19
6
|
var useIsMountedRef = require('./useIsMountedRef');
|
20
|
-
|
21
7
|
var useIsOperationNodeActive = require('./useIsOperationNodeActive');
|
22
|
-
|
23
8
|
var useRelayEnvironment = require('./useRelayEnvironment');
|
24
|
-
|
25
9
|
var invariant = require('invariant');
|
26
|
-
|
27
10
|
var _require = require('react'),
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
11
|
+
useCallback = _require.useCallback,
|
12
|
+
useEffect = _require.useEffect,
|
13
|
+
useState = _require.useState;
|
32
14
|
var _require2 = require('relay-runtime'),
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
15
|
+
fetchQuery = _require2.__internal.fetchQuery,
|
16
|
+
ConnectionInterface = _require2.ConnectionInterface,
|
17
|
+
createOperationDescriptor = _require2.createOperationDescriptor,
|
18
|
+
getPaginationVariables = _require2.getPaginationVariables,
|
19
|
+
getRefetchMetadata = _require2.getRefetchMetadata,
|
20
|
+
getSelector = _require2.getSelector,
|
21
|
+
getValueAtPath = _require2.getValueAtPath;
|
40
22
|
var warning = require("fbjs/lib/warning");
|
41
|
-
|
42
23
|
function useLoadMoreFunction(args) {
|
43
24
|
var direction = args.direction,
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
identifierField = args.identifierField;
|
25
|
+
fragmentNode = args.fragmentNode,
|
26
|
+
fragmentRef = args.fragmentRef,
|
27
|
+
fragmentIdentifier = args.fragmentIdentifier,
|
28
|
+
fragmentData = args.fragmentData,
|
29
|
+
connectionPathInFragmentData = args.connectionPathInFragmentData,
|
30
|
+
paginationRequest = args.paginationRequest,
|
31
|
+
paginationMetadata = args.paginationMetadata,
|
32
|
+
componentDisplayName = args.componentDisplayName,
|
33
|
+
observer = args.observer,
|
34
|
+
onReset = args.onReset;
|
55
35
|
var environment = useRelayEnvironment();
|
56
|
-
|
57
36
|
var _useFetchTrackingRef = useFetchTrackingRef(),
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
37
|
+
isFetchingRef = _useFetchTrackingRef.isFetchingRef,
|
38
|
+
startFetch = _useFetchTrackingRef.startFetch,
|
39
|
+
disposeFetch = _useFetchTrackingRef.disposeFetch,
|
40
|
+
completeFetch = _useFetchTrackingRef.completeFetch;
|
41
|
+
var _getRefetchMetadata = getRefetchMetadata(fragmentNode, componentDisplayName),
|
42
|
+
identifierInfo = _getRefetchMetadata.identifierInfo;
|
43
|
+
var identifierValue = (identifierInfo === null || identifierInfo === void 0 ? void 0 : identifierInfo.identifierField) != null && fragmentData != null && typeof fragmentData === 'object' ? fragmentData[identifierInfo.identifierField] : null;
|
64
44
|
var isMountedRef = useIsMountedRef();
|
65
|
-
|
66
45
|
var _useState = useState(environment),
|
67
|
-
|
68
|
-
|
69
|
-
|
46
|
+
mirroredEnvironment = _useState[0],
|
47
|
+
setMirroredEnvironment = _useState[1];
|
70
48
|
var _useState2 = useState(fragmentIdentifier),
|
71
|
-
|
72
|
-
|
73
|
-
|
49
|
+
mirroredFragmentIdentifier = _useState2[0],
|
50
|
+
setMirroredFragmentIdentifier = _useState2[1];
|
74
51
|
var isParentQueryActive = useIsOperationNodeActive(fragmentNode, fragmentRef);
|
75
52
|
var shouldReset = environment !== mirroredEnvironment || fragmentIdentifier !== mirroredFragmentIdentifier;
|
76
|
-
|
77
53
|
if (shouldReset) {
|
78
54
|
disposeFetch();
|
79
55
|
onReset();
|
80
56
|
setMirroredEnvironment(environment);
|
81
57
|
setMirroredFragmentIdentifier(fragmentIdentifier);
|
82
58
|
}
|
83
|
-
|
84
59
|
var _getConnectionState = getConnectionState(direction, fragmentNode, fragmentData, connectionPathInFragmentData),
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
60
|
+
cursor = _getConnectionState.cursor,
|
61
|
+
hasMore = _getConnectionState.hasMore;
|
89
62
|
useEffect(function () {
|
90
63
|
return function () {
|
91
64
|
disposeFetch();
|
92
65
|
};
|
93
66
|
}, [disposeFetch]);
|
94
67
|
var loadMore = useCallback(function (count, options) {
|
95
|
-
// TODO(T41131846): Fetch/Caching policies for loadMore
|
96
68
|
var onComplete = options === null || options === void 0 ? void 0 : options.onComplete;
|
97
|
-
|
98
69
|
if (isMountedRef.current !== true) {
|
99
|
-
// Bail out and warn if we're trying to paginate after the component
|
100
|
-
// has unmounted
|
101
70
|
process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Unexpected fetch on unmounted component for fragment ' + '`%s` in `%s`. It looks like some instances of your component are ' + 'still trying to fetch data but they already unmounted. ' + 'Please make sure you clear all timers, intervals, ' + 'async calls, etc that may trigger a fetch.', fragmentNode.name, componentDisplayName) : void 0;
|
102
71
|
return {
|
103
72
|
dispose: function dispose() {}
|
104
73
|
};
|
105
74
|
}
|
106
|
-
|
107
75
|
var fragmentSelector = getSelector(fragmentNode, fragmentRef);
|
108
|
-
|
109
76
|
if (isFetchingRef.current === true || fragmentData == null || isParentQueryActive) {
|
110
77
|
if (fragmentSelector == null) {
|
111
78
|
process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Unexpected fetch while using a null fragment ref ' + 'for fragment `%s` in `%s`. When fetching more items, we expect ' + "initial fragment data to be non-null. Please make sure you're " + 'passing a valid fragment ref to `%s` before paginating.', fragmentNode.name, componentDisplayName, componentDisplayName) : void 0;
|
112
79
|
}
|
113
|
-
|
114
80
|
if (onComplete) {
|
115
81
|
onComplete(null);
|
116
82
|
}
|
117
|
-
|
118
83
|
return {
|
119
84
|
dispose: function dispose() {}
|
120
85
|
};
|
121
86
|
}
|
122
|
-
|
123
87
|
!(fragmentSelector != null && fragmentSelector.kind !== 'PluralReaderSelector') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected to be able to find a non-plural fragment owner for ' + "fragment `%s` when using `%s`. If you're seeing this, " + 'this is likely a bug in Relay.', fragmentNode.name, componentDisplayName) : invariant(false) : void 0;
|
124
88
|
var parentVariables = fragmentSelector.owner.variables;
|
125
89
|
var fragmentVariables = fragmentSelector.variables;
|
126
90
|
var extraVariables = options === null || options === void 0 ? void 0 : options.UNSTABLE_extraVariables;
|
127
91
|
var baseVariables = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, parentVariables), fragmentVariables);
|
128
|
-
var paginationVariables = getPaginationVariables(direction, count, cursor, baseVariables, (0, _objectSpread2["default"])({}, extraVariables), paginationMetadata);
|
129
|
-
|
130
|
-
|
131
|
-
if (identifierField != null) {
|
132
|
-
// @refetchable fragments are guaranteed to have an `id` selection
|
133
|
-
// if the type is Node, implements Node, or is @fetchable. Double-check
|
134
|
-
// that there actually is a value at runtime.
|
92
|
+
var paginationVariables = getPaginationVariables(direction, count, cursor, baseVariables, (0, _objectSpread2["default"])({}, extraVariables), paginationMetadata);
|
93
|
+
if (identifierInfo != null) {
|
135
94
|
if (typeof identifierValue !== 'string') {
|
136
|
-
process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Expected result to have a string ' + '`%s` in order to refetch, got `%s`.', identifierField, identifierValue) : void 0;
|
95
|
+
process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Expected result to have a string ' + '`%s` in order to refetch, got `%s`.', identifierInfo.identifierField, identifierValue) : void 0;
|
137
96
|
}
|
138
|
-
|
139
|
-
paginationVariables.id = identifierValue;
|
97
|
+
paginationVariables[identifierInfo.identifierQueryVariableName] = identifierValue;
|
140
98
|
}
|
141
|
-
|
142
99
|
var paginationQuery = createOperationDescriptor(paginationRequest, paginationVariables, {
|
143
100
|
force: true
|
144
101
|
});
|
@@ -161,60 +118,47 @@ function useLoadMoreFunction(args) {
|
|
161
118
|
return {
|
162
119
|
dispose: disposeFetch
|
163
120
|
};
|
164
|
-
},
|
165
|
-
// inside paginationMetadata are static
|
166
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
167
|
-
[environment, identifierValue, direction, cursor, startFetch, disposeFetch, completeFetch, isFetchingRef, isParentQueryActive, fragmentData, fragmentNode.name, fragmentRef, componentDisplayName]);
|
121
|
+
}, [environment, identifierValue, direction, cursor, startFetch, disposeFetch, completeFetch, isFetchingRef, isParentQueryActive, fragmentData, fragmentNode.name, fragmentRef, componentDisplayName]);
|
168
122
|
return [loadMore, hasMore, disposeFetch];
|
169
123
|
}
|
170
|
-
|
171
124
|
function getConnectionState(direction, fragmentNode, fragmentData, connectionPathInFragmentData) {
|
172
125
|
var _pageInfo$END_CURSOR, _pageInfo$START_CURSO;
|
173
|
-
|
174
126
|
var _ConnectionInterface$ = ConnectionInterface.get(),
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
127
|
+
EDGES = _ConnectionInterface$.EDGES,
|
128
|
+
PAGE_INFO = _ConnectionInterface$.PAGE_INFO,
|
129
|
+
HAS_NEXT_PAGE = _ConnectionInterface$.HAS_NEXT_PAGE,
|
130
|
+
HAS_PREV_PAGE = _ConnectionInterface$.HAS_PREV_PAGE,
|
131
|
+
END_CURSOR = _ConnectionInterface$.END_CURSOR,
|
132
|
+
START_CURSOR = _ConnectionInterface$.START_CURSOR;
|
182
133
|
var connection = getValueAtPath(fragmentData, connectionPathInFragmentData);
|
183
|
-
|
184
134
|
if (connection == null) {
|
185
135
|
return {
|
186
136
|
cursor: null,
|
187
137
|
hasMore: false
|
188
138
|
};
|
189
139
|
}
|
190
|
-
|
191
140
|
!(typeof connection === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected connection in fragment `%s` to have been `null`, or ' + 'a plain object with %s and %s properties. Instead got `%s`.', fragmentNode.name, EDGES, PAGE_INFO, connection) : invariant(false) : void 0;
|
192
141
|
var edges = connection[EDGES];
|
193
142
|
var pageInfo = connection[PAGE_INFO];
|
194
|
-
|
195
143
|
if (edges == null || pageInfo == null) {
|
196
144
|
return {
|
197
145
|
cursor: null,
|
198
146
|
hasMore: false
|
199
147
|
};
|
200
148
|
}
|
201
|
-
|
202
149
|
!Array.isArray(edges) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected connection in fragment `%s` to have a plural `%s` field. ' + 'Instead got `%s`.', fragmentNode.name, EDGES, edges) : invariant(false) : void 0;
|
203
150
|
!(typeof pageInfo === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected connection in fragment `%s` to have a `%s` field. ' + 'Instead got `%s`.', fragmentNode.name, PAGE_INFO, pageInfo) : invariant(false) : void 0;
|
204
151
|
var cursor = direction === 'forward' ? (_pageInfo$END_CURSOR = pageInfo[END_CURSOR]) !== null && _pageInfo$END_CURSOR !== void 0 ? _pageInfo$END_CURSOR : null : (_pageInfo$START_CURSO = pageInfo[START_CURSOR]) !== null && _pageInfo$START_CURSO !== void 0 ? _pageInfo$START_CURSO : null;
|
205
152
|
!(cursor === null || typeof cursor === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected page info for connection in fragment `%s` to have a ' + 'valid `%s`. Instead got `%s`.', fragmentNode.name, START_CURSOR, cursor) : invariant(false) : void 0;
|
206
153
|
var hasMore;
|
207
|
-
|
208
154
|
if (direction === 'forward') {
|
209
155
|
hasMore = cursor != null && pageInfo[HAS_NEXT_PAGE] === true;
|
210
156
|
} else {
|
211
157
|
hasMore = cursor != null && pageInfo[HAS_PREV_PAGE] === true;
|
212
158
|
}
|
213
|
-
|
214
159
|
return {
|
215
160
|
cursor: cursor,
|
216
161
|
hasMore: hasMore
|
217
162
|
};
|
218
163
|
}
|
219
|
-
|
220
164
|
module.exports = useLoadMoreFunction;
|