react-relay 14.1.0 → 16.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/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;
|