@@ -16,9 +16,10 @@ const fetcherSubmitMock = vi.fn();
1616const useActionDataMock = vi . hoisted ( ( ) => vi . fn ( ) ) ;
1717
1818const useNavigationMock = vi . hoisted ( ( ) =>
19- vi . fn < ( ) => Pick < Navigation , "state" | "formData" > > ( ( ) => ( {
19+ vi . fn < ( ) => Pick < Navigation , "state" | "formData" | "json" > > ( ( ) => ( {
2020 state : "idle" ,
2121 formData : undefined ,
22+ json : undefined ,
2223 } ) ) ,
2324) ;
2425
@@ -249,12 +250,70 @@ describe("useRemixForm", () => {
249250 useNavigationMock . mockReturnValue ( {
250251 state : "submitting" ,
251252 formData : new FormData ( ) ,
253+ json : undefined ,
252254 } ) ;
253255 rerender ( ) ;
254256
255257 expect ( result . current . formState . isSubmitting ) . toBe ( true ) ;
256258
257- useNavigationMock . mockReturnValue ( { state : "idle" , formData : undefined } ) ;
259+ useNavigationMock . mockReturnValue ( {
260+ state : "idle" ,
261+ formData : undefined ,
262+ json : undefined ,
263+ } ) ;
264+ rerender ( ) ;
265+
266+ expect ( result . current . formState . isSubmitting ) . toBe ( false ) ;
267+ } ) ;
268+
269+ it ( "should reset isSubmitting when the form is submitted using encType: application/json" , async ( ) => {
270+ submitMock . mockReset ( ) ;
271+ useNavigationMock . mockClear ( ) ;
272+
273+ const { result, rerender } = renderHook ( ( ) =>
274+ useRemixForm ( {
275+ resolver : ( ) => ( { values : { } , errors : { } } ) ,
276+ submitConfig : {
277+ action : "/submit" ,
278+ encType : "application/json" ,
279+ } ,
280+ } ) ,
281+ ) ;
282+
283+ expect ( result . current . formState . isSubmitting ) . toBe ( false ) ;
284+
285+ act ( ( ) => {
286+ result . current . handleSubmit ( { } as any ) ;
287+ } ) ;
288+ expect ( result . current . formState . isSubmitting ) . toBe ( true ) ;
289+
290+ await waitFor ( ( ) => expect ( submitMock ) . toHaveBeenCalledTimes ( 1 ) ) ;
291+
292+ expect ( result . current . formState . isSubmitting ) . toBe ( true ) ;
293+
294+ expect ( submitMock ) . toHaveBeenCalledWith (
295+ { } ,
296+ {
297+ method : "post" ,
298+ action : "/submit" ,
299+ encType : "application/json" ,
300+ } ,
301+ ) ;
302+
303+ useNavigationMock . mockReturnValue ( {
304+ state : "submitting" ,
305+ formData : undefined ,
306+ json : { } ,
307+ } ) ;
308+ rerender ( ) ;
309+
310+ expect ( result . current . formState . isSubmitting ) . toBe ( true ) ;
311+
312+ useNavigationMock . mockReturnValue ( {
313+ state : "idle" ,
314+ formData : undefined ,
315+ json : undefined ,
316+ } ) ;
258317 rerender ( ) ;
259318
260319 expect ( result . current . formState . isSubmitting ) . toBe ( false ) ;
0 commit comments