react-relay 13.1.1 → 14.1.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 +0 -2
- package/ReactRelayContext.js +1 -1
- package/ReactRelayContext.js.flow +0 -2
- package/ReactRelayFragmentContainer.js.flow +7 -6
- package/ReactRelayFragmentMockRenderer.js.flow +0 -2
- package/ReactRelayLocalQueryRenderer.js.flow +1 -3
- package/ReactRelayPaginationContainer.js.flow +13 -10
- package/ReactRelayQueryFetcher.js.flow +10 -11
- package/ReactRelayQueryRenderer.js.flow +15 -16
- package/ReactRelayQueryRendererContext.js.flow +1 -3
- package/ReactRelayRefetchContainer.js.flow +10 -7
- package/ReactRelayTestMocker.js.flow +0 -2
- package/ReactRelayTypes.js.flow +6 -8
- package/RelayContext.js.flow +0 -2
- package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +2 -4
- package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +3 -5
- package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +3 -5
- package/__flowtests__/RelayModern-flowtest.js.flow +2 -4
- package/__flowtests__/RelayModernFlowtest_badref.graphql.js.flow +2 -4
- package/__flowtests__/RelayModernFlowtest_notref.graphql.js.flow +2 -4
- package/__flowtests__/RelayModernFlowtest_user.graphql.js.flow +2 -4
- package/__flowtests__/RelayModernFlowtest_users.graphql.js.flow +2 -4
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow +2 -2
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +2 -2
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +3 -3
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +3 -3
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +3 -3
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +3 -3
- package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +2 -2
- package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +2 -2
- package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +2 -2
- package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +2 -2
- package/assertFragmentMap.js.flow +0 -2
- package/buildReactRelayContainer.js.flow +2 -4
- package/getRootVariablesForFragments.js.flow +0 -2
- package/hooks.js +1 -1
- package/hooks.js.flow +0 -2
- package/index.js +1 -1
- package/index.js.flow +2 -2
- package/isRelayEnvironment.js.flow +0 -2
- package/jest-react/internalAct.js.flow +25 -9
- package/legacy.js +1 -1
- package/legacy.js.flow +0 -2
- package/lib/ReactRelayContainerUtils.js +0 -1
- package/lib/ReactRelayContext.js +0 -1
- package/lib/ReactRelayFragmentContainer.js +10 -9
- package/lib/ReactRelayFragmentMockRenderer.js +0 -1
- package/lib/ReactRelayLocalQueryRenderer.js +0 -1
- package/lib/ReactRelayPaginationContainer.js +14 -11
- package/lib/ReactRelayQueryFetcher.js +2 -2
- package/lib/ReactRelayQueryRenderer.js +2 -4
- package/lib/ReactRelayQueryRendererContext.js +0 -1
- package/lib/ReactRelayRefetchContainer.js +11 -14
- package/lib/ReactRelayTestMocker.js +1 -2
- package/lib/ReactRelayTypes.js +0 -1
- package/lib/RelayContext.js +0 -1
- package/lib/assertFragmentMap.js +0 -1
- package/lib/buildReactRelayContainer.js +1 -2
- package/lib/getRootVariablesForFragments.js +1 -2
- package/lib/hooks.js +0 -1
- package/lib/index.js +3 -1
- package/lib/isRelayEnvironment.js +0 -1
- package/lib/jest-react/internalAct.js +24 -4
- package/lib/legacy.js +0 -1
- package/lib/multi-actor/useRelayActorEnvironment.js +0 -1
- package/lib/readContext.js +2 -2
- package/lib/relay-hooks/EntryPointContainer.react.js +0 -1
- package/lib/relay-hooks/EntryPointTypes.flow.js +0 -1
- package/lib/relay-hooks/FragmentResource.js +68 -29
- package/lib/relay-hooks/HooksImplementation.js +29 -0
- package/lib/relay-hooks/InternalLogger.js +0 -1
- package/lib/relay-hooks/LRUCache.js +0 -1
- package/lib/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js +0 -1
- package/lib/relay-hooks/MatchContainer.js +2 -2
- package/lib/relay-hooks/ProfilerContext.js +0 -1
- package/lib/relay-hooks/QueryResource.js +5 -168
- package/lib/relay-hooks/RelayEnvironmentProvider.js +0 -1
- package/lib/relay-hooks/SuspenseResource.js +1 -2
- package/lib/relay-hooks/loadQuery.js +1 -1
- package/lib/relay-hooks/preloadQuery_DEPRECATED.js +8 -13
- package/lib/relay-hooks/prepareEntryPoint_DEPRECATED.js +0 -1
- package/lib/relay-hooks/react-cache/RelayReactCache.js +36 -0
- package/lib/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js +344 -0
- package/lib/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js +239 -0
- package/lib/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js +598 -0
- package/lib/relay-hooks/react-cache/useFragment_REACT_CACHE.js +50 -0
- package/lib/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js +55 -0
- package/lib/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js +150 -0
- package/lib/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js +124 -0
- package/lib/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js +367 -0
- package/lib/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js +45 -0
- package/lib/relay-hooks/useBlockingPaginationFragment.js +4 -3
- package/lib/relay-hooks/useClientQuery.js +33 -0
- package/lib/relay-hooks/useEntryPointLoader.js +1 -2
- package/lib/relay-hooks/useFetchTrackingRef.js +0 -1
- package/lib/relay-hooks/useFragment.js +15 -2
- package/lib/relay-hooks/useFragmentNode.js +0 -1
- package/lib/relay-hooks/useIsMountedRef.js +0 -1
- package/lib/relay-hooks/useLazyLoadQuery.js +4 -2
- package/lib/relay-hooks/useLazyLoadQueryNode.js +0 -1
- package/lib/relay-hooks/useLoadMoreFunction.js +1 -2
- package/lib/relay-hooks/useMemoOperationDescriptor.js +0 -1
- package/lib/relay-hooks/useMemoVariables.js +0 -1
- package/lib/relay-hooks/useMutation.js +5 -7
- package/lib/relay-hooks/usePaginationFragment.js +15 -3
- package/lib/relay-hooks/usePreloadedQuery.js +4 -2
- package/lib/relay-hooks/useQueryLoader.js +1 -2
- package/lib/relay-hooks/useRefetchableFragment.js +14 -2
- package/lib/relay-hooks/useRefetchableFragmentNode.js +1 -2
- package/lib/relay-hooks/useRelayEnvironment.js +0 -1
- package/lib/relay-hooks/useStaticFragmentNodeWarning.js +0 -1
- package/lib/relay-hooks/useSubscribeToInvalidationState.js +0 -1
- package/lib/relay-hooks/useSubscription.js +0 -1
- package/multi-actor/useRelayActorEnvironment.js.flow +0 -2
- package/package.json +3 -3
- 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/readContext.js.flow +1 -2
- package/relay-hooks/EntryPointContainer.react.js.flow +2 -4
- package/relay-hooks/EntryPointTypes.flow.js.flow +30 -32
- package/relay-hooks/FragmentResource.js.flow +80 -37
- package/relay-hooks/HooksImplementation.js.flow +43 -0
- package/relay-hooks/InternalLogger.js.flow +0 -2
- package/relay-hooks/LRUCache.js.flow +0 -2
- package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +4 -6
- package/relay-hooks/MatchContainer.js.flow +11 -6
- package/relay-hooks/ProfilerContext.js.flow +0 -2
- package/relay-hooks/QueryResource.js.flow +12 -209
- package/relay-hooks/RelayEnvironmentProvider.js.flow +2 -4
- package/relay-hooks/SuspenseResource.js.flow +0 -2
- package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +3 -3
- package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +2 -2
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +2 -2
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +2 -2
- package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +4 -6
- package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +0 -2
- package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +4 -6
- package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +0 -2
- package/relay-hooks/__flowtests__/utils.js.flow +8 -10
- package/relay-hooks/loadQuery.js.flow +2 -1
- package/relay-hooks/preloadQuery_DEPRECATED.js.flow +11 -20
- package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +0 -2
- package/relay-hooks/react-cache/RelayReactCache.js.flow +40 -0
- package/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js.flow +430 -0
- package/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js.flow +297 -0
- package/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js.flow +599 -0
- package/relay-hooks/react-cache/useFragment_REACT_CACHE.js.flow +72 -0
- package/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js.flow +70 -0
- package/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js.flow +171 -0
- package/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js.flow +151 -0
- package/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js.flow +595 -0
- package/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js.flow +65 -0
- package/relay-hooks/useBlockingPaginationFragment.js.flow +4 -6
- package/relay-hooks/useClientQuery.js.flow +39 -0
- package/relay-hooks/useEntryPointLoader.js.flow +6 -8
- package/relay-hooks/useFetchTrackingRef.js.flow +2 -4
- package/relay-hooks/useFragment.js.flow +17 -12
- package/relay-hooks/useFragmentNode.js.flow +2 -4
- package/relay-hooks/useIsMountedRef.js.flow +1 -3
- package/relay-hooks/useLazyLoadQuery.js.flow +17 -5
- package/relay-hooks/useLazyLoadQueryNode.js.flow +2 -4
- package/relay-hooks/useLoadMoreFunction.js.flow +6 -8
- package/relay-hooks/useMemoOperationDescriptor.js.flow +0 -2
- package/relay-hooks/useMemoVariables.js.flow +0 -2
- package/relay-hooks/useMutation.js.flow +5 -7
- package/relay-hooks/usePaginationFragment.js.flow +44 -19
- package/relay-hooks/usePreloadedQuery.js.flow +14 -5
- package/relay-hooks/useQueryLoader.js.flow +4 -6
- package/relay-hooks/useRefetchableFragment.js.flow +32 -3
- package/relay-hooks/useRefetchableFragmentNode.js.flow +38 -25
- package/relay-hooks/useRelayEnvironment.js.flow +0 -2
- package/relay-hooks/useStaticFragmentNodeWarning.js.flow +0 -2
- package/relay-hooks/useSubscribeToInvalidationState.js.flow +0 -2
- package/relay-hooks/useSubscription.js.flow +14 -10
package/ReactRelayContext.js
CHANGED
|
@@ -8,14 +8,12 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
|
-
|
|
15
12
|
import type {GeneratedNodeMap, RelayProp, $RelayProps} from './ReactRelayTypes';
|
|
16
13
|
import type {
|
|
17
14
|
FragmentMap,
|
|
18
15
|
FragmentSpecResolver,
|
|
16
|
+
IEnvironment,
|
|
19
17
|
RelayContext,
|
|
20
18
|
} from 'relay-runtime';
|
|
21
19
|
|
|
@@ -58,7 +56,7 @@ function createContainerWithFragments<
|
|
|
58
56
|
|
|
59
57
|
return class extends React.Component<ContainerProps, ContainerState> {
|
|
60
58
|
static displayName = containerName;
|
|
61
|
-
constructor(props) {
|
|
59
|
+
constructor(props: $FlowFixMe) {
|
|
62
60
|
super(props);
|
|
63
61
|
const relayContext = assertRelayContext(props.__relayContext);
|
|
64
62
|
const rootIsQueryRenderer = props.__rootIsQueryRenderer ?? false;
|
|
@@ -163,7 +161,10 @@ function createContainerWithFragments<
|
|
|
163
161
|
this.state.resolver.dispose();
|
|
164
162
|
}
|
|
165
163
|
|
|
166
|
-
shouldComponentUpdate(
|
|
164
|
+
shouldComponentUpdate(
|
|
165
|
+
nextProps: ContainerProps,
|
|
166
|
+
nextState: ContainerState,
|
|
167
|
+
): boolean {
|
|
167
168
|
// Short-circuit if any Relay-related data has changed
|
|
168
169
|
if (nextState.data !== this.state.data) {
|
|
169
170
|
return true;
|
|
@@ -247,7 +248,7 @@ function createContainerWithFragments<
|
|
|
247
248
|
};
|
|
248
249
|
}
|
|
249
250
|
|
|
250
|
-
function getRelayProp(environment) {
|
|
251
|
+
function getRelayProp(environment: IEnvironment) {
|
|
251
252
|
return {
|
|
252
253
|
environment,
|
|
253
254
|
};
|
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
import type {ReactRelayQueryRendererContext as ReactRelayQueryRendererContextType} from './ReactRelayQueryRendererContext';
|
|
@@ -40,7 +38,7 @@ const queryRendererContext: ReactRelayQueryRendererContextType = {
|
|
|
40
38
|
rootIsQueryRenderer: true,
|
|
41
39
|
};
|
|
42
40
|
|
|
43
|
-
function useDeepCompare<T:
|
|
41
|
+
function useDeepCompare<T: {...}>(value: T): T {
|
|
44
42
|
const latestValue = React.useRef(value);
|
|
45
43
|
if (!areEqual(latestValue.current, value)) {
|
|
46
44
|
if (__DEV__) {
|
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
import type {
|
|
@@ -235,7 +233,7 @@ function createGetConnectionFromProps(metadata: ReactConnectionMetadata) {
|
|
|
235
233
|
'ReactRelayPaginationContainer: Unable to synthesize a ' +
|
|
236
234
|
'getConnectionFromProps function.',
|
|
237
235
|
);
|
|
238
|
-
return props => {
|
|
236
|
+
return (props: any) => {
|
|
239
237
|
let data = props[metadata.fragmentName];
|
|
240
238
|
for (let i = 0; i < path.length; i++) {
|
|
241
239
|
if (!data || typeof data !== 'object') {
|
|
@@ -264,7 +262,9 @@ function createGetFragmentVariables(
|
|
|
264
262
|
|
|
265
263
|
type ReactConnectionMetadata = ConnectionMetadata & {fragmentName: string, ...};
|
|
266
264
|
|
|
267
|
-
function findConnectionMetadata(
|
|
265
|
+
function findConnectionMetadata(
|
|
266
|
+
fragments: FragmentMap,
|
|
267
|
+
): ReactConnectionMetadata {
|
|
268
268
|
let foundConnectionMetadata = null;
|
|
269
269
|
let isRelayModern = false;
|
|
270
270
|
for (const fragmentName in fragments) {
|
|
@@ -308,7 +308,7 @@ function toObserver(observerOrCallback: ?ObserverOrCallback): Observer<void> {
|
|
|
308
308
|
? {
|
|
309
309
|
error: observerOrCallback,
|
|
310
310
|
complete: observerOrCallback,
|
|
311
|
-
unsubscribe: subscription => {
|
|
311
|
+
unsubscribe: (subscription: Subscription) => {
|
|
312
312
|
typeof observerOrCallback === 'function' && observerOrCallback();
|
|
313
313
|
},
|
|
314
314
|
}
|
|
@@ -356,7 +356,7 @@ function createContainerWithFragments<
|
|
|
356
356
|
_isUnmounted: boolean;
|
|
357
357
|
_hasFetched: boolean;
|
|
358
358
|
|
|
359
|
-
constructor(props) {
|
|
359
|
+
constructor(props: any) {
|
|
360
360
|
super(props);
|
|
361
361
|
const relayContext = assertRelayContext(props.__relayContext);
|
|
362
362
|
const rootIsQueryRenderer = props.__rootIsQueryRenderer ?? false;
|
|
@@ -415,7 +415,7 @@ function createContainerWithFragments<
|
|
|
415
415
|
* for updates. Props may be the same in which case previous data and
|
|
416
416
|
* subscriptions can be reused.
|
|
417
417
|
*/
|
|
418
|
-
UNSAFE_componentWillReceiveProps(nextProps) {
|
|
418
|
+
UNSAFE_componentWillReceiveProps(nextProps: any) {
|
|
419
419
|
const relayContext = assertRelayContext(nextProps.__relayContext);
|
|
420
420
|
const rootIsQueryRenderer = nextProps.__rootIsQueryRenderer ?? false;
|
|
421
421
|
const prevIDs = getDataIDsFromObject(fragments, this.props);
|
|
@@ -479,7 +479,10 @@ function createContainerWithFragments<
|
|
|
479
479
|
this._cleanup();
|
|
480
480
|
}
|
|
481
481
|
|
|
482
|
-
shouldComponentUpdate(
|
|
482
|
+
shouldComponentUpdate(
|
|
483
|
+
nextProps: Props,
|
|
484
|
+
nextState: ContainerState,
|
|
485
|
+
): boolean {
|
|
483
486
|
// Short-circuit if any Relay-related data has changed
|
|
484
487
|
if (
|
|
485
488
|
nextState.data !== this.state.data ||
|
|
@@ -722,7 +725,7 @@ function createContainerWithFragments<
|
|
|
722
725
|
return this._queryFetcher;
|
|
723
726
|
}
|
|
724
727
|
|
|
725
|
-
_canFetchPage(method): boolean {
|
|
728
|
+
_canFetchPage(method: 'loadMore' | 'refetchConnection'): boolean {
|
|
726
729
|
if (this._isUnmounted) {
|
|
727
730
|
warning(
|
|
728
731
|
false,
|
|
@@ -813,7 +816,7 @@ function createContainerWithFragments<
|
|
|
813
816
|
}
|
|
814
817
|
this._hasFetched = true;
|
|
815
818
|
|
|
816
|
-
const onNext = (payload, complete) => {
|
|
819
|
+
const onNext = (payload: mixed, complete: () => void) => {
|
|
817
820
|
const prevData = this._resolver.resolve();
|
|
818
821
|
this._resolver.setVariables(
|
|
819
822
|
getFragmentVariables(
|
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
import type {
|
|
@@ -35,26 +33,26 @@ type OnDataChange = ({
|
|
|
35
33
|
}) => void;
|
|
36
34
|
|
|
37
35
|
/** The external API of 'fetch' **/
|
|
38
|
-
export type FetchOptions = {
|
|
36
|
+
export type FetchOptions = {
|
|
39
37
|
environment: IEnvironment,
|
|
40
38
|
onDataChange?: null | OnDataChange,
|
|
41
39
|
operation: OperationDescriptor,
|
|
42
|
-
|
|
40
|
+
};
|
|
43
41
|
|
|
44
42
|
// Internally we keep an array of onDataChange callbacks, to support reusing
|
|
45
43
|
// the queryRenderer for multiple components.
|
|
46
|
-
type FetchOptionsInternal = {
|
|
44
|
+
type FetchOptionsInternal = {
|
|
47
45
|
environment: IEnvironment,
|
|
48
46
|
onDataChangeCallbacks: Array<OnDataChange>,
|
|
49
47
|
operation: OperationDescriptor,
|
|
50
|
-
|
|
48
|
+
};
|
|
51
49
|
|
|
52
|
-
export type ExecuteConfig = {
|
|
50
|
+
export type ExecuteConfig = {
|
|
53
51
|
environment: IEnvironment,
|
|
54
52
|
operation: OperationDescriptor,
|
|
55
53
|
// Allows pagination container to retain results from previous queries
|
|
56
54
|
preservePreviousReferences?: boolean,
|
|
57
|
-
|
|
55
|
+
};
|
|
58
56
|
|
|
59
57
|
class ReactRelayQueryFetcher {
|
|
60
58
|
_fetchOptions: ?FetchOptionsInternal;
|
|
@@ -77,10 +75,10 @@ class ReactRelayQueryFetcher {
|
|
|
77
75
|
}
|
|
78
76
|
}
|
|
79
77
|
|
|
80
|
-
getSelectionReferences(): {
|
|
78
|
+
getSelectionReferences(): {
|
|
81
79
|
cacheSelectionReference: ?Disposable,
|
|
82
80
|
selectionReferences: Array<Disposable>,
|
|
83
|
-
|
|
81
|
+
} {
|
|
84
82
|
return {
|
|
85
83
|
cacheSelectionReference: this._cacheSelectionReference,
|
|
86
84
|
selectionReferences: this._selectionReferences,
|
|
@@ -194,6 +192,7 @@ class ReactRelayQueryFetcher {
|
|
|
194
192
|
onDataChange &&
|
|
195
193
|
this._fetchOptions.onDataChangeCallbacks.indexOf(onDataChange) === -1
|
|
196
194
|
) {
|
|
195
|
+
// $FlowFixMe[incompatible-use]
|
|
197
196
|
this._fetchOptions.onDataChangeCallbacks.push(onDataChange);
|
|
198
197
|
}
|
|
199
198
|
|
|
@@ -320,7 +319,7 @@ class ReactRelayQueryFetcher {
|
|
|
320
319
|
}: {
|
|
321
320
|
notifyFirstResult: boolean,
|
|
322
321
|
...
|
|
323
|
-
}) {
|
|
322
|
+
}): void {
|
|
324
323
|
invariant(
|
|
325
324
|
this._fetchOptions,
|
|
326
325
|
'ReactRelayQueryFetcher: `_onQueryDataAvailable` should have been called after having called `fetch`',
|
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
import type {ReactRelayQueryRendererContext as ReactRelayQueryRendererContextType} from './ReactRelayQueryRendererContext';
|
|
@@ -29,13 +27,12 @@ const ReactRelayQueryRendererContext = require('./ReactRelayQueryRendererContext
|
|
|
29
27
|
const areEqual = require('areEqual');
|
|
30
28
|
const React = require('react');
|
|
31
29
|
const {
|
|
32
|
-
RelayFeatureFlags,
|
|
33
30
|
createOperationDescriptor,
|
|
34
31
|
deepFreeze,
|
|
35
32
|
getRequest,
|
|
36
33
|
} = require('relay-runtime');
|
|
37
34
|
|
|
38
|
-
type RetryCallbacks = {
|
|
35
|
+
type RetryCallbacks = {
|
|
39
36
|
handleDataChange:
|
|
40
37
|
| null
|
|
41
38
|
| (({
|
|
@@ -44,34 +41,39 @@ type RetryCallbacks = {|
|
|
|
44
41
|
...
|
|
45
42
|
}) => void),
|
|
46
43
|
handleRetryAfterError: null | ((error: Error) => void),
|
|
47
|
-
|
|
44
|
+
};
|
|
48
45
|
|
|
49
|
-
export type RenderProps<T> = {
|
|
46
|
+
export type RenderProps<T> = {
|
|
50
47
|
error: ?Error,
|
|
51
48
|
props: ?T,
|
|
52
49
|
retry: ?(cacheConfigOverride?: CacheConfig) => void,
|
|
53
|
-
|
|
50
|
+
};
|
|
54
51
|
/**
|
|
55
52
|
* React may double-fire the constructor, and we call 'fetch' in the
|
|
56
53
|
* constructor. If a request is already in flight from a previous call to the
|
|
57
54
|
* constructor, just reuse the query fetcher and wait for the response.
|
|
58
55
|
*/
|
|
59
|
-
const requestCache
|
|
56
|
+
const requestCache: {
|
|
57
|
+
[string]: void | {
|
|
58
|
+
queryFetcher: ReactRelayQueryFetcher,
|
|
59
|
+
snapshot: ?Snapshot,
|
|
60
|
+
},
|
|
61
|
+
} = {};
|
|
60
62
|
|
|
61
63
|
const queryRendererContext: ReactRelayQueryRendererContextType = {
|
|
62
64
|
rootIsQueryRenderer: true,
|
|
63
65
|
};
|
|
64
66
|
|
|
65
|
-
export type Props = {
|
|
67
|
+
export type Props = {
|
|
66
68
|
cacheConfig?: ?CacheConfig,
|
|
67
69
|
fetchPolicy?: 'store-and-network' | 'network-only',
|
|
68
70
|
environment: IEnvironment,
|
|
69
71
|
query: ?GraphQLTaggedNode,
|
|
70
72
|
render: (renderProps: RenderProps<Object>) => React.Node,
|
|
71
73
|
variables: Variables,
|
|
72
|
-
|
|
74
|
+
};
|
|
73
75
|
|
|
74
|
-
type State = {
|
|
76
|
+
type State = {
|
|
75
77
|
error: Error | null,
|
|
76
78
|
prevPropsEnvironment: IEnvironment,
|
|
77
79
|
prevPropsVariables: Variables,
|
|
@@ -82,7 +84,7 @@ type State = {|
|
|
|
82
84
|
retryCallbacks: RetryCallbacks,
|
|
83
85
|
requestCacheKey: ?string,
|
|
84
86
|
snapshot: Snapshot | null,
|
|
85
|
-
|
|
87
|
+
};
|
|
86
88
|
|
|
87
89
|
/**
|
|
88
90
|
* @public
|
|
@@ -157,10 +159,7 @@ class ReactRelayQueryRenderer extends React.Component<Props, State> {
|
|
|
157
159
|
}
|
|
158
160
|
|
|
159
161
|
componentDidMount() {
|
|
160
|
-
if (
|
|
161
|
-
RelayFeatureFlags.ENABLE_QUERY_RENDERER_OFFSCREEN_SUPPORT === true &&
|
|
162
|
-
this._maybeHiddenOrFastRefresh === true
|
|
163
|
-
) {
|
|
162
|
+
if (this._maybeHiddenOrFastRefresh === true) {
|
|
164
163
|
// This block only runs if the component has previously "unmounted"
|
|
165
164
|
// due to it being hidden by the Offscreen API, or during fast refresh.
|
|
166
165
|
// At this point, the current cached resource will have been disposed
|
|
@@ -8,12 +8,10 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
const React = require('react');
|
|
15
13
|
|
|
16
|
-
export type ReactRelayQueryRendererContext = {
|
|
14
|
+
export type ReactRelayQueryRendererContext = {rootIsQueryRenderer: boolean};
|
|
17
15
|
|
|
18
16
|
module.exports = (React.createContext({
|
|
19
17
|
rootIsQueryRenderer: false,
|
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
import type {
|
|
@@ -24,6 +22,7 @@ import type {
|
|
|
24
22
|
Disposable,
|
|
25
23
|
FragmentMap,
|
|
26
24
|
GraphQLTaggedNode,
|
|
25
|
+
IEnvironment,
|
|
27
26
|
RelayContext,
|
|
28
27
|
Subscription,
|
|
29
28
|
Variables,
|
|
@@ -86,7 +85,7 @@ function createContainerWithFragments<
|
|
|
86
85
|
_queryFetcher: ?ReactRelayQueryFetcher;
|
|
87
86
|
_isUnmounted: boolean;
|
|
88
87
|
|
|
89
|
-
constructor(props) {
|
|
88
|
+
constructor(props: any) {
|
|
90
89
|
super(props);
|
|
91
90
|
const relayContext = assertRelayContext(props.__relayContext);
|
|
92
91
|
const rootIsQueryRenderer = props.__rootIsQueryRenderer ?? false;
|
|
@@ -217,7 +216,10 @@ function createContainerWithFragments<
|
|
|
217
216
|
this._refetchSubscription && this._refetchSubscription.unsubscribe();
|
|
218
217
|
}
|
|
219
218
|
|
|
220
|
-
shouldComponentUpdate(
|
|
219
|
+
shouldComponentUpdate(
|
|
220
|
+
nextProps: ContainerProps,
|
|
221
|
+
nextState: ContainerState,
|
|
222
|
+
): boolean {
|
|
221
223
|
// Short-circuit if any Relay-related data has changed
|
|
222
224
|
if (
|
|
223
225
|
nextState.data !== this.state.data ||
|
|
@@ -360,9 +362,7 @@ function createContainerWithFragments<
|
|
|
360
362
|
);
|
|
361
363
|
|
|
362
364
|
// TODO: T26288752 find a better way
|
|
363
|
-
/* eslint-disable lint/react-state-props-mutation */
|
|
364
365
|
this.state.localVariables = fetchVariables;
|
|
365
|
-
/* eslint-enable lint/react-state-props-mutation */
|
|
366
366
|
|
|
367
367
|
// Cancel any previously running refetch.
|
|
368
368
|
this._refetchSubscription && this._refetchSubscription.unsubscribe();
|
|
@@ -465,7 +465,10 @@ function createContainerWithFragments<
|
|
|
465
465
|
};
|
|
466
466
|
}
|
|
467
467
|
|
|
468
|
-
function getRelayProp(
|
|
468
|
+
function getRelayProp(
|
|
469
|
+
environment: IEnvironment,
|
|
470
|
+
refetch: RelayRefetchProp['refetch'],
|
|
471
|
+
): RelayRefetchProp {
|
|
469
472
|
return {
|
|
470
473
|
environment,
|
|
471
474
|
refetch,
|
package/ReactRelayTypes.js.flow
CHANGED
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
import type {
|
|
@@ -29,7 +27,7 @@ export type ObserverOrCallback = Observer<void> | ((error: ?Error) => mixed);
|
|
|
29
27
|
// RelayRefetchProp to flow into a RelayProp.
|
|
30
28
|
export type RelayProp = {+environment: IEnvironment, ...};
|
|
31
29
|
|
|
32
|
-
export type RelayPaginationProp = {
|
|
30
|
+
export type RelayPaginationProp = {
|
|
33
31
|
+environment: IEnvironment,
|
|
34
32
|
+hasMore: () => boolean,
|
|
35
33
|
+isLoading: () => boolean,
|
|
@@ -43,9 +41,9 @@ export type RelayPaginationProp = {|
|
|
|
43
41
|
observerOrCallback: ?ObserverOrCallback,
|
|
44
42
|
refetchVariables: ?Variables,
|
|
45
43
|
) => ?Disposable,
|
|
46
|
-
|
|
44
|
+
};
|
|
47
45
|
|
|
48
|
-
export type RelayRefetchProp = {
|
|
46
|
+
export type RelayRefetchProp = {
|
|
49
47
|
+environment: IEnvironment,
|
|
50
48
|
+refetch: (
|
|
51
49
|
refetchVariables: Variables | ((fragmentVariables: Variables) => Variables),
|
|
@@ -53,13 +51,13 @@ export type RelayRefetchProp = {|
|
|
|
53
51
|
observerOrCallback: ?ObserverOrCallback,
|
|
54
52
|
options?: RefetchOptions,
|
|
55
53
|
) => Disposable,
|
|
56
|
-
|
|
54
|
+
};
|
|
57
55
|
|
|
58
|
-
export type RefetchOptions = {
|
|
56
|
+
export type RefetchOptions = {
|
|
59
57
|
+force?: boolean,
|
|
60
58
|
+fetchPolicy?: 'store-or-network' | 'network-only',
|
|
61
59
|
+metadata?: {[key: string]: mixed, ...},
|
|
62
|
-
|
|
60
|
+
};
|
|
63
61
|
|
|
64
62
|
/**
|
|
65
63
|
* A utility type which takes the type of a fragment's data (typically found in
|
package/RelayContext.js.flow
CHANGED
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
const {
|
|
@@ -45,7 +43,7 @@ class BarComponent extends React.Component<{
|
|
|
45
43
|
requiredProp: string,
|
|
46
44
|
...
|
|
47
45
|
}> {
|
|
48
|
-
static defaultProps = {
|
|
46
|
+
static defaultProps: {defaultProp: string} = {
|
|
49
47
|
defaultProp: 'default',
|
|
50
48
|
};
|
|
51
49
|
getNum(): number {
|
|
@@ -127,7 +125,7 @@ module.exports = {
|
|
|
127
125
|
return <Bar {...props} />;
|
|
128
126
|
},
|
|
129
127
|
checkStaticsAndMethodsProxying(): React.Node {
|
|
130
|
-
class ProxyChecker extends React.PureComponent<{
|
|
128
|
+
class ProxyChecker extends React.PureComponent<{}> {
|
|
131
129
|
_barRef: ?BarComponent;
|
|
132
130
|
getString(): string {
|
|
133
131
|
const ok = this._barRef ? this._barRef.getNum() : 'default'; // legit
|
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
const {
|
|
@@ -33,13 +31,13 @@ class FooComponent extends React.Component {
|
|
|
33
31
|
requiredProp: string,
|
|
34
32
|
...
|
|
35
33
|
};
|
|
36
|
-
static defaultProps = {
|
|
34
|
+
static defaultProps: {defaultProp: string} = {
|
|
37
35
|
defaultProp: 'default',
|
|
38
36
|
};
|
|
39
37
|
getNum(): number {
|
|
40
38
|
return 42;
|
|
41
39
|
}
|
|
42
|
-
render() {
|
|
40
|
+
render(): React.Node {
|
|
43
41
|
const reqLen = this.props.requiredProp.length;
|
|
44
42
|
const optionalProp = this.props.optionalProp;
|
|
45
43
|
|
|
@@ -159,7 +157,7 @@ module.exports = {
|
|
|
159
157
|
/** $FlowExpectedError: Foo `getNum` gives number, but `getString` assumes string **/
|
|
160
158
|
return bad ? 'not good' : ok;
|
|
161
159
|
}
|
|
162
|
-
render() {
|
|
160
|
+
render(): React.Node {
|
|
163
161
|
return (
|
|
164
162
|
<Foo
|
|
165
163
|
componentRef={ref => {
|
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
const {
|
|
@@ -32,13 +30,13 @@ class FooComponent extends React.Component {
|
|
|
32
30
|
requiredProp: string,
|
|
33
31
|
...
|
|
34
32
|
};
|
|
35
|
-
static defaultProps = {
|
|
33
|
+
static defaultProps: {defaultProp: string} = {
|
|
36
34
|
defaultProp: 'default',
|
|
37
35
|
};
|
|
38
36
|
getNum(): number {
|
|
39
37
|
return 42;
|
|
40
38
|
}
|
|
41
|
-
render() {
|
|
39
|
+
render(): React.Node {
|
|
42
40
|
const reqLen = this.props.requiredProp.length;
|
|
43
41
|
const optionalProp = this.props.optionalProp;
|
|
44
42
|
|
|
@@ -142,7 +140,7 @@ module.exports = {
|
|
|
142
140
|
/** $FlowExpectedError: Foo `getNum` gives number, but `getString` assumes string **/
|
|
143
141
|
return bad ? 'not good' : ok;
|
|
144
142
|
}
|
|
145
|
-
render() {
|
|
143
|
+
render(): React.Node {
|
|
146
144
|
return (
|
|
147
145
|
<Foo
|
|
148
146
|
componentRef={ref => {
|
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
import type {$FragmentRef} from '../ReactRelayTypes';
|
|
@@ -252,9 +250,9 @@ declare var aComplexUserRef: {
|
|
|
252
250
|
optionalUsers={null}
|
|
253
251
|
/>;
|
|
254
252
|
|
|
255
|
-
class AnyTest extends React.Component<{
|
|
253
|
+
class AnyTest extends React.Component<{
|
|
256
254
|
anything: any,
|
|
257
|
-
|
|
255
|
+
}> {}
|
|
258
256
|
const AnyTestContainer = createFragmentContainer(AnyTest, {});
|
|
259
257
|
|
|
260
258
|
<AnyTestContainer anything={42} />;
|
|
@@ -8,16 +8,14 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
import type {RelayModernFlowtest_user$ref} from './RelayModernFlowtest_user.graphql';
|
|
16
14
|
import type {FragmentType} from 'relay-runtime';
|
|
17
15
|
|
|
18
16
|
declare export opaque type RelayModernFlowtest_badref$ref: FragmentType;
|
|
19
|
-
export type RelayModernFlowtest_badref = {
|
|
17
|
+
export type RelayModernFlowtest_badref = {
|
|
20
18
|
+id: string,
|
|
21
19
|
+$fragmentSpreads: RelayModernFlowtest_user$ref,
|
|
22
20
|
+$fragmentType: RelayModernFlowtest_badref$ref,
|
|
23
|
-
|
|
21
|
+
};
|
|
@@ -8,16 +8,14 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
import type {RelayModernFlowtest_user$ref} from './RelayModernFlowtest_user.graphql';
|
|
16
14
|
import type {FragmentType} from 'relay-runtime';
|
|
17
15
|
|
|
18
16
|
declare export opaque type RelayModernFlowtest_notref$ref: FragmentType;
|
|
19
|
-
export type RelayModernFlowtest_notref = {
|
|
17
|
+
export type RelayModernFlowtest_notref = {
|
|
20
18
|
+id: string,
|
|
21
19
|
+$fragmentSpreads: RelayModernFlowtest_user$ref,
|
|
22
20
|
+$fragmentType: RelayModernFlowtest_notref$ref,
|
|
23
|
-
|
|
21
|
+
};
|
|
@@ -8,14 +8,12 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
import type {FragmentType} from 'relay-runtime';
|
|
16
14
|
|
|
17
15
|
declare export opaque type RelayModernFlowtest_user$ref: FragmentType;
|
|
18
|
-
export type RelayModernFlowtest_user = {
|
|
16
|
+
export type RelayModernFlowtest_user = {
|
|
19
17
|
+name: ?string,
|
|
20
18
|
+$fragmentType: RelayModernFlowtest_user$ref,
|
|
21
|
-
|
|
19
|
+
};
|
|
@@ -8,14 +8,12 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
// flowlint ambiguous-object-type:error
|
|
12
|
-
|
|
13
11
|
'use strict';
|
|
14
12
|
|
|
15
13
|
import type {FragmentType} from 'relay-runtime';
|
|
16
14
|
|
|
17
15
|
declare export opaque type RelayModernFlowtest_users$ref: FragmentType;
|
|
18
|
-
export type RelayModernFlowtest_users = $ReadOnlyArray<{
|
|
16
|
+
export type RelayModernFlowtest_users = $ReadOnlyArray<{
|
|
19
17
|
+name: ?string,
|
|
20
18
|
+$fragmentType: RelayModernFlowtest_users$ref,
|
|
21
|
-
|
|
19
|
+
}>;
|