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
@@ -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 {
@@ -31,12 +29,12 @@ const {useEffect} = require('react');
31
29
  function useLazyLoadQuery_REACT_CACHE<TVariables: Variables, TData>(
32
30
  gqlQuery: Query<TVariables, TData>,
33
31
  variables: TVariables,
34
- options?: {|
32
+ options?: {
35
33
  fetchKey?: string | number,
36
34
  fetchPolicy?: FetchPolicy,
37
35
  networkCacheConfig?: CacheConfig,
38
36
  UNSTABLE_renderPolicy?: RenderPolicy,
39
- |},
37
+ },
40
38
  ): TData {
41
39
  useTrackLoadQueryInRender();
42
40
  const environment = useRelayEnvironment();
@@ -0,0 +1,171 @@
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 {LoadMoreFn, UseLoadMoreFunctionArgs} from '../useLoadMoreFunction';
15
+ import type {RefetchFnDynamic} from './useRefetchableFragmentInternal_REACT_CACHE';
16
+ import type {
17
+ FragmentType,
18
+ GraphQLResponse,
19
+ GraphQLTaggedNode,
20
+ Observer,
21
+ OperationType,
22
+ } from 'relay-runtime';
23
+
24
+ const useLoadMoreFunction = require('../useLoadMoreFunction');
25
+ const useStaticFragmentNodeWarning = require('../useStaticFragmentNodeWarning');
26
+ const useRefetchableFragmentInternal = require('./useRefetchableFragmentInternal_REACT_CACHE');
27
+ const {useCallback, useDebugValue, useState} = require('react');
28
+ const {
29
+ getFragment,
30
+ getFragmentIdentifier,
31
+ getPaginationMetadata,
32
+ } = require('relay-runtime');
33
+
34
+ export type ReturnType<TQuery: OperationType, TKey, TFragmentData> = {
35
+ data: TFragmentData,
36
+ loadNext: LoadMoreFn<TQuery>,
37
+ loadPrevious: LoadMoreFn<TQuery>,
38
+ hasNext: boolean,
39
+ hasPrevious: boolean,
40
+ isLoadingNext: boolean,
41
+ isLoadingPrevious: boolean,
42
+ refetch: RefetchFnDynamic<TQuery, TKey>,
43
+ };
44
+
45
+ function usePaginationFragment<
46
+ TQuery: OperationType,
47
+ TKey: ?{+$data?: mixed, +$fragmentSpreads: FragmentType, ...},
48
+ >(
49
+ fragmentInput: GraphQLTaggedNode,
50
+ parentFragmentRef: TKey,
51
+ ): ReturnType<
52
+ TQuery,
53
+ TKey,
54
+ // NOTE: This $Call ensures that the type of the returned data is either:
55
+ // - nullable if the provided ref type is nullable
56
+ // - non-nullable if the provided ref type is non-nullable
57
+ // prettier-ignore
58
+ $Call<
59
+ & (<TFragmentData>( { +$data?: TFragmentData, ... }) => TFragmentData)
60
+ & (<TFragmentData>(?{ +$data?: TFragmentData, ... }) => ?TFragmentData),
61
+ TKey,
62
+ >,
63
+ > {
64
+ const fragmentNode = getFragment(fragmentInput);
65
+ useStaticFragmentNodeWarning(
66
+ fragmentNode,
67
+ 'first argument of usePaginationFragment()',
68
+ );
69
+ const componentDisplayName = 'usePaginationFragment()';
70
+
71
+ const {
72
+ connectionPathInFragmentData,
73
+ paginationRequest,
74
+ paginationMetadata,
75
+ identifierField,
76
+ } = getPaginationMetadata(fragmentNode, componentDisplayName);
77
+
78
+ const {fragmentData, fragmentRef, refetch} = useRefetchableFragmentInternal<
79
+ TQuery,
80
+ TKey,
81
+ >(fragmentNode, parentFragmentRef, componentDisplayName);
82
+ const fragmentIdentifier = getFragmentIdentifier(fragmentNode, fragmentRef);
83
+
84
+ // Backward pagination
85
+ const [loadPrevious, hasPrevious, isLoadingPrevious, disposeFetchPrevious] =
86
+ useLoadMore<TQuery>({
87
+ componentDisplayName,
88
+ connectionPathInFragmentData,
89
+ direction: 'backward',
90
+ fragmentData,
91
+ fragmentIdentifier,
92
+ fragmentNode,
93
+ fragmentRef,
94
+ identifierField,
95
+ paginationMetadata,
96
+ paginationRequest,
97
+ });
98
+
99
+ // Forward pagination
100
+ const [loadNext, hasNext, isLoadingNext, disposeFetchNext] =
101
+ useLoadMore<TQuery>({
102
+ componentDisplayName,
103
+ connectionPathInFragmentData,
104
+ direction: 'forward',
105
+ fragmentData,
106
+ fragmentIdentifier,
107
+ fragmentNode,
108
+ fragmentRef,
109
+ identifierField,
110
+ paginationMetadata,
111
+ paginationRequest,
112
+ });
113
+
114
+ const refetchPagination: RefetchFnDynamic<TQuery, TKey> = useCallback(
115
+ (variables, options) => {
116
+ disposeFetchNext();
117
+ disposeFetchPrevious();
118
+ return refetch(variables, {...options, __environment: undefined});
119
+ },
120
+ [disposeFetchNext, disposeFetchPrevious, refetch],
121
+ );
122
+
123
+ if (__DEV__) {
124
+ // eslint-disable-next-line react-hooks/rules-of-hooks
125
+ useDebugValue({
126
+ fragment: fragmentNode.name,
127
+ data: fragmentData,
128
+ hasNext,
129
+ isLoadingNext,
130
+ hasPrevious,
131
+ isLoadingPrevious,
132
+ });
133
+ }
134
+ return {
135
+ data: fragmentData,
136
+ loadNext,
137
+ loadPrevious,
138
+ hasNext,
139
+ hasPrevious,
140
+ isLoadingNext,
141
+ isLoadingPrevious,
142
+ refetch: refetchPagination,
143
+ };
144
+ }
145
+
146
+ function useLoadMore<TQuery: OperationType>(
147
+ args: $Diff<
148
+ UseLoadMoreFunctionArgs,
149
+ {
150
+ observer: Observer<GraphQLResponse>,
151
+ onReset: () => void,
152
+ ...
153
+ },
154
+ >,
155
+ ): [LoadMoreFn<TQuery>, boolean, boolean, () => void] {
156
+ const [isLoadingMore, setIsLoadingMore] = useState(false);
157
+ const observer = {
158
+ start: () => setIsLoadingMore(true),
159
+ complete: () => setIsLoadingMore(false),
160
+ error: () => setIsLoadingMore(false),
161
+ };
162
+ const handleReset = () => setIsLoadingMore(false);
163
+ const [loadMore, hasMore, disposeFetch] = useLoadMoreFunction({
164
+ ...args,
165
+ observer,
166
+ onReset: handleReset,
167
+ });
168
+ return [loadMore, hasMore, isLoadingMore, disposeFetch];
169
+ }
170
+
171
+ 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';
@@ -35,9 +33,9 @@ const warning = require('warning');
35
33
  function usePreloadedQuery_REACT_CACHE<TQuery: OperationType>(
36
34
  gqlQuery: GraphQLTaggedNode,
37
35
  preloadedQuery: PreloadedQuery<TQuery>,
38
- options?: {|
36
+ options?: {
39
37
  UNSTABLE_renderPolicy?: RenderPolicy,
40
- |},
38
+ },
41
39
  ): TQuery['response'] {
42
40
  const environment = useRelayEnvironment();
43
41