Skip to content

Commit ca4496e

Browse files
authored
fix validation issues for status updates. (#104)
1 parent a35efd6 commit ca4496e

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed

src/common/types/roomRequest.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ export enum RoomRequestStatus {
132132

133133
export const roomRequestStatusUpdateRequest = z.object({
134134
status: z.nativeEnum(RoomRequestStatus),
135-
notes: z.optional(z.string().min(1).max(1000)),
135+
notes: z.string().min(1).max(1000),
136136
});
137137

138138
export const roomRequestStatusUpdate = roomRequestStatusUpdateRequest.extend({

src/ui/pages/roomRequest/ViewRoomRequest.page.tsx

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,23 @@ import {
2222
roomRequestSchema,
2323
RoomRequestStatus,
2424
RoomRequestStatusUpdatePostBody,
25+
roomRequestStatusUpdateRequest,
2526
} from '@common/types/roomRequest';
2627
import { useParams } from 'react-router-dom';
2728
import { getStatusColor, getStatusIcon } from './roomRequestUtils';
2829
import { formatStatus } from '@common/types/roomRequest';
2930
import moment from 'moment-timezone';
30-
import { useForm } from '@mantine/form';
31+
import { useForm, zodResolver } from '@mantine/form';
3132
import { notifications } from '@mantine/notifications';
3233
import FullScreenLoader from '@ui/components/AuthContext/LoadingScreen';
3334

3435
export const ViewRoomRequest: React.FC = () => {
3536
const { semesterId, requestId } = useParams();
3637
const [data, setData] = useState<RoomRequestGetResponse | null>(null);
3738
const [isSubmitting, setIsSubmitting] = useState(false);
38-
const newStatusForm = useForm<{ status: RoomRequestStatus | null; notes?: string }>({
39-
initialValues: { status: null },
40-
validate: {
41-
status: (value) =>
42-
value && Object.keys(RoomRequestStatus).includes(value) ? null : 'Please select a status.',
43-
notes: (value) =>
44-
value && value.length <= 1000 ? null : 'Please limit your response to 1000 characters.',
45-
},
39+
const newStatusForm = useForm<{ status: RoomRequestStatus | null; notes: string }>({
40+
initialValues: { status: null, notes: '' },
41+
validate: zodResolver(roomRequestStatusUpdateRequest),
4642
});
4743
const handleStatusChange = async (payload: RoomRequestStatusUpdatePostBody) => {
4844
await api.post(`/api/v1/roomRequests/${semesterId}/${requestId}/status`, payload);
@@ -57,6 +53,10 @@ export const ViewRoomRequest: React.FC = () => {
5753
};
5854
const submitStatusChange = async () => {
5955
try {
56+
newStatusForm.validate();
57+
if (!newStatusForm.isValid()) {
58+
return;
59+
}
6060
setIsSubmitting(true);
6161
await handleStatusChange(newStatusForm.values as RoomRequestStatusUpdatePostBody);
6262
notifications.show({
@@ -138,12 +138,13 @@ export const ViewRoomRequest: React.FC = () => {
138138
{newStatusForm.values.status && (
139139
<>
140140
<Textarea
141-
label="Event Description"
141+
label="Status Message"
142+
withAsterisk
142143
description="Max 1000 characters."
143144
placeholder="Provide any requisite details needed to use the room."
144145
{...newStatusForm.getInputProps('notes')}
145146
/>
146-
<Button onClick={submitStatusChange} color="green">
147+
<Button mt="md" onClick={submitStatusChange} color="green">
147148
{isSubmitting ? (
148149
<>
149150
<Loader size={16} color="white" />

0 commit comments

Comments
 (0)