Skip to content

Commit ac72e0f

Browse files
committed
set seconds to zero when validatng
1 parent d70ae5d commit ac72e0f

File tree

4 files changed

+287
-92
lines changed

4 files changed

+287
-92
lines changed

src/common/types/roomRequest.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,10 @@ export const roomRequestDataSchema = roomRequestBaseSchema.extend({
156156
eventStart: z.coerce.date({
157157
required_error: "Event start date and time is required",
158158
invalid_type_error: "Event start must be a valid date and time",
159+
}).transform((date) => {
160+
const d = new Date(date);
161+
d.setSeconds(0, 0);
162+
return d;
159163
}),
160164
eventEnd: z.coerce.date({
161165
required_error: "Event end date and time is required",
@@ -164,6 +168,10 @@ export const roomRequestDataSchema = roomRequestBaseSchema.extend({
164168
theme: z.enum(eventThemeOptions, {
165169
required_error: "Event theme must be provided",
166170
invalid_type_error: "Event theme must be provided",
171+
}).transform((date) => {
172+
const d = new Date(date);
173+
d.setSeconds(0, 0);
174+
return d;
167175
}),
168176
description: z
169177
.string()
@@ -199,7 +207,7 @@ export const roomRequestDataSchema = roomRequestBaseSchema.extend({
199207
export const roomRequestSchema = roomRequestDataSchema
200208
.refine(
201209
(data) => {
202-
return data.eventEnd.getTime() > data.eventStart.getTime();
210+
return data.eventEnd > data.eventStart;
203211
},
204212
{
205213
message: "End date/time must be after start date/time",

src/ui/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@
4343
"react-qr-reader": "^3.0.0-beta-1",
4444
"react-router-dom": "^7.5.2",
4545
"zod": "^3.24.3",
46-
"zod-openapi": "^4.2.4"
46+
"zod-openapi": "^4.2.4",
47+
"zod-validation-error": "^3.4.0"
4748
},
4849
"devDependencies": {
4950
"@eslint/compat": "^1.2.8",

src/ui/pages/roomRequest/NewRoomRequest.tsx

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ import {
3030
} from "@common/types/roomRequest";
3131
import { useNavigate } from "react-router-dom";
3232
import { notifications } from "@mantine/notifications";
33+
import { fromError } from "zod-validation-error";
34+
import { ZodError } from "zod";
3335

3436
// Component for yes/no questions with conditional content
3537
interface ConditionalFieldProps {
@@ -208,7 +210,6 @@ const NewRoomRequest: React.FC<NewRoomRequestProps> = ({
208210
// Get all validation errors from zod, which returns ReactNode
209211
const allErrors: Record<string, React.ReactNode> =
210212
zodResolver(roomRequestSchema)(values);
211-
212213
// If in view mode, return no errors
213214
if (viewOnly) {
214215
return {};
@@ -310,7 +311,7 @@ const NewRoomRequest: React.FC<NewRoomRequestProps> = ({
310311
}, [form.values.isRecurring]);
311312

312313
const handleSubmit = async () => {
313-
if (viewOnly) {
314+
if (viewOnly || isSubmitting) {
314315
return;
315316
}
316317
const apiFormValues = { ...form.values };
@@ -331,19 +332,24 @@ const NewRoomRequest: React.FC<NewRoomRequestProps> = ({
331332
try {
332333
values = await roomRequestSchema.parseAsync(apiFormValues);
333334
} catch (e) {
335+
let message = "Check the browser console for more details.";
336+
if (e instanceof ZodError) {
337+
message = fromError(e).toString();
338+
}
334339
notifications.show({
335340
title: "Submission failed to validate",
336-
message: "Check the browser console for more details.",
341+
message,
342+
color: "red",
337343
});
338-
throw e;
344+
setIsSubmitting(false);
345+
return;
339346
}
340347
const response = await createRoomRequest(values);
348+
await navigate("/roomRequests");
341349
notifications.show({
342350
title: "Room Request Submitted",
343351
message: `The request ID is ${response.id}.`,
344352
});
345-
setIsSubmitting(false);
346-
navigate("/roomRequests");
347353
} catch (e) {
348354
notifications.show({
349355
color: "red",

0 commit comments

Comments
 (0)