@@ -22,27 +22,23 @@ import {
2222 roomRequestSchema ,
2323 RoomRequestStatus ,
2424 RoomRequestStatusUpdatePostBody ,
25+ roomRequestStatusUpdateRequest ,
2526} from '@common/types/roomRequest' ;
2627import { useParams } from 'react-router-dom' ;
2728import { getStatusColor , getStatusIcon } from './roomRequestUtils' ;
2829import { formatStatus } from '@common/types/roomRequest' ;
2930import moment from 'moment-timezone' ;
30- import { useForm } from '@mantine/form' ;
31+ import { useForm , zodResolver } from '@mantine/form' ;
3132import { notifications } from '@mantine/notifications' ;
3233import FullScreenLoader from '@ui/components/AuthContext/LoadingScreen' ;
3334
3435export 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