@@ -80,31 +80,48 @@ export const userEventSchema = z.object({
8080export type UserEventType = z . infer < typeof userEventSchema > ;
8181
8282export const createEventFormSchema = ( t : ( key : string ) => string ) =>
83- z . object ( {
84- title : z . string ( ) . min ( 1 , t ( "validation.title-required" ) ) ,
85- description : z . string ( ) . min ( 1 , t ( "validation.description-required" ) ) ,
86- // file_name: z.string().optional(),
87- slug : z . string ( ) . min ( 1 , t ( "validation.slug-required" ) ) ,
88- date : z . string ( ) . min ( 1 , t ( "validation.date-required" ) ) ,
89- type : z . string ( ) . min ( 1 , t ( "validation.type-required" ) ) ,
90- session_type : z . string ( ) . min ( 1 , t ( "validation.session-type-required" ) ) ,
91- location : z . string ( ) . min ( 1 , t ( "validation.location-required" ) ) ,
92- duration : z . string ( ) . min ( 1 , t ( "validation.duration-required" ) ) ,
93- status : z . string ( ) . min ( 1 , t ( "validation.status-required" ) ) ,
94- capacity : z . number ( ) . min ( 1 , t ( "validation.capacity-min" ) ) ,
95- price : z . number ( ) . min ( 0 , t ( "validation.price-min" ) ) ,
96- registration_link : z . string ( ) . url ( t ( "validation.registration-url" ) ) ,
97- tags : z . array ( z . string ( ) ) ,
98- speakers : z . array ( z . string ( ) ) ,
99- reservation_start_date : z . string ( ) . min ( 1 , t ( "validation.reservation-start-required" ) ) ,
100- reservation_end_date : z . string ( ) . min ( 1 , t ( "validation.reservation-end-required" ) ) ,
101- image : z . union ( [
102- z . instanceof ( File ) . refine ( ( file ) => [ "image/png" , "image/jpeg" , "image/jpg" , "image/webp" ] . includes ( file . type ) , {
103- message : t ( "validation.image-type" ) ,
104- } ) ,
105- z . string ( ) . min ( 1 , t ( "validation.image-required" ) ) ,
106- ] ) ,
107- } ) ;
83+ z
84+ . object ( {
85+ title : z . string ( ) . min ( 1 , t ( "validation.title-required" ) ) ,
86+ description : z . string ( ) . min ( 1 , t ( "validation.description-required" ) ) ,
87+ file_name : z . string ( ) . optional ( ) ,
88+ slug : z . string ( ) . min ( 1 , t ( "validation.slug-required" ) ) ,
89+ date : z . string ( ) . min ( 1 , t ( "validation.date-required" ) ) ,
90+ type : z . string ( ) . min ( 1 , t ( "validation.type-required" ) ) ,
91+ session_type : z . string ( ) . min ( 1 , t ( "validation.session-type-required" ) ) ,
92+ location : z . string ( ) . min ( 1 , t ( "validation.location-required" ) ) ,
93+ duration : z . string ( ) . min ( 1 , t ( "validation.duration-required" ) ) ,
94+ status : z . string ( ) . min ( 1 , t ( "validation.status-required" ) ) ,
95+ capacity : z . number ( ) . min ( 1 , t ( "validation.capacity-min" ) ) ,
96+ price : z . number ( ) . min ( 0 , t ( "validation.price-min" ) ) ,
97+ registration_link : z . string ( ) . url ( t ( "validation.registration-url" ) ) ,
98+ tags : z . array ( z . string ( ) ) ,
99+ speakers : z . array ( z . string ( ) ) ,
100+ reservation_start_date : z . string ( ) . min ( 1 , t ( "validation.reservation-start-required" ) ) ,
101+ reservation_end_date : z . string ( ) . min ( 1 , t ( "validation.reservation-end-required" ) ) ,
102+ image : z
103+ . union ( [
104+ z
105+ . instanceof ( File )
106+ . refine ( ( file ) => [ "image/png" , "image/jpeg" , "image/jpg" , "image/webp" ] . includes ( file . type ) , {
107+ message : t ( "validation.image-type" ) ,
108+ } ) ,
109+ z . string ( ) . optional ( ) ,
110+ ] )
111+ . optional ( ) ,
112+ } )
113+ . refine (
114+ ( data ) => {
115+ if ( data . file_name ) {
116+ return true ;
117+ }
118+ return data . image instanceof File || ( typeof data . image === "string" && data . image . length > 0 ) ;
119+ } ,
120+ {
121+ message : t ( "validation.image-required" ) ,
122+ path : [ "image" ] ,
123+ }
124+ ) ;
108125
109126export type EventFormType = z . infer < ReturnType < typeof createEventFormSchema > > ;
110127
0 commit comments