react-relay 14.0.0 → 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.
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;