react-relay 14.0.0 → 14.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. package/ReactRelayContainerUtils.js.flow +0 -2
  2. package/ReactRelayContext.js +1 -1
  3. package/ReactRelayContext.js.flow +0 -2
  4. package/ReactRelayFragmentContainer.js.flow +0 -2
  5. package/ReactRelayFragmentMockRenderer.js.flow +0 -2
  6. package/ReactRelayLocalQueryRenderer.js.flow +0 -2
  7. package/ReactRelayPaginationContainer.js.flow +0 -2
  8. package/ReactRelayQueryFetcher.js.flow +9 -11
  9. package/ReactRelayQueryRenderer.js.flow +10 -12
  10. package/ReactRelayQueryRendererContext.js.flow +1 -3
  11. package/ReactRelayRefetchContainer.js.flow +0 -4
  12. package/ReactRelayTestMocker.js.flow +0 -2
  13. package/ReactRelayTypes.js.flow +6 -8
  14. package/RelayContext.js.flow +0 -2
  15. package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +2 -4
  16. package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +3 -5
  17. package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +3 -5
  18. package/__flowtests__/RelayModern-flowtest.js.flow +2 -4
  19. package/__flowtests__/RelayModernFlowtest_badref.graphql.js.flow +2 -4
  20. package/__flowtests__/RelayModernFlowtest_notref.graphql.js.flow +2 -4
  21. package/__flowtests__/RelayModernFlowtest_user.graphql.js.flow +2 -4
  22. package/__flowtests__/RelayModernFlowtest_users.graphql.js.flow +2 -4
  23. package/assertFragmentMap.js.flow +0 -2
  24. package/buildReactRelayContainer.js.flow +0 -2
  25. package/getRootVariablesForFragments.js.flow +0 -2
  26. package/hooks.js +1 -1
  27. package/hooks.js.flow +0 -2
  28. package/index.js +1 -1
  29. package/index.js.flow +2 -2
  30. package/isRelayEnvironment.js.flow +0 -2
  31. package/legacy.js +1 -1
  32. package/legacy.js.flow +0 -2
  33. package/lib/ReactRelayContainerUtils.js +0 -1
  34. package/lib/ReactRelayContext.js +0 -1
  35. package/lib/ReactRelayFragmentContainer.js +10 -9
  36. package/lib/ReactRelayFragmentMockRenderer.js +0 -1
  37. package/lib/ReactRelayLocalQueryRenderer.js +0 -1
  38. package/lib/ReactRelayPaginationContainer.js +14 -11
  39. package/lib/ReactRelayQueryFetcher.js +1 -2
  40. package/lib/ReactRelayQueryRenderer.js +1 -2
  41. package/lib/ReactRelayQueryRendererContext.js +0 -1
  42. package/lib/ReactRelayRefetchContainer.js +11 -14
  43. package/lib/ReactRelayTestMocker.js +1 -2
  44. package/lib/ReactRelayTypes.js +0 -1
  45. package/lib/RelayContext.js +0 -1
  46. package/lib/assertFragmentMap.js +0 -1
  47. package/lib/buildReactRelayContainer.js +1 -2
  48. package/lib/getRootVariablesForFragments.js +1 -2
  49. package/lib/hooks.js +0 -1
  50. package/lib/index.js +3 -1
  51. package/lib/isRelayEnvironment.js +0 -1
  52. package/lib/legacy.js +0 -1
  53. package/lib/multi-actor/useRelayActorEnvironment.js +0 -1
  54. package/lib/readContext.js +0 -1
  55. package/lib/relay-hooks/EntryPointContainer.react.js +0 -1
  56. package/lib/relay-hooks/EntryPointTypes.flow.js +0 -1
  57. package/lib/relay-hooks/FragmentResource.js +7 -7
  58. package/lib/relay-hooks/HooksImplementation.js +1 -1
  59. package/lib/relay-hooks/InternalLogger.js +0 -1
  60. package/lib/relay-hooks/LRUCache.js +0 -1
  61. package/lib/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js +0 -1
  62. package/lib/relay-hooks/MatchContainer.js +1 -2
  63. package/lib/relay-hooks/ProfilerContext.js +0 -1
  64. package/lib/relay-hooks/QueryResource.js +1 -2
  65. package/lib/relay-hooks/RelayEnvironmentProvider.js +0 -1
  66. package/lib/relay-hooks/SuspenseResource.js +1 -2
  67. package/lib/relay-hooks/loadQuery.js +1 -1
  68. package/lib/relay-hooks/preloadQuery_DEPRECATED.js +1 -2
  69. package/lib/relay-hooks/prepareEntryPoint_DEPRECATED.js +0 -1
  70. package/lib/relay-hooks/react-cache/RelayReactCache.js +0 -1
  71. package/lib/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js +3 -3
  72. package/lib/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js +239 -0
  73. package/lib/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js +183 -125
  74. package/lib/relay-hooks/react-cache/useFragment_REACT_CACHE.js +0 -1
  75. package/lib/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js +0 -1
  76. package/lib/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js +150 -0
  77. package/lib/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js +0 -1
  78. package/lib/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js +367 -0
  79. package/lib/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js +45 -0
  80. package/lib/relay-hooks/useBlockingPaginationFragment.js +4 -3
  81. package/lib/relay-hooks/useClientQuery.js +33 -0
  82. package/lib/relay-hooks/useEntryPointLoader.js +1 -2
  83. package/lib/relay-hooks/useFetchTrackingRef.js +0 -1
  84. package/lib/relay-hooks/useFragment.js +0 -1
  85. package/lib/relay-hooks/useFragmentNode.js +0 -1
  86. package/lib/relay-hooks/useIsMountedRef.js +0 -1
  87. package/lib/relay-hooks/useLazyLoadQuery.js +1 -15
  88. package/lib/relay-hooks/useLazyLoadQueryNode.js +0 -1
  89. package/lib/relay-hooks/useLoadMoreFunction.js +1 -2
  90. package/lib/relay-hooks/useMemoOperationDescriptor.js +0 -1
  91. package/lib/relay-hooks/useMemoVariables.js +0 -1
  92. package/lib/relay-hooks/useMutation.js +1 -2
  93. package/lib/relay-hooks/usePaginationFragment.js +15 -3
  94. package/lib/relay-hooks/usePreloadedQuery.js +1 -15
  95. package/lib/relay-hooks/useQueryLoader.js +1 -2
  96. package/lib/relay-hooks/useRefetchableFragment.js +14 -2
  97. package/lib/relay-hooks/useRefetchableFragmentNode.js +1 -2
  98. package/lib/relay-hooks/useRelayEnvironment.js +0 -1
  99. package/lib/relay-hooks/useStaticFragmentNodeWarning.js +0 -1
  100. package/lib/relay-hooks/useSubscribeToInvalidationState.js +0 -1
  101. package/lib/relay-hooks/useSubscription.js +0 -1
  102. package/multi-actor/useRelayActorEnvironment.js.flow +0 -2
  103. package/package.json +2 -2
  104. package/react-relay-hooks.js +2 -2
  105. package/react-relay-hooks.min.js +2 -2
  106. package/react-relay-legacy.js +2 -2
  107. package/react-relay-legacy.min.js +2 -2
  108. package/react-relay.js +2 -2
  109. package/react-relay.min.js +2 -2
  110. package/readContext.js.flow +0 -2
  111. package/relay-hooks/EntryPointContainer.react.js.flow +2 -4
  112. package/relay-hooks/EntryPointTypes.flow.js.flow +30 -32
  113. package/relay-hooks/FragmentResource.js.flow +9 -11
  114. package/relay-hooks/HooksImplementation.js.flow +6 -8
  115. package/relay-hooks/InternalLogger.js.flow +0 -2
  116. package/relay-hooks/LRUCache.js.flow +0 -2
  117. package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +4 -6
  118. package/relay-hooks/MatchContainer.js.flow +5 -7
  119. package/relay-hooks/ProfilerContext.js.flow +0 -2
  120. package/relay-hooks/QueryResource.js.flow +4 -6
  121. package/relay-hooks/RelayEnvironmentProvider.js.flow +2 -4
  122. package/relay-hooks/SuspenseResource.js.flow +0 -2
  123. package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +3 -3
  124. package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +2 -2
  125. package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +4 -6
  126. package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +0 -2
  127. package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +4 -6
  128. package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +0 -2
  129. package/relay-hooks/__flowtests__/utils.js.flow +8 -10
  130. package/relay-hooks/preloadQuery_DEPRECATED.js.flow +4 -6
  131. package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +0 -2
  132. package/relay-hooks/react-cache/RelayReactCache.js.flow +0 -2
  133. package/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js.flow +22 -16
  134. package/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js.flow +297 -0
  135. package/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js.flow +134 -94
  136. package/relay-hooks/react-cache/useFragment_REACT_CACHE.js.flow +0 -2
  137. package/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js.flow +2 -4
  138. package/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js.flow +171 -0
  139. package/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js.flow +2 -4
  140. package/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js.flow +595 -0
  141. package/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js.flow +65 -0
  142. package/relay-hooks/useBlockingPaginationFragment.js.flow +4 -6
  143. package/relay-hooks/useClientQuery.js.flow +39 -0
  144. package/relay-hooks/useEntryPointLoader.js.flow +6 -8
  145. package/relay-hooks/useFetchTrackingRef.js.flow +2 -4
  146. package/relay-hooks/useFragment.js.flow +0 -2
  147. package/relay-hooks/useFragmentNode.js.flow +2 -4
  148. package/relay-hooks/useIsMountedRef.js.flow +1 -3
  149. package/relay-hooks/useLazyLoadQuery.js.flow +7 -30
  150. package/relay-hooks/useLazyLoadQueryNode.js.flow +2 -4
  151. package/relay-hooks/useLoadMoreFunction.js.flow +6 -8
  152. package/relay-hooks/useMemoOperationDescriptor.js.flow +0 -2
  153. package/relay-hooks/useMemoVariables.js.flow +0 -2
  154. package/relay-hooks/useMutation.js.flow +2 -4
  155. package/relay-hooks/usePaginationFragment.js.flow +44 -19
  156. package/relay-hooks/usePreloadedQuery.js.flow +5 -24
  157. package/relay-hooks/useQueryLoader.js.flow +4 -6
  158. package/relay-hooks/useRefetchableFragment.js.flow +32 -3
  159. package/relay-hooks/useRefetchableFragmentNode.js.flow +16 -18
  160. package/relay-hooks/useRelayEnvironment.js.flow +0 -2
  161. package/relay-hooks/useStaticFragmentNodeWarning.js.flow +0 -2
  162. package/relay-hooks/useSubscribeToInvalidationState.js.flow +0 -2
  163. package/relay-hooks/useSubscription.js.flow +0 -2
@@ -0,0 +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
+ * @flow strict-local
9
+ * @format
10
+ */
11
+
12
+ 'use strict';
13
+
14
+ import type {ClientQuery, Query, RenderPolicy, Variables} from 'relay-runtime';
15
+
16
+ const useLazyLoadQuery = require('./useLazyLoadQuery');
17
+
18
+ /**
19
+ * This hook can be used to render client-only queries.
20
+ * These queries are consist of queries for client-only data,
21
+ * schematized via local schema extensions and/or Relay resolvers.
22
+ */
23
+ function useClientQuery<TVariables: Variables, TData>(
24
+ gqlQuery: ClientQuery<TVariables, TData>,
25
+ variables: TVariables,
26
+ options?: {
27
+ UNSTABLE_renderPolicy?: RenderPolicy,
28
+ },
29
+ ): TData {
30
+ // $FlowFixMe[incompatible-type] client queries can be used with useLazyLoadQuery, but only with `store-only` policy.
31
+ const query: Query<TVariables, TData> = gqlQuery;
32
+
33
+ return useLazyLoadQuery(query, variables, {
34
+ ...options,
35
+ fetchPolicy: 'store-only',
36
+ });
37
+ }
38
+
39
+ module.exports = useClientQuery;
@@ -9,8 +9,6 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {
@@ -47,9 +45,9 @@ type UseEntryPointLoaderHookReturnType<
47
45
  // NullEntryPointReference needs to implement referential equality,
48
46
  // so that multiple NullEntryPointReferences can be in the same set
49
47
  // (corresponding to multiple calls to disposeEntryPoint).
50
- type NullEntryPointReference = {|
48
+ type NullEntryPointReference = {
51
49
  kind: 'NullEntryPointReference',
52
- |};
50
+ };
53
51
  const initialNullEntryPointReferenceState = {kind: 'NullEntryPointReference'};
54
52
 
55
53
  function useLoadEntryPoint<
@@ -68,14 +66,14 @@ function useLoadEntryPoint<
68
66
  >(
69
67
  environmentProvider: IEnvironmentProvider<EnvironmentProviderOptions>,
70
68
  entryPoint: TEntryPoint,
71
- options?: ?{|
69
+ options?: ?{
72
70
  // TODO(T83890478): Remove once Offscreen API lands in xplat
73
71
  // and we can use it in tests
74
- TEST_ONLY__initialEntryPointData?: ?{|
72
+ TEST_ONLY__initialEntryPointData?: ?{
75
73
  entryPointReference: ?PreloadedEntryPoint<TEntryPointComponent>,
76
74
  entryPointParams: ?TEntryPointParams,
77
- |},
78
- |},
75
+ },
76
+ },
79
77
  ): UseEntryPointLoaderHookReturnType<
80
78
  TEntryPointParams,
81
79
  TPreloadedQueries,
@@ -9,8 +9,6 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {Subscription} from 'relay-runtime';
@@ -29,12 +27,12 @@ const {useCallback, useEffect, useRef} = require('react');
29
27
  * The additional functions returned by this Hook can be used to mutate
30
28
  * the ref.
31
29
  */
32
- function useFetchTrackingRef(): {|
30
+ function useFetchTrackingRef(): {
33
31
  isFetchingRef: {current: ?boolean, ...},
34
32
  startFetch: Subscription => void,
35
33
  disposeFetch: () => void,
36
34
  completeFetch: () => void,
37
- |} {
35
+ } {
38
36
  const subscriptionRef = useRef<?Subscription>(null);
39
37
  const isFetchingRef = useRef<?boolean>(false);
40
38
 
@@ -9,8 +9,6 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {Fragment, FragmentType, GraphQLTaggedNode} from 'relay-runtime';
@@ -9,8 +9,6 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {ReaderFragment} from 'relay-runtime';
@@ -21,11 +19,11 @@ const {useEffect, useRef, useState} = require('react');
21
19
  const {getFragmentIdentifier} = require('relay-runtime');
22
20
  const warning = require('warning');
23
21
 
24
- type ReturnType<TFragmentData: mixed> = {|
22
+ type ReturnType<TFragmentData: mixed> = {
25
23
  data: TFragmentData,
26
24
  disableStoreUpdates: () => void,
27
25
  enableStoreUpdates: () => void,
28
- |};
26
+ };
29
27
 
30
28
  function useFragmentNode<TFragmentData: mixed>(
31
29
  fragmentNode: ReaderFragment,
@@ -9,13 +9,11 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  const {useEffect, useRef} = require('react');
17
15
 
18
- function useIsMountedRef(): {|current: boolean|} {
16
+ function useIsMountedRef(): {current: boolean} {
19
17
  const isMountedRef = useRef(true);
20
18
 
21
19
  useEffect(() => {
@@ -9,20 +9,16 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {
17
15
  CacheConfig,
18
- ClientQuery,
19
16
  FetchPolicy,
20
17
  Query,
21
18
  RenderPolicy,
22
19
  Variables,
23
20
  } from 'relay-runtime';
24
21
 
25
- const HooksImplementation = require('./HooksImplementation');
26
22
  const {useTrackLoadQueryInRender} = require('./loadQuery');
27
23
  const useLazyLoadQueryNode = require('./useLazyLoadQueryNode');
28
24
  const useMemoOperationDescriptor = require('./useMemoOperationDescriptor');
@@ -35,25 +31,25 @@ const {
35
31
  // a separate hooks implementation in ./HooksImplementation -- it can
36
32
  // be removed after we stop doing that.
37
33
  export type UseLazyLoadQueryHookType = <TVariables: Variables, TData>(
38
- gqlQuery: Query<TVariables, TData> | ClientQuery<TVariables, TData>,
34
+ gqlQuery: Query<TVariables, TData>,
39
35
  variables: TVariables,
40
- options?: {|
36
+ options?: {
41
37
  fetchKey?: string | number,
42
38
  fetchPolicy?: FetchPolicy,
43
39
  networkCacheConfig?: CacheConfig,
44
40
  UNSTABLE_renderPolicy?: RenderPolicy,
45
- |},
41
+ },
46
42
  ) => TData;
47
43
 
48
- function useLazyLoadQuery_LEGACY<TVariables: Variables, TData>(
49
- gqlQuery: Query<TVariables, TData> | ClientQuery<TVariables, TData>,
44
+ function useLazyLoadQuery<TVariables: Variables, TData>(
45
+ gqlQuery: Query<TVariables, TData>,
50
46
  variables: TVariables,
51
- options?: {|
47
+ options?: {
52
48
  fetchKey?: string | number,
53
49
  fetchPolicy?: FetchPolicy,
54
50
  networkCacheConfig?: CacheConfig,
55
51
  UNSTABLE_renderPolicy?: RenderPolicy,
56
- |},
52
+ },
57
53
  ): TData {
58
54
  // We need to use this hook in order to be able to track if
59
55
  // loadQuery was called during render
@@ -79,23 +75,4 @@ function useLazyLoadQuery_LEGACY<TVariables: Variables, TData>(
79
75
  return data;
80
76
  }
81
77
 
82
- function useLazyLoadQuery<TVariables: Variables, TData>(
83
- gqlQuery: Query<TVariables, TData> | ClientQuery<TVariables, TData>,
84
- variables: TVariables,
85
- options?: {|
86
- fetchKey?: string | number,
87
- fetchPolicy?: FetchPolicy,
88
- networkCacheConfig?: CacheConfig,
89
- UNSTABLE_renderPolicy?: RenderPolicy,
90
- |},
91
- ): TData {
92
- const impl = HooksImplementation.get();
93
- if (impl) {
94
- return impl.useLazyLoadQuery(gqlQuery, variables, options);
95
- } else {
96
- // eslint-disable-next-line react-hooks/rules-of-hooks
97
- return useLazyLoadQuery_LEGACY(gqlQuery, variables, options);
98
- }
99
- }
100
-
101
78
  module.exports = (useLazyLoadQuery: UseLazyLoadQueryHookType);
@@ -9,8 +9,6 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {
@@ -41,14 +39,14 @@ function useLazyLoadQueryNode<TQuery: OperationType>({
41
39
  fetchPolicy,
42
40
  fetchKey,
43
41
  renderPolicy,
44
- }: {|
42
+ }: {
45
43
  query: OperationDescriptor,
46
44
  componentDisplayName: string,
47
45
  fetchObservable: Observable<GraphQLResponse>,
48
46
  fetchPolicy?: ?FetchPolicy,
49
47
  fetchKey?: ?string | ?number,
50
48
  renderPolicy?: ?RenderPolicy,
51
- |}): TQuery['response'] {
49
+ }): TQuery['response'] {
52
50
  const environment = useRelayEnvironment();
53
51
  const profilerContext = useContext(ProfilerContext);
54
52
  const QueryResource = getQueryResourceForEnvironment(environment);
@@ -9,8 +9,6 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {
@@ -43,13 +41,13 @@ const warning = require('warning');
43
41
 
44
42
  export type LoadMoreFn<TQuery: OperationType> = (
45
43
  count: number,
46
- options?: {|
44
+ options?: {
47
45
  onComplete?: (Error | null) => void,
48
46
  UNSTABLE_extraVariables?: $Shape<VariablesOf<TQuery>>,
49
- |},
47
+ },
50
48
  ) => Disposable;
51
49
 
52
- export type UseLoadMoreFunctionArgs = {|
50
+ export type UseLoadMoreFunctionArgs = {
53
51
  direction: Direction,
54
52
  fragmentNode: ReaderFragment,
55
53
  fragmentRef: mixed,
@@ -62,7 +60,7 @@ export type UseLoadMoreFunctionArgs = {|
62
60
  componentDisplayName: string,
63
61
  observer: Observer<GraphQLResponse>,
64
62
  onReset: () => void,
65
- |};
63
+ };
66
64
 
67
65
  function useLoadMoreFunction<TQuery: OperationType>(
68
66
  args: UseLoadMoreFunctionArgs,
@@ -265,10 +263,10 @@ function getConnectionState(
265
263
  fragmentNode: ReaderFragment,
266
264
  fragmentData: mixed,
267
265
  connectionPathInFragmentData: $ReadOnlyArray<string | number>,
268
- ): {|
266
+ ): {
269
267
  cursor: ?string,
270
268
  hasMore: boolean,
271
- |} {
269
+ } {
272
270
  const {
273
271
  EDGES,
274
272
  PAGE_INFO,
@@ -9,8 +9,6 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {
@@ -9,8 +9,6 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {Variables} from 'relay-runtime';
@@ -9,8 +9,6 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {
@@ -32,7 +30,7 @@ const {commitMutation: defaultCommitMutation} = require('relay-runtime');
32
30
 
33
31
  const {useState, useEffect, useRef, useCallback} = React;
34
32
 
35
- export type UseMutationConfig<TMutation: MutationParameters> = {|
33
+ export type UseMutationConfig<TMutation: MutationParameters> = {
36
34
  configs?: Array<DeclarativeMutationConfig>,
37
35
  onError?: ?(error: Error) => void,
38
36
  onCompleted?: ?(
@@ -50,7 +48,7 @@ export type UseMutationConfig<TMutation: MutationParameters> = {|
50
48
  updater?: ?SelectorStoreUpdater<TMutation['response']>,
51
49
  uploadables?: UploadableMap,
52
50
  variables: TMutation['variables'],
53
- |};
51
+ };
54
52
 
55
53
  function useMutation<TMutation: MutationParameters>(
56
54
  mutation: GraphQLTaggedNode,
@@ -9,8 +9,6 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {LoadMoreFn, UseLoadMoreFunctionArgs} from './useLoadMoreFunction';
@@ -23,6 +21,7 @@ import type {
23
21
  OperationType,
24
22
  } from 'relay-runtime';
25
23
 
24
+ const HooksImplementation = require('./HooksImplementation');
26
25
  const useLoadMoreFunction = require('./useLoadMoreFunction');
27
26
  const useRefetchableFragmentNode = require('./useRefetchableFragmentNode');
28
27
  const useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
@@ -33,8 +32,16 @@ const {
33
32
  getPaginationMetadata,
34
33
  } = require('relay-runtime');
35
34
 
36
- export type ReturnType<TQuery: OperationType, TKey, TFragmentData> = {|
37
- data: TFragmentData,
35
+ export type ReturnType<TQuery: OperationType, TKey> = {
36
+ // NOTE: This $Call ensures that the type of the returned data is either:
37
+ // - nullable if the provided ref type is nullable
38
+ // - non-nullable if the provided ref type is non-nullable
39
+ // prettier-ignore
40
+ data: $Call<
41
+ & (<TFragmentData>( { +$data?: TFragmentData, ... }) => TFragmentData)
42
+ & (<TFragmentData>(?{ +$data?: TFragmentData, ... }) => ?TFragmentData),
43
+ TKey,
44
+ >,
38
45
  loadNext: LoadMoreFn<TQuery>,
39
46
  loadPrevious: LoadMoreFn<TQuery>,
40
47
  hasNext: boolean,
@@ -42,27 +49,26 @@ export type ReturnType<TQuery: OperationType, TKey, TFragmentData> = {|
42
49
  isLoadingNext: boolean,
43
50
  isLoadingPrevious: boolean,
44
51
  refetch: RefetchFnDynamic<TQuery, TKey>,
45
- |};
52
+ };
46
53
 
47
- function usePaginationFragment<
54
+ // This separate type export is only needed as long as we are injecting
55
+ // a separate hooks implementation in ./HooksImplementation -- it can
56
+ // be removed after we stop doing that.
57
+ export type UsePaginationFragmentType = <
48
58
  TQuery: OperationType,
49
59
  TKey: ?{+$data?: mixed, +$fragmentSpreads: FragmentType, ...},
50
60
  >(
51
61
  fragmentInput: GraphQLTaggedNode,
52
62
  parentFragmentRef: TKey,
53
- ): ReturnType<
54
- TQuery,
55
- TKey,
56
- // NOTE: This $Call ensures that the type of the returned data is either:
57
- // - nullable if the provided ref type is nullable
58
- // - non-nullable if the provided ref type is non-nullable
59
- // prettier-ignore
60
- $Call<
61
- & (<TFragmentData>( { +$data?: TFragmentData, ... }) => TFragmentData)
62
- & (<TFragmentData>(?{ +$data?: TFragmentData, ... }) => ?TFragmentData),
63
- TKey,
64
- >,
65
- > {
63
+ ) => ReturnType<TQuery, TKey>;
64
+
65
+ function usePaginationFragment_LEGACY<
66
+ TQuery: OperationType,
67
+ TKey: ?{+$data?: mixed, +$fragmentSpreads: FragmentType, ...},
68
+ >(
69
+ fragmentInput: GraphQLTaggedNode,
70
+ parentFragmentRef: TKey,
71
+ ): ReturnType<TQuery, TKey> {
66
72
  const fragmentNode = getFragment(fragmentInput);
67
73
  useStaticFragmentNodeWarning(
68
74
  fragmentNode,
@@ -170,4 +176,23 @@ function useLoadMore<TQuery: OperationType>(
170
176
  return [loadMore, hasMore, isLoadingMore, disposeFetch];
171
177
  }
172
178
 
179
+ function usePaginationFragment<
180
+ TQuery: OperationType,
181
+ TKey: ?{+$data?: mixed, +$fragmentSpreads: FragmentType, ...},
182
+ >(
183
+ fragmentInput: GraphQLTaggedNode,
184
+ parentFragmentRef: TKey,
185
+ ): ReturnType<TQuery, TKey> {
186
+ const impl = HooksImplementation.get();
187
+ if (impl) {
188
+ return impl.usePaginationFragment<TQuery, TKey>(
189
+ fragmentInput,
190
+ parentFragmentRef,
191
+ );
192
+ } else {
193
+ // eslint-disable-next-line react-hooks/rules-of-hooks
194
+ return usePaginationFragment_LEGACY(fragmentInput, parentFragmentRef);
195
+ }
196
+ }
197
+
173
198
  module.exports = usePaginationFragment;
@@ -9,8 +9,6 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {PreloadedQuery} from './EntryPointTypes.flow';
@@ -20,7 +18,6 @@ import type {
20
18
  RenderPolicy,
21
19
  } from 'relay-runtime';
22
20
 
23
- const HooksImplementation = require('./HooksImplementation');
24
21
  const {useTrackLoadQueryInRender} = require('./loadQuery');
25
22
  const useLazyLoadQueryNode = require('./useLazyLoadQueryNode');
26
23
  const useMemoOperationDescriptor = require('./useMemoOperationDescriptor');
@@ -38,17 +35,17 @@ const warning = require('warning');
38
35
  export type UsePreloadedQueryHookType = <TQuery: OperationType>(
39
36
  gqlQuery: GraphQLTaggedNode,
40
37
  preloadedQuery: PreloadedQuery<TQuery>,
41
- options?: {|
38
+ options?: {
42
39
  UNSTABLE_renderPolicy?: RenderPolicy,
43
- |},
40
+ },
44
41
  ) => TQuery['response'];
45
42
 
46
- function usePreloadedQuery_LEGACY<TQuery: OperationType>(
43
+ function usePreloadedQuery<TQuery: OperationType>(
47
44
  gqlQuery: GraphQLTaggedNode,
48
45
  preloadedQuery: PreloadedQuery<TQuery>,
49
- options?: {|
46
+ options?: {
50
47
  UNSTABLE_renderPolicy?: RenderPolicy,
51
- |},
48
+ },
52
49
  ): TQuery['response'] {
53
50
  // We need to use this hook in order to be able to track if
54
51
  // loadQuery was called during render
@@ -154,20 +151,4 @@ function usePreloadedQuery_LEGACY<TQuery: OperationType>(
154
151
  return data;
155
152
  }
156
153
 
157
- function usePreloadedQuery<TQuery: OperationType>(
158
- gqlQuery: GraphQLTaggedNode,
159
- preloadedQuery: PreloadedQuery<TQuery>,
160
- options?: {|
161
- UNSTABLE_renderPolicy?: RenderPolicy,
162
- |},
163
- ): TQuery['response'] {
164
- const impl = HooksImplementation.get();
165
- if (impl) {
166
- return impl.usePreloadedQuery(gqlQuery, preloadedQuery, options);
167
- } else {
168
- // eslint-disable-next-line react-hooks/rules-of-hooks
169
- return usePreloadedQuery_LEGACY(gqlQuery, preloadedQuery, options);
170
- }
171
- }
172
-
173
154
  module.exports = (usePreloadedQuery: UsePreloadedQueryHookType);
@@ -9,8 +9,6 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {
@@ -35,10 +33,10 @@ export type LoaderFn<TQuery: OperationType> = (
35
33
  options?: UseQueryLoaderLoadQueryOptions,
36
34
  ) => void;
37
35
 
38
- export type UseQueryLoaderLoadQueryOptions = $ReadOnly<{|
36
+ export type UseQueryLoaderLoadQueryOptions = $ReadOnly<{
39
37
  ...LoadQueryOptions,
40
38
  +__environment?: ?IEnvironment,
41
- |}>;
39
+ }>;
42
40
 
43
41
  type UseQueryLoaderHookReturnType<TQuery: OperationType> = [
44
42
  ?PreloadedQuery<TQuery>,
@@ -49,9 +47,9 @@ type UseQueryLoaderHookReturnType<TQuery: OperationType> = [
49
47
  // NullQueryReference needs to implement referential equality,
50
48
  // so that multiple NullQueryReferences can be in the same set
51
49
  // (corresponding to multiple calls to disposeQuery).
52
- type NullQueryReference = {|
50
+ type NullQueryReference = {
53
51
  kind: 'NullQueryReference',
54
- |};
52
+ };
55
53
  const initialNullQueryReferenceState = {kind: 'NullQueryReference'};
56
54
 
57
55
  function requestIsLiveQuery<TQuery: OperationType>(
@@ -9,8 +9,6 @@
9
9
  * @format
10
10
  */
11
11
 
12
- // flowlint ambiguous-object-type:error
13
-
14
12
  'use strict';
15
13
 
16
14
  import type {RefetchFnDynamic} from './useRefetchableFragmentNode';
@@ -20,6 +18,7 @@ import type {
20
18
  OperationType,
21
19
  } from 'relay-runtime';
22
20
 
21
+ const HooksImplementation = require('./HooksImplementation');
23
22
  const useRefetchableFragmentNode = require('./useRefetchableFragmentNode');
24
23
  const useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
25
24
  const {useDebugValue} = require('react');
@@ -38,7 +37,18 @@ type ReturnType<TQuery: OperationType, TKey: ?{+$data?: mixed, ...}> = [
38
37
  RefetchFnDynamic<TQuery, TKey>,
39
38
  ];
40
39
 
41
- function useRefetchableFragment<
40
+ // This separate type export is only needed as long as we are injecting
41
+ // a separate hooks implementation in ./HooksImplementation -- it can
42
+ // be removed after we stop doing that.
43
+ export type UseRefetchableFragmentType = <
44
+ TQuery: OperationType,
45
+ TKey: ?{+$data?: mixed, +$fragmentSpreads: FragmentType, ...},
46
+ >(
47
+ fragmentInput: GraphQLTaggedNode,
48
+ fragmentRef: TKey,
49
+ ) => ReturnType<TQuery, TKey>;
50
+
51
+ function useRefetchableFragment_LEGACY<
42
52
  TQuery: OperationType,
43
53
  TKey: ?{+$data?: mixed, +$fragmentSpreads: FragmentType, ...},
44
54
  >(
@@ -64,4 +74,23 @@ function useRefetchableFragment<
64
74
  return [fragmentData, (refetch: RefetchFnDynamic<TQuery, TKey>)];
65
75
  }
66
76
 
77
+ function useRefetchableFragment<
78
+ TQuery: OperationType,
79
+ TKey: ?{+$data?: mixed, +$fragmentSpreads: FragmentType, ...},
80
+ >(
81
+ fragmentInput: GraphQLTaggedNode,
82
+ parentFragmentRef: TKey,
83
+ ): ReturnType<TQuery, TKey> {
84
+ const impl = HooksImplementation.get();
85
+ if (impl) {
86
+ return impl.useRefetchableFragment<TQuery, TKey>(
87
+ fragmentInput,
88
+ parentFragmentRef,
89
+ );
90
+ } else {
91
+ // eslint-disable-next-line react-hooks/rules-of-hooks
92
+ return useRefetchableFragment_LEGACY(fragmentInput, parentFragmentRef);
93
+ }
94
+ }
95
+
67
96
  module.exports = useRefetchableFragment;