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,217 +1,53 @@
|
|
|
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
|
-
*
|
|
8
|
-
* @format
|
|
9
|
-
*/
|
|
10
1
|
'use strict';
|
|
11
2
|
|
|
12
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
13
|
-
|
|
14
4
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
15
|
-
|
|
16
5
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
17
|
-
|
|
18
6
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
19
|
-
|
|
20
7
|
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
|
|
21
|
-
|
|
22
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
23
|
-
|
|
24
9
|
var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
25
|
-
|
|
26
10
|
var _excluded = ["componentRef"],
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
11
|
+
_excluded2 = ["componentRef", "__relayContext", "__rootIsQueryRenderer"],
|
|
12
|
+
_excluded3 = ["componentRef", "__relayContext", "__rootIsQueryRenderer"];
|
|
30
13
|
var buildReactRelayContainer = require('./buildReactRelayContainer');
|
|
31
|
-
|
|
32
14
|
var getRootVariablesForFragments = require('./getRootVariablesForFragments');
|
|
33
|
-
|
|
34
15
|
var _require = require('./ReactRelayContainerUtils'),
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
16
|
+
getComponentName = _require.getComponentName,
|
|
17
|
+
getContainerName = _require.getContainerName;
|
|
38
18
|
var ReactRelayContext = require('./ReactRelayContext');
|
|
39
|
-
|
|
40
19
|
var ReactRelayQueryFetcher = require('./ReactRelayQueryFetcher');
|
|
41
|
-
|
|
42
20
|
var _require2 = require('./RelayContext'),
|
|
43
|
-
|
|
44
|
-
|
|
21
|
+
assertRelayContext = _require2.assertRelayContext;
|
|
45
22
|
var areEqual = require("fbjs/lib/areEqual");
|
|
46
|
-
|
|
47
23
|
var invariant = require('invariant');
|
|
48
|
-
|
|
49
24
|
var React = require('react');
|
|
50
|
-
|
|
51
25
|
var _require3 = require('relay-runtime'),
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
26
|
+
ConnectionInterface = _require3.ConnectionInterface,
|
|
27
|
+
Observable = _require3.Observable,
|
|
28
|
+
RelayFeatureFlags = _require3.RelayFeatureFlags,
|
|
29
|
+
createFragmentSpecResolver = _require3.createFragmentSpecResolver,
|
|
30
|
+
createOperationDescriptor = _require3.createOperationDescriptor,
|
|
31
|
+
getDataIDsFromObject = _require3.getDataIDsFromObject,
|
|
32
|
+
getRequest = _require3.getRequest,
|
|
33
|
+
getVariablesFromObject = _require3.getVariablesFromObject,
|
|
34
|
+
isScalarAndEqual = _require3.isScalarAndEqual;
|
|
62
35
|
var warning = require("fbjs/lib/warning");
|
|
63
|
-
|
|
64
36
|
var FORWARD = 'forward';
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Extends the functionality of RelayFragmentContainer by providing a mechanism
|
|
68
|
-
* to load more data from a connection.
|
|
69
|
-
*
|
|
70
|
-
* # Configuring a PaginationContainer
|
|
71
|
-
*
|
|
72
|
-
* PaginationContainer accepts the standard FragmentContainer arguments and an
|
|
73
|
-
* additional `connectionConfig` argument:
|
|
74
|
-
*
|
|
75
|
-
* - `Component`: the component to be wrapped/rendered.
|
|
76
|
-
* - `fragments`: an object whose values are `graphql` fragments. The object
|
|
77
|
-
* keys determine the prop names by which fragment data is available.
|
|
78
|
-
* - `connectionConfig`: an object that determines how to load more connection
|
|
79
|
-
* data. Details below.
|
|
80
|
-
*
|
|
81
|
-
* # Loading More Data
|
|
82
|
-
*
|
|
83
|
-
* Use `props.relay.hasMore()` to determine if there are more items to load.
|
|
84
|
-
*
|
|
85
|
-
* ```
|
|
86
|
-
* hasMore(): boolean
|
|
87
|
-
* ```
|
|
88
|
-
*
|
|
89
|
-
* Use `props.relay.isLoading()` to determine if a previous call to `loadMore()`
|
|
90
|
-
* is still pending. This is convenient for avoiding duplicate load calls.
|
|
91
|
-
*
|
|
92
|
-
* ```
|
|
93
|
-
* isLoading(): boolean
|
|
94
|
-
* ```
|
|
95
|
-
*
|
|
96
|
-
* Use `props.relay.loadMore()` to load more items. This will return null if
|
|
97
|
-
* there are no more items to fetch, otherwise it will fetch more items and
|
|
98
|
-
* return a Disposable that can be used to cancel the fetch.
|
|
99
|
-
*
|
|
100
|
-
* `pageSize` should be the number of *additional* items to fetch (not the
|
|
101
|
-
* total).
|
|
102
|
-
*
|
|
103
|
-
* ```
|
|
104
|
-
* loadMore(pageSize: number, callback: ?(error: ?Error) => void): ?Disposable
|
|
105
|
-
* ```
|
|
106
|
-
*
|
|
107
|
-
* A complete example:
|
|
108
|
-
*
|
|
109
|
-
* ```
|
|
110
|
-
* class Foo extends React.Component {
|
|
111
|
-
* ...
|
|
112
|
-
* _onEndReached() {
|
|
113
|
-
* if (!this.props.relay.hasMore() || this.props.relay.isLoading()) {
|
|
114
|
-
* return;
|
|
115
|
-
* }
|
|
116
|
-
* this.props.relay.loadMore(10);
|
|
117
|
-
* }
|
|
118
|
-
* ...
|
|
119
|
-
* }
|
|
120
|
-
* ```
|
|
121
|
-
*
|
|
122
|
-
* # Connection Config
|
|
123
|
-
*
|
|
124
|
-
* Here's an example, followed by details of each config property:
|
|
125
|
-
*
|
|
126
|
-
* ```
|
|
127
|
-
* ReactRelayPaginationContainer.createContainer(
|
|
128
|
-
* Component,
|
|
129
|
-
* {
|
|
130
|
-
* user: graphql`fragment FriendsFragment on User {
|
|
131
|
-
* friends(after: $afterCursor first: $count) @connection {
|
|
132
|
-
* edges { ... }
|
|
133
|
-
* pageInfo {
|
|
134
|
-
* startCursor
|
|
135
|
-
* endCursor
|
|
136
|
-
* hasNextPage
|
|
137
|
-
* hasPreviousPage
|
|
138
|
-
* }
|
|
139
|
-
* }
|
|
140
|
-
* }`,
|
|
141
|
-
* },
|
|
142
|
-
* {
|
|
143
|
-
* direction: 'forward',
|
|
144
|
-
* getConnectionFromProps(props) {
|
|
145
|
-
* return props.user && props.user.friends;
|
|
146
|
-
* },
|
|
147
|
-
* getFragmentVariables(vars, totalCount) {
|
|
148
|
-
* // The component presumably wants *all* edges, not just those after
|
|
149
|
-
* // the cursor, so notice that we don't set $afterCursor here.
|
|
150
|
-
* return {
|
|
151
|
-
* ...vars,
|
|
152
|
-
* count: totalCount,
|
|
153
|
-
* };
|
|
154
|
-
* },
|
|
155
|
-
* getVariables(props, {count, cursor}, fragmentVariables) {
|
|
156
|
-
* return {
|
|
157
|
-
* id: props.user.id,
|
|
158
|
-
* afterCursor: cursor,
|
|
159
|
-
* count,
|
|
160
|
-
* },
|
|
161
|
-
* },
|
|
162
|
-
* query: graphql`
|
|
163
|
-
* query FriendsQuery($id: ID!, $afterCursor: ID, $count: Int!) {
|
|
164
|
-
* node(id: $id) {
|
|
165
|
-
* ...FriendsFragment
|
|
166
|
-
* }
|
|
167
|
-
* }
|
|
168
|
-
* `,
|
|
169
|
-
* }
|
|
170
|
-
* );
|
|
171
|
-
* ```
|
|
172
|
-
*
|
|
173
|
-
* ## Config Properties
|
|
174
|
-
*
|
|
175
|
-
* - `direction`: Either "forward" to indicate forward pagination using
|
|
176
|
-
* after/first, or "backward" to indicate backward pagination using
|
|
177
|
-
* before/last.
|
|
178
|
-
* - `getConnectionFromProps(props)`: PaginationContainer doesn't magically know
|
|
179
|
-
* which connection data you mean to fetch more of (a container might fetch
|
|
180
|
-
* multiple connections, but can only paginate one of them). This function is
|
|
181
|
-
* given the fragment props only (not full props), and should return the
|
|
182
|
-
* connection data. See the above example that returns the friends data via
|
|
183
|
-
* `props.user.friends`.
|
|
184
|
-
* - `getFragmentVariables(previousVars, totalCount)`: Given the previous variables
|
|
185
|
-
* and the new total number of items, get the variables to use when reading
|
|
186
|
-
* your fragments. Typically this means setting whatever your local "count"
|
|
187
|
-
* variable is to the value of `totalCount`. See the example.
|
|
188
|
-
* - `getVariables(props, {count, cursor})`: Get the variables to use when
|
|
189
|
-
* fetching the pagination `query`. You may determine the root object id from
|
|
190
|
-
* props (see the example that uses `props.user.id`) and may also set whatever
|
|
191
|
-
* variables you use for the after/first/before/last calls based on the count
|
|
192
|
-
* and cursor.
|
|
193
|
-
* - `query`: A query to use when fetching more connection data. This should
|
|
194
|
-
* typically reference one of the container's fragment (as in the example)
|
|
195
|
-
* to ensure that all the necessary fields for sub-components are fetched.
|
|
196
|
-
*/
|
|
197
37
|
function createGetConnectionFromProps(metadata) {
|
|
198
38
|
var path = metadata.path;
|
|
199
39
|
!path ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Unable to synthesize a ' + 'getConnectionFromProps function.') : invariant(false) : void 0;
|
|
200
40
|
return function (props) {
|
|
201
41
|
var data = props[metadata.fragmentName];
|
|
202
|
-
|
|
203
42
|
for (var i = 0; i < path.length; i++) {
|
|
204
43
|
if (!data || typeof data !== 'object') {
|
|
205
44
|
return null;
|
|
206
45
|
}
|
|
207
|
-
|
|
208
46
|
data = data[path[i]];
|
|
209
47
|
}
|
|
210
|
-
|
|
211
48
|
return data;
|
|
212
49
|
};
|
|
213
50
|
}
|
|
214
|
-
|
|
215
51
|
function createGetFragmentVariables(metadata) {
|
|
216
52
|
var countVariable = metadata.count;
|
|
217
53
|
!countVariable ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Unable to synthesize a ' + 'getFragmentVariables function.') : invariant(false) : void 0;
|
|
@@ -219,21 +55,15 @@ function createGetFragmentVariables(metadata) {
|
|
|
219
55
|
return (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, prevVars), {}, (0, _defineProperty2["default"])({}, countVariable, totalCount));
|
|
220
56
|
};
|
|
221
57
|
}
|
|
222
|
-
|
|
223
58
|
function findConnectionMetadata(fragments) {
|
|
224
59
|
var foundConnectionMetadata = null;
|
|
225
60
|
var isRelayModern = false;
|
|
226
|
-
|
|
227
61
|
for (var fragmentName in fragments) {
|
|
228
62
|
var fragment = fragments[fragmentName];
|
|
229
|
-
var connectionMetadata = fragment.metadata && fragment.metadata.connection;
|
|
230
|
-
// if empty, it is set to null (never undefined). We use that knowlege to
|
|
231
|
-
// check if we're dealing with classic or modern
|
|
232
|
-
|
|
63
|
+
var connectionMetadata = fragment.metadata && fragment.metadata.connection;
|
|
233
64
|
if (fragment.metadata !== undefined) {
|
|
234
65
|
isRelayModern = true;
|
|
235
66
|
}
|
|
236
|
-
|
|
237
67
|
if (connectionMetadata) {
|
|
238
68
|
!(connectionMetadata.length === 1) ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Only a single @connection is ' + 'supported, `%s` has %s.', fragmentName, connectionMetadata.length) : invariant(false) : void 0;
|
|
239
69
|
!!foundConnectionMetadata ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Only a single fragment with ' + '@connection is supported.') : invariant(false) : void 0;
|
|
@@ -242,11 +72,9 @@ function findConnectionMetadata(fragments) {
|
|
|
242
72
|
});
|
|
243
73
|
}
|
|
244
74
|
}
|
|
245
|
-
|
|
246
75
|
!(!isRelayModern || foundConnectionMetadata !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: A @connection directive must be present.') : invariant(false) : void 0;
|
|
247
76
|
return foundConnectionMetadata || {};
|
|
248
77
|
}
|
|
249
|
-
|
|
250
78
|
function toObserver(observerOrCallback) {
|
|
251
79
|
return typeof observerOrCallback === 'function' ? {
|
|
252
80
|
error: observerOrCallback,
|
|
@@ -256,10 +84,8 @@ function toObserver(observerOrCallback) {
|
|
|
256
84
|
}
|
|
257
85
|
} : observerOrCallback || {};
|
|
258
86
|
}
|
|
259
|
-
|
|
260
87
|
function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
261
88
|
var _class;
|
|
262
|
-
|
|
263
89
|
var componentName = getComponentName(Component);
|
|
264
90
|
var containerName = getContainerName(Component);
|
|
265
91
|
var metadata = findConnectionMetadata(fragments);
|
|
@@ -269,10 +95,8 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
269
95
|
var getFragmentVariables = connectionConfig.getFragmentVariables || createGetFragmentVariables(metadata);
|
|
270
96
|
return _class = /*#__PURE__*/function (_React$Component) {
|
|
271
97
|
(0, _inheritsLoose2["default"])(_class, _React$Component);
|
|
272
|
-
|
|
273
98
|
function _class(props) {
|
|
274
99
|
var _props$__rootIsQueryR, _this;
|
|
275
|
-
|
|
276
100
|
_this = _React$Component.call(this, props) || this;
|
|
277
101
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_handleFragmentDataUpdate", function () {
|
|
278
102
|
_this.setState({
|
|
@@ -281,7 +105,6 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
281
105
|
});
|
|
282
106
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_hasMore", function () {
|
|
283
107
|
var connectionData = _this._getConnectionData();
|
|
284
|
-
|
|
285
108
|
return !!(connectionData && connectionData.hasMore && connectionData.cursor);
|
|
286
109
|
});
|
|
287
110
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_isLoading", function () {
|
|
@@ -293,18 +116,15 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
293
116
|
dispose: function dispose() {}
|
|
294
117
|
};
|
|
295
118
|
}
|
|
296
|
-
|
|
297
119
|
_this._refetchVariables = refetchVariables;
|
|
298
120
|
var paginatingVariables = {
|
|
299
121
|
count: totalCount,
|
|
300
122
|
cursor: null,
|
|
301
123
|
totalCount: totalCount
|
|
302
124
|
};
|
|
303
|
-
|
|
304
125
|
var fetch = _this._fetchPage(paginatingVariables, toObserver(observerOrCallback), {
|
|
305
126
|
force: true
|
|
306
127
|
});
|
|
307
|
-
|
|
308
128
|
return {
|
|
309
129
|
dispose: fetch.unsubscribe
|
|
310
130
|
};
|
|
@@ -315,28 +135,21 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
315
135
|
dispose: function dispose() {}
|
|
316
136
|
};
|
|
317
137
|
}
|
|
318
|
-
|
|
319
138
|
var observer = toObserver(observerOrCallback);
|
|
320
|
-
|
|
321
139
|
var connectionData = _this._getConnectionData();
|
|
322
|
-
|
|
323
140
|
if (!connectionData) {
|
|
324
141
|
Observable.create(function (sink) {
|
|
325
142
|
return sink.complete();
|
|
326
143
|
}).subscribe(observer);
|
|
327
144
|
return null;
|
|
328
145
|
}
|
|
329
|
-
|
|
330
146
|
var totalCount = connectionData.edgeCount + pageSize;
|
|
331
|
-
|
|
332
147
|
if (options && options.force) {
|
|
333
148
|
return _this._refetchConnection(totalCount, observerOrCallback);
|
|
334
149
|
}
|
|
335
|
-
|
|
336
150
|
var _ConnectionInterface$ = ConnectionInterface.get(),
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
151
|
+
END_CURSOR = _ConnectionInterface$.END_CURSOR,
|
|
152
|
+
START_CURSOR = _ConnectionInterface$.START_CURSOR;
|
|
340
153
|
var cursor = connectionData.cursor;
|
|
341
154
|
process.env.NODE_ENV !== "production" ? warning(cursor != null && cursor !== '', 'ReactRelayPaginationContainer: Cannot `loadMore` without valid `%s` (got `%s`)', direction === FORWARD ? END_CURSOR : START_CURSOR, cursor) : void 0;
|
|
342
155
|
var paginatingVariables = {
|
|
@@ -344,9 +157,7 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
344
157
|
cursor: cursor,
|
|
345
158
|
totalCount: totalCount
|
|
346
159
|
};
|
|
347
|
-
|
|
348
160
|
var fetch = _this._fetchPage(paginatingVariables, observer, options);
|
|
349
|
-
|
|
350
161
|
return {
|
|
351
162
|
dispose: fetch.unsubscribe
|
|
352
163
|
};
|
|
@@ -356,13 +167,11 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
356
167
|
_this._isARequestInFlight = false;
|
|
357
168
|
_this._refetchSubscription = null;
|
|
358
169
|
_this._refetchVariables = null;
|
|
359
|
-
|
|
360
170
|
if (RelayFeatureFlags.ENABLE_CONTAINERS_SUBSCRIBE_ON_COMMIT === true) {
|
|
361
171
|
_this._resolver = createFragmentSpecResolver(relayContext, containerName, fragments, props, rootIsQueryRenderer);
|
|
362
172
|
} else {
|
|
363
173
|
_this._resolver = createFragmentSpecResolver(relayContext, containerName, fragments, props, rootIsQueryRenderer, _this._handleFragmentDataUpdate);
|
|
364
174
|
}
|
|
365
|
-
|
|
366
175
|
_this.state = {
|
|
367
176
|
data: _this._resolver.resolve(),
|
|
368
177
|
prevContext: relayContext,
|
|
@@ -374,17 +183,13 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
374
183
|
_this._hasFetched = false;
|
|
375
184
|
return _this;
|
|
376
185
|
}
|
|
377
|
-
|
|
378
186
|
var _proto = _class.prototype;
|
|
379
|
-
|
|
380
187
|
_proto.componentDidMount = function componentDidMount() {
|
|
381
188
|
this._isUnmounted = false;
|
|
382
|
-
|
|
383
189
|
if (RelayFeatureFlags.ENABLE_CONTAINERS_SUBSCRIBE_ON_COMMIT === true) {
|
|
384
190
|
this._subscribeToNewResolverAndRerenderIfStoreHasChanged();
|
|
385
191
|
}
|
|
386
192
|
};
|
|
387
|
-
|
|
388
193
|
_proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {
|
|
389
194
|
if (RelayFeatureFlags.ENABLE_CONTAINERS_SUBSCRIBE_ON_COMMIT === true) {
|
|
390
195
|
if (prevState.resolverGeneration !== this.state.resolverGeneration) {
|
|
@@ -393,40 +198,23 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
393
198
|
this._rerenderIfStoreHasChanged();
|
|
394
199
|
}
|
|
395
200
|
}
|
|
396
|
-
}
|
|
397
|
-
/**
|
|
398
|
-
* When new props are received, read data for the new props and subscribe
|
|
399
|
-
* for updates. Props may be the same in which case previous data and
|
|
400
|
-
* subscriptions can be reused.
|
|
401
|
-
*/
|
|
402
|
-
;
|
|
403
|
-
|
|
201
|
+
};
|
|
404
202
|
_proto.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps(nextProps) {
|
|
405
203
|
var _this2 = this;
|
|
406
|
-
|
|
407
204
|
var _nextProps$__rootIsQu;
|
|
408
|
-
|
|
409
205
|
var relayContext = assertRelayContext(nextProps.__relayContext);
|
|
410
206
|
var rootIsQueryRenderer = (_nextProps$__rootIsQu = nextProps.__rootIsQueryRenderer) !== null && _nextProps$__rootIsQu !== void 0 ? _nextProps$__rootIsQu : false;
|
|
411
207
|
var prevIDs = getDataIDsFromObject(fragments, this.props);
|
|
412
208
|
var nextIDs = getDataIDsFromObject(fragments, nextProps);
|
|
413
209
|
var prevRootVariables = getRootVariablesForFragments(fragments, this.props);
|
|
414
|
-
var nextRootVariables = getRootVariablesForFragments(fragments, nextProps);
|
|
415
|
-
// previously fetched data and any pending fetches no longer apply:
|
|
416
|
-
// - Existing references are on the old environment.
|
|
417
|
-
// - Existing references are based on old variables.
|
|
418
|
-
// - Pending fetches are for the previous records.
|
|
419
|
-
|
|
210
|
+
var nextRootVariables = getRootVariablesForFragments(fragments, nextProps);
|
|
420
211
|
if (relayContext.environment !== this.state.prevContext.environment || !areEqual(prevRootVariables, nextRootVariables) || !areEqual(prevIDs, nextIDs)) {
|
|
421
|
-
this._cleanup();
|
|
422
|
-
|
|
423
|
-
|
|
212
|
+
this._cleanup();
|
|
424
213
|
if (RelayFeatureFlags.ENABLE_CONTAINERS_SUBSCRIBE_ON_COMMIT === true) {
|
|
425
214
|
this._resolver = createFragmentSpecResolver(relayContext, containerName, fragments, nextProps, rootIsQueryRenderer);
|
|
426
215
|
} else {
|
|
427
216
|
this._resolver = createFragmentSpecResolver(relayContext, containerName, fragments, nextProps, rootIsQueryRenderer, this._handleFragmentDataUpdate);
|
|
428
217
|
}
|
|
429
|
-
|
|
430
218
|
this.setState(function (prevState) {
|
|
431
219
|
return {
|
|
432
220
|
prevContext: relayContext,
|
|
@@ -438,35 +226,24 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
438
226
|
} else if (!this._hasFetched) {
|
|
439
227
|
this._resolver.setProps(nextProps);
|
|
440
228
|
}
|
|
441
|
-
|
|
442
229
|
var data = this._resolver.resolve();
|
|
443
|
-
|
|
444
230
|
if (data !== this.state.data) {
|
|
445
231
|
this.setState({
|
|
446
232
|
data: data
|
|
447
233
|
});
|
|
448
234
|
}
|
|
449
235
|
};
|
|
450
|
-
|
|
451
236
|
_proto.componentWillUnmount = function componentWillUnmount() {
|
|
452
237
|
this._isUnmounted = true;
|
|
453
|
-
|
|
454
238
|
this._cleanup();
|
|
455
239
|
};
|
|
456
|
-
|
|
457
240
|
_proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {
|
|
458
|
-
// Short-circuit if any Relay-related data has changed
|
|
459
241
|
if (nextState.data !== this.state.data || nextState.relayProp !== this.state.relayProp || nextState.resolverGeneration !== this.state.resolverGeneration) {
|
|
460
242
|
return true;
|
|
461
|
-
}
|
|
462
|
-
// are scalar and equal
|
|
463
|
-
|
|
464
|
-
|
|
243
|
+
}
|
|
465
244
|
var keys = Object.keys(nextProps);
|
|
466
|
-
|
|
467
245
|
for (var ii = 0; ii < keys.length; ii++) {
|
|
468
246
|
var key = keys[ii];
|
|
469
|
-
|
|
470
247
|
if (key === '__relayContext') {
|
|
471
248
|
if (nextState.prevContext.environment !== this.state.prevContext.environment) {
|
|
472
249
|
return true;
|
|
@@ -477,10 +254,8 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
477
254
|
}
|
|
478
255
|
}
|
|
479
256
|
}
|
|
480
|
-
|
|
481
257
|
return false;
|
|
482
258
|
};
|
|
483
|
-
|
|
484
259
|
_proto._buildRelayProp = function _buildRelayProp(relayContext) {
|
|
485
260
|
return {
|
|
486
261
|
hasMore: this._hasMore,
|
|
@@ -490,115 +265,83 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
490
265
|
environment: relayContext.environment
|
|
491
266
|
};
|
|
492
267
|
};
|
|
493
|
-
|
|
494
268
|
_proto._rerenderIfStoreHasChanged = function _rerenderIfStoreHasChanged() {
|
|
495
|
-
var data = this.state.data;
|
|
496
|
-
// Check for this case, even though it requires an extra store read.
|
|
497
|
-
|
|
269
|
+
var data = this.state.data;
|
|
498
270
|
var maybeNewData = this._resolver.resolve();
|
|
499
|
-
|
|
500
271
|
if (data !== maybeNewData) {
|
|
501
272
|
this.setState({
|
|
502
273
|
data: maybeNewData
|
|
503
274
|
});
|
|
504
275
|
}
|
|
505
276
|
};
|
|
506
|
-
|
|
507
277
|
_proto._subscribeToNewResolverAndRerenderIfStoreHasChanged = function _subscribeToNewResolverAndRerenderIfStoreHasChanged() {
|
|
508
278
|
var data = this.state.data;
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
// So they won't leak if render is interrupted or errors.
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
this._resolver.setCallback(this.props, this._handleFragmentDataUpdate); // External values could change between render and commit.
|
|
515
|
-
// Check for this case, even though it requires an extra store read.
|
|
516
|
-
|
|
517
|
-
|
|
279
|
+
var maybeNewData = this._resolver.resolve();
|
|
280
|
+
this._resolver.setCallback(this.props, this._handleFragmentDataUpdate);
|
|
518
281
|
if (data !== maybeNewData) {
|
|
519
282
|
this.setState({
|
|
520
283
|
data: maybeNewData
|
|
521
284
|
});
|
|
522
285
|
}
|
|
523
|
-
}
|
|
524
|
-
/**
|
|
525
|
-
* Render new data for the existing props/context.
|
|
526
|
-
*/
|
|
527
|
-
;
|
|
528
|
-
|
|
286
|
+
};
|
|
529
287
|
_proto._getConnectionData = function _getConnectionData() {
|
|
530
|
-
// Extract connection data and verify there are more edges to fetch
|
|
531
288
|
var _this$props = this.props,
|
|
532
|
-
|
|
533
|
-
|
|
289
|
+
_ = _this$props.componentRef,
|
|
290
|
+
restProps = (0, _objectWithoutPropertiesLoose2["default"])(_this$props, _excluded);
|
|
534
291
|
var props = (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, restProps), this.state.data);
|
|
535
292
|
var connectionData = getConnectionFromProps(props);
|
|
536
|
-
|
|
537
293
|
if (connectionData == null) {
|
|
538
294
|
return null;
|
|
539
295
|
}
|
|
540
|
-
|
|
541
296
|
var _ConnectionInterface$2 = ConnectionInterface.get(),
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
297
|
+
EDGES = _ConnectionInterface$2.EDGES,
|
|
298
|
+
PAGE_INFO = _ConnectionInterface$2.PAGE_INFO,
|
|
299
|
+
HAS_NEXT_PAGE = _ConnectionInterface$2.HAS_NEXT_PAGE,
|
|
300
|
+
HAS_PREV_PAGE = _ConnectionInterface$2.HAS_PREV_PAGE,
|
|
301
|
+
END_CURSOR = _ConnectionInterface$2.END_CURSOR,
|
|
302
|
+
START_CURSOR = _ConnectionInterface$2.START_CURSOR;
|
|
549
303
|
!(typeof connectionData === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Expected `getConnectionFromProps()` in `%s`' + 'to return `null` or a plain object with %s and %s properties, got `%s`.', componentName, EDGES, PAGE_INFO, connectionData) : invariant(false) : void 0;
|
|
550
304
|
var edges = connectionData[EDGES];
|
|
551
305
|
var pageInfo = connectionData[PAGE_INFO];
|
|
552
|
-
|
|
553
306
|
if (edges == null || pageInfo == null) {
|
|
554
307
|
return null;
|
|
555
308
|
}
|
|
556
|
-
|
|
557
309
|
!Array.isArray(edges) ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Expected `getConnectionFromProps()` in `%s`' + 'to return an object with %s: Array, got `%s`.', componentName, EDGES, edges) : invariant(false) : void 0;
|
|
558
310
|
!(typeof pageInfo === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'ReactRelayPaginationContainer: Expected `getConnectionFromProps()` in `%s`' + 'to return an object with %s: Object, got `%s`.', componentName, PAGE_INFO, pageInfo) : invariant(false) : void 0;
|
|
559
311
|
var hasMore = direction === FORWARD ? pageInfo[HAS_NEXT_PAGE] : pageInfo[HAS_PREV_PAGE];
|
|
560
312
|
var cursor = direction === FORWARD ? pageInfo[END_CURSOR] : pageInfo[START_CURSOR];
|
|
561
|
-
|
|
562
313
|
if (typeof hasMore !== 'boolean' || edges.length !== 0 && typeof cursor === 'undefined') {
|
|
563
314
|
process.env.NODE_ENV !== "production" ? warning(false, 'ReactRelayPaginationContainer: Cannot paginate without %s fields in `%s`. ' + 'Be sure to fetch %s (got `%s`) and %s (got `%s`).', PAGE_INFO, componentName, direction === FORWARD ? HAS_NEXT_PAGE : HAS_PREV_PAGE, hasMore, direction === FORWARD ? END_CURSOR : START_CURSOR, cursor) : void 0;
|
|
564
315
|
return null;
|
|
565
316
|
}
|
|
566
|
-
|
|
567
317
|
return {
|
|
568
318
|
cursor: cursor,
|
|
569
319
|
edgeCount: edges.length,
|
|
570
320
|
hasMore: hasMore
|
|
571
321
|
};
|
|
572
322
|
};
|
|
573
|
-
|
|
574
323
|
_proto._getQueryFetcher = function _getQueryFetcher() {
|
|
575
324
|
if (!this._queryFetcher) {
|
|
576
325
|
this._queryFetcher = new ReactRelayQueryFetcher();
|
|
577
326
|
}
|
|
578
|
-
|
|
579
327
|
return this._queryFetcher;
|
|
580
328
|
};
|
|
581
|
-
|
|
582
329
|
_proto._canFetchPage = function _canFetchPage(method) {
|
|
583
330
|
if (this._isUnmounted) {
|
|
584
331
|
process.env.NODE_ENV !== "production" ? warning(false, 'ReactRelayPaginationContainer: Unexpected call of `%s` ' + 'on unmounted container `%s`. It looks like some instances ' + 'of your container still trying to fetch data but they already ' + 'unmounted. Please make sure you clear all timers, intervals, async ' + 'calls, etc that may trigger `%s` call.', method, containerName, method) : void 0;
|
|
585
332
|
return false;
|
|
586
333
|
}
|
|
587
|
-
|
|
588
334
|
return true;
|
|
589
335
|
};
|
|
590
|
-
|
|
591
336
|
_proto._fetchPage = function _fetchPage(paginatingVariables, observer, options) {
|
|
592
337
|
var _this3 = this;
|
|
593
|
-
|
|
594
338
|
var _assertRelayContext = assertRelayContext(this.props.__relayContext),
|
|
595
|
-
|
|
596
|
-
|
|
339
|
+
environment = _assertRelayContext.environment;
|
|
597
340
|
var _this$props2 = this.props,
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
341
|
+
_ = _this$props2.componentRef,
|
|
342
|
+
__relayContext = _this$props2.__relayContext,
|
|
343
|
+
__rootIsQueryRenderer = _this$props2.__rootIsQueryRenderer,
|
|
344
|
+
restProps = (0, _objectWithoutPropertiesLoose2["default"])(_this$props2, _excluded2);
|
|
602
345
|
var props = (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, restProps), this.state.data);
|
|
603
346
|
var fragmentVariables;
|
|
604
347
|
var rootVariables = getRootVariablesForFragments(fragments, restProps);
|
|
@@ -614,37 +357,20 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
614
357
|
var cacheConfig = options ? {
|
|
615
358
|
force: !!options.force
|
|
616
359
|
} : undefined;
|
|
617
|
-
|
|
618
360
|
if (cacheConfig != null && (options === null || options === void 0 ? void 0 : options.metadata) != null) {
|
|
619
361
|
cacheConfig.metadata = options === null || options === void 0 ? void 0 : options.metadata;
|
|
620
362
|
}
|
|
621
|
-
|
|
622
363
|
var request = getRequest(connectionConfig.query);
|
|
623
364
|
var operation = createOperationDescriptor(request, fetchVariables, cacheConfig);
|
|
624
365
|
var refetchSubscription = null;
|
|
625
|
-
|
|
626
366
|
if (this._refetchSubscription) {
|
|
627
367
|
this._refetchSubscription.unsubscribe();
|
|
628
368
|
}
|
|
629
|
-
|
|
630
369
|
this._hasFetched = true;
|
|
631
|
-
|
|
632
370
|
var onNext = function onNext(payload, complete) {
|
|
633
371
|
var prevData = _this3._resolver.resolve();
|
|
634
|
-
|
|
635
372
|
_this3._resolver.setVariables(getFragmentVariables(fragmentVariables, paginatingVariables.totalCount), operation.request.node);
|
|
636
|
-
|
|
637
|
-
var nextData = _this3._resolver.resolve(); // Workaround slightly different handling for connection in different
|
|
638
|
-
// core implementations:
|
|
639
|
-
// - Classic core requires the count to be explicitly incremented
|
|
640
|
-
// - Modern core automatically appends new items, updating the count
|
|
641
|
-
// isn't required to see new data.
|
|
642
|
-
//
|
|
643
|
-
// `setState` is only required if changing the variables would change the
|
|
644
|
-
// resolved data.
|
|
645
|
-
// TODO #14894725: remove PaginationContainer equal check
|
|
646
|
-
|
|
647
|
-
|
|
373
|
+
var nextData = _this3._resolver.resolve();
|
|
648
374
|
if (!areEqual(prevData, nextData)) {
|
|
649
375
|
_this3.setState({
|
|
650
376
|
data: nextData,
|
|
@@ -656,14 +382,12 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
656
382
|
complete();
|
|
657
383
|
}
|
|
658
384
|
};
|
|
659
|
-
|
|
660
385
|
var cleanup = function cleanup() {
|
|
661
386
|
if (_this3._refetchSubscription === refetchSubscription) {
|
|
662
387
|
_this3._refetchSubscription = null;
|
|
663
388
|
_this3._isARequestInFlight = false;
|
|
664
389
|
}
|
|
665
390
|
};
|
|
666
|
-
|
|
667
391
|
this._isARequestInFlight = true;
|
|
668
392
|
refetchSubscription = this._getQueryFetcher().execute({
|
|
669
393
|
environment: environment,
|
|
@@ -672,13 +396,11 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
672
396
|
}).mergeMap(function (payload) {
|
|
673
397
|
return Observable.create(function (sink) {
|
|
674
398
|
onNext(payload, function () {
|
|
675
|
-
sink.next();
|
|
676
|
-
|
|
399
|
+
sink.next();
|
|
677
400
|
sink.complete();
|
|
678
401
|
});
|
|
679
402
|
});
|
|
680
|
-
})
|
|
681
|
-
["do"]({
|
|
403
|
+
})["do"]({
|
|
682
404
|
error: cleanup,
|
|
683
405
|
complete: cleanup,
|
|
684
406
|
unsubscribe: cleanup
|
|
@@ -686,31 +408,25 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
686
408
|
this._refetchSubscription = this._isARequestInFlight ? refetchSubscription : null;
|
|
687
409
|
return refetchSubscription;
|
|
688
410
|
};
|
|
689
|
-
|
|
690
411
|
_proto._cleanup = function _cleanup() {
|
|
691
412
|
this._resolver.dispose();
|
|
692
|
-
|
|
693
413
|
this._refetchVariables = null;
|
|
694
414
|
this._hasFetched = false;
|
|
695
|
-
|
|
696
415
|
if (this._refetchSubscription) {
|
|
697
416
|
this._refetchSubscription.unsubscribe();
|
|
698
|
-
|
|
699
417
|
this._refetchSubscription = null;
|
|
700
418
|
this._isARequestInFlight = false;
|
|
701
419
|
}
|
|
702
|
-
|
|
703
420
|
if (this._queryFetcher) {
|
|
704
421
|
this._queryFetcher.dispose();
|
|
705
422
|
}
|
|
706
423
|
};
|
|
707
|
-
|
|
708
424
|
_proto.render = function render() {
|
|
709
425
|
var _this$props3 = this.props,
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
426
|
+
componentRef = _this$props3.componentRef,
|
|
427
|
+
__relayContext = _this$props3.__relayContext,
|
|
428
|
+
__rootIsQueryRenderer = _this$props3.__rootIsQueryRenderer,
|
|
429
|
+
props = (0, _objectWithoutPropertiesLoose2["default"])(_this$props3, _excluded3);
|
|
714
430
|
return /*#__PURE__*/React.createElement(ReactRelayContext.Provider, {
|
|
715
431
|
value: this.state.contextForChildren
|
|
716
432
|
}, /*#__PURE__*/React.createElement(Component, (0, _extends2["default"])({}, props, this.state.data, {
|
|
@@ -718,26 +434,14 @@ function createContainerWithFragments(Component, fragments, connectionConfig) {
|
|
|
718
434
|
relay: this.state.relayProp
|
|
719
435
|
})));
|
|
720
436
|
};
|
|
721
|
-
|
|
722
437
|
return _class;
|
|
723
438
|
}(React.Component), (0, _defineProperty2["default"])(_class, "displayName", containerName), _class;
|
|
724
439
|
}
|
|
725
|
-
/**
|
|
726
|
-
* Wrap the basic `createContainer()` function with logic to adapt to the
|
|
727
|
-
* `context.relay.environment` in which it is rendered. Specifically, the
|
|
728
|
-
* extraction of the environment-specific version of fragments in the
|
|
729
|
-
* `fragmentSpec` is memoized once per environment, rather than once per
|
|
730
|
-
* instance of the container constructed/rendered.
|
|
731
|
-
*/
|
|
732
|
-
|
|
733
|
-
|
|
734
440
|
function createContainer(Component, fragmentSpec, connectionConfig) {
|
|
735
|
-
// $FlowFixMe[incompatible-return]
|
|
736
441
|
return buildReactRelayContainer(Component, fragmentSpec, function (ComponentClass, fragments) {
|
|
737
442
|
return createContainerWithFragments(ComponentClass, fragments, connectionConfig);
|
|
738
443
|
});
|
|
739
444
|
}
|
|
740
|
-
|
|
741
445
|
module.exports = {
|
|
742
446
|
createContainer: createContainer
|
|
743
447
|
};
|