@@ -184,10 +184,10 @@ export const roomRequestSchema = roomRequestBaseSchema
184
184
// Existing fields
185
185
hostingMinors : z . boolean ( ) ,
186
186
locationType : z . enum ( [ "in-person" , "virtual" , "both" ] ) ,
187
- spaceType : z . string ( ) . min ( 1 ) ,
188
- specificRoom : z . string ( ) . min ( 1 ) ,
189
- estimatedAttendees : z . number ( ) . positive ( ) ,
190
- seatsNeeded : z . number ( ) . positive ( ) ,
187
+ spaceType : z . optional ( z . string ( ) . min ( 1 ) ) ,
188
+ specificRoom : z . optional ( z . string ( ) . min ( 1 ) ) ,
189
+ estimatedAttendees : z . optional ( z . number ( ) . positive ( ) ) ,
190
+ seatsNeeded : z . optional ( z . number ( ) . positive ( ) ) ,
191
191
setupDetails : z . string ( ) . min ( 1 ) . nullable ( ) . optional ( ) ,
192
192
onCampusPartners : z . string ( ) . min ( 1 ) . nullable ( ) ,
193
193
offCampusPartners : z . string ( ) . min ( 1 ) . nullable ( ) ,
@@ -266,10 +266,10 @@ export const roomRequestSchema = roomRequestBaseSchema
266
266
)
267
267
. refine (
268
268
( data ) => {
269
- if ( data . setupDetails === undefined && specificRoomSetupRooms . includes ( data . spaceType ) ) {
269
+ if ( data . setupDetails === undefined && specificRoomSetupRooms . includes ( data . spaceType || "" ) ) {
270
270
return false ;
271
271
}
272
- if ( data . setupDetails && ! specificRoomSetupRooms . includes ( data . spaceType ) ) {
272
+ if ( data . setupDetails && ! specificRoomSetupRooms . includes ( data . spaceType || "" ) ) {
273
273
return false ;
274
274
}
275
275
return true ;
@@ -280,33 +280,35 @@ export const roomRequestSchema = roomRequestBaseSchema
280
280
} ,
281
281
)
282
282
. superRefine ( ( data , ctx ) => {
283
- // Additional validation for conditional fields based on locationType
284
- if ( data . locationType === "in-person" || data . locationType === "both" ) {
285
- if ( ! data . spaceType || data . spaceType . length === 0 ) {
283
+ const isPhysicalLocation = data . locationType === "in-person" || data . locationType === "both" ;
284
+
285
+ // Conditional physical location fields
286
+ if ( isPhysicalLocation ) {
287
+ if ( ! data . spaceType || data . spaceType . trim ( ) . length === 0 ) {
286
288
ctx . addIssue ( {
287
289
code : z . ZodIssueCode . custom ,
288
290
message : "Please select a space type" ,
289
291
path : [ "spaceType" ] ,
290
292
} ) ;
291
293
}
292
294
293
- if ( ! data . specificRoom || data . specificRoom . length === 0 ) {
295
+ if ( ! data . specificRoom || data . specificRoom . trim ( ) . length === 0 ) {
294
296
ctx . addIssue ( {
295
297
code : z . ZodIssueCode . custom ,
296
298
message : "Please provide details about the room location" ,
297
299
path : [ "specificRoom" ] ,
298
300
} ) ;
299
301
}
300
302
301
- if ( ! data . estimatedAttendees || data . estimatedAttendees <= 0 ) {
303
+ if ( data . estimatedAttendees == null || data . estimatedAttendees <= 0 ) {
302
304
ctx . addIssue ( {
303
305
code : z . ZodIssueCode . custom ,
304
306
message : "Please provide an estimated number of attendees" ,
305
307
path : [ "estimatedAttendees" ] ,
306
308
} ) ;
307
309
}
308
310
309
- if ( ! data . seatsNeeded || data . seatsNeeded <= 0 ) {
311
+ if ( data . seatsNeeded == null || data . seatsNeeded <= 0 ) {
310
312
ctx . addIssue ( {
311
313
code : z . ZodIssueCode . custom ,
312
314
message : "Please specify how many seats you need" ,
@@ -357,8 +359,26 @@ export const roomRequestSchema = roomRequestBaseSchema
357
359
path : [ "nonIllinoisAttendees" ] ,
358
360
} ) ;
359
361
}
362
+
363
+ // Setup details logic
364
+ if ( data . setupDetails === undefined && specificRoomSetupRooms . includes ( data . spaceType || "" ) ) {
365
+ ctx . addIssue ( {
366
+ code : z . ZodIssueCode . custom ,
367
+ message : "Invalid setup details response." ,
368
+ path : [ "setupDetails" ] ,
369
+ } ) ;
370
+ }
371
+
372
+ if ( data . setupDetails && ! specificRoomSetupRooms . includes ( data . spaceType || "" ) ) {
373
+ ctx . addIssue ( {
374
+ code : z . ZodIssueCode . custom ,
375
+ message : "Invalid setup details response." ,
376
+ path : [ "setupDetails" ] ,
377
+ } ) ;
378
+ }
360
379
} ) ;
361
380
381
+
362
382
export type RoomRequestFormValues = z . infer < typeof roomRequestSchema > ;
363
383
364
384
export const roomRequestGetResponse = z . object ( {
0 commit comments