@@ -87,8 +87,35 @@ let internal_makeRefetchableFnOpts = (~fetchPolicy=?, ~onComplete=?, ()) => {
8787 onComplete : ?(onComplete -> RescriptRelay_Internal .internal_nullableToOptionalExnHandler ),
8888}
8989
90+ module InternalNoopDisposable = {
91+ type t = {dispose : unit => unit }
92+ external toOpaqueDisposable : t => Disposable .t = "%identity"
93+ let noop = {dispose : () => ()}-> toOpaqueDisposable
94+ }
95+
96+ let internal_noopRefetch = (
97+ ~variables as _ ,
98+ ~fetchPolicy as _ = ?,
99+ ~onComplete = ?,
100+ ) => {
101+ switch onComplete {
102+ | None => ()
103+ | Some (complete ) => complete (None )
104+ }
105+ InternalNoopDisposable .noop
106+ }
107+
90108type paginationLoadMoreOptions = {onComplete ?: Nullable .t <JsExn .t > => unit }
91109type paginationLoadMoreFn = (~count : int , ~onComplete : option <JsExn .t > => unit = ?) => Disposable .t
110+
111+ let internal_noopLoadMore = (~count as _ , ~onComplete = ?) => {
112+ switch onComplete {
113+ | None => ()
114+ | Some (complete ) => complete (None )
115+ }
116+ InternalNoopDisposable .noop
117+ }
118+
92119type paginationFragmentReturnRaw <'fragment , 'refetchVariables > = {
93120 data : 'fragment ,
94121 loadNext : (int , paginationLoadMoreOptions ) => Disposable .t ,
@@ -127,40 +154,53 @@ let usePaginationFragment = (
127154 ~convertFragment : 'fragment => 'fragment ,
128155 ~convertRefetchVariables : 'refetchVariables => 'refetchVariables ,
129156) => {
130- let p = usePaginationFragment_ (node , fRef )
131- let data = RescriptRelay_Internal .internal_useConvertedValue (convertFragment , p .data )
132- {
133- data ,
134- loadNext : React .useMemo1 (() =>
135- (~count , ~onComplete = ?) => {
136- p .loadNext (
137- count ,
138- {onComplete : ?(onComplete -> RescriptRelay_Internal .internal_nullableToOptionalExnHandler )},
139- )
140- }
141- , [p .loadNext ]),
142- loadPrevious : React .useMemo1 (() =>
143- (~count , ~onComplete = ?) => {
144- p .loadPrevious (
145- count ,
146- {onComplete : ?(onComplete -> RescriptRelay_Internal .internal_nullableToOptionalExnHandler )},
147- )
148- }
149- , [p .loadPrevious ]),
150- hasNext : p .hasNext ,
151- hasPrevious : p .hasPrevious ,
152- isLoadingNext : p .isLoadingNext ,
153- isLoadingPrevious : p .isLoadingPrevious ,
154- refetch : React .useMemo1 (() =>
155- (~variables , ~fetchPolicy = ?, ~onComplete = ?) => {
156- p .refetch (
157- RescriptRelay_Internal .internal_cleanObjectFromUndefinedRaw (
158- variables -> convertRefetchVariables ,
159- ),
160- internal_makeRefetchableFnOpts (~onComplete ?, ~fetchPolicy ?, ()),
161- )
162- }
163- , [p .refetch ]),
157+ switch RescriptRelay_TestFragmentRef .getDataForNode (node , fRef ) {
158+ | Some (data ) => {
159+ data ,
160+ loadNext : internal_noopLoadMore ,
161+ loadPrevious : internal_noopLoadMore ,
162+ hasNext : false ,
163+ hasPrevious : false ,
164+ isLoadingNext : false ,
165+ isLoadingPrevious : false ,
166+ refetch : internal_noopRefetch ,
167+ }
168+ | None =>
169+ let p = usePaginationFragment_ (node , fRef )
170+ let data = RescriptRelay_Internal .internal_useConvertedValue (convertFragment , p .data )
171+ {
172+ data ,
173+ loadNext : React .useMemo1 (() =>
174+ (~count , ~onComplete = ?) => {
175+ p .loadNext (
176+ count ,
177+ {onComplete : ?(onComplete -> RescriptRelay_Internal .internal_nullableToOptionalExnHandler )},
178+ )
179+ }
180+ , [p .loadNext ]),
181+ loadPrevious : React .useMemo1 (() =>
182+ (~count , ~onComplete = ?) => {
183+ p .loadPrevious (
184+ count ,
185+ {onComplete : ?(onComplete -> RescriptRelay_Internal .internal_nullableToOptionalExnHandler )},
186+ )
187+ }
188+ , [p .loadPrevious ]),
189+ hasNext : p .hasNext ,
190+ hasPrevious : p .hasPrevious ,
191+ isLoadingNext : p .isLoadingNext ,
192+ isLoadingPrevious : p .isLoadingPrevious ,
193+ refetch : React .useMemo1 (() =>
194+ (~variables , ~fetchPolicy = ?, ~onComplete = ?) => {
195+ p .refetch (
196+ RescriptRelay_Internal .internal_cleanObjectFromUndefinedRaw (
197+ variables -> convertRefetchVariables ,
198+ ),
199+ internal_makeRefetchableFnOpts (~onComplete ?, ~fetchPolicy ?, ()),
200+ )
201+ }
202+ , [p .refetch ]),
203+ }
164204 }
165205}
166206
@@ -250,23 +290,6 @@ external useRefetchableFragment_: (
250290 'fragmentRef ,
251291) => ('fragment , ('refetchVariables , refetchableFnOpts ) => Disposable .t ) = "useRefetchableFragment"
252292
253- let internal_noopRefetch = (
254- ~variables as _ ,
255- ~fetchPolicy as _ = ?,
256- ~onComplete = ?,
257- ) => {
258- module Disposable = {
259- type t = {dispose : unit => unit }
260- external toOpaqueDisposable : t => Disposable .t = "%identity"
261- let noop = { dispose : () => ()}-> toOpaqueDisposable
262- }
263- switch onComplete {
264- | None => ()
265- | Some (complete ) => complete (None )
266- }
267- Disposable .noop
268- }
269-
270293/**React hook for using a fragment that you want to refetch. Returns \
271294 a tuple of `(fragmentData, refetchFn)`.\n\n\
272295 ### Refetching and variables\n\
0 commit comments