@@ -3,9 +3,15 @@ import { z } from "zod";
33import { updateSideMenuPreferences } from "~/services/dashboardPreferences.server" ;
44import { requireUser } from "~/services/session.server" ;
55
6+ // Transforms form data string "true"/"false" to boolean, or undefined if not present
7+ const booleanFromFormData = z
8+ . enum ( [ "true" , "false" ] )
9+ . transform ( ( val ) => val === "true" )
10+ . optional ( ) ;
11+
612const RequestSchema = z . object ( {
7- isCollapsed : z . boolean ( ) . optional ( ) ,
8- manageSectionCollapsed : z . boolean ( ) . optional ( ) ,
13+ isCollapsed : booleanFromFormData ,
14+ manageSectionCollapsed : booleanFromFormData ,
915} ) ;
1016
1117export async function action ( { request } : ActionFunctionArgs ) {
@@ -14,17 +20,7 @@ export async function action({ request }: ActionFunctionArgs) {
1420 const formData = await request . formData ( ) ;
1521 const rawData = Object . fromEntries ( formData ) ;
1622
17- // Parse booleans from form data strings
18- const data = {
19- isCollapsed :
20- rawData . isCollapsed !== undefined ? rawData . isCollapsed === "true" : undefined ,
21- manageSectionCollapsed :
22- rawData . manageSectionCollapsed !== undefined
23- ? rawData . manageSectionCollapsed === "true"
24- : undefined ,
25- } ;
26-
27- const result = RequestSchema . safeParse ( data ) ;
23+ const result = RequestSchema . safeParse ( rawData ) ;
2824 if ( ! result . success ) {
2925 return json ( { success : false , error : "Invalid request data" } , { status : 400 } ) ;
3026 }
0 commit comments