1- import React , { useState } from 'react' ;
2- import { Container , Title , Tabs } from '@mantine/core' ;
1+ import React , { useEffect , useState } from 'react' ;
2+ import { Container , Title , Tabs , Select , Loader } from '@mantine/core' ;
33import { AuthGuard } from '@ui/components/AuthGuard' ;
44import { AppRoles } from '@common/roles' ;
55import { useApi } from '@ui/util/api' ;
66import ExistingRoomRequests from './ExistingRoomRequests' ;
77import NewRoomRequest from './NewRoomRequest' ;
88import {
9+ getPreviousSemesters ,
10+ getSemesters ,
911 RoomRequestFormValues ,
1012 RoomRequestGetAllResponse ,
1113 RoomRequestPostResponse ,
1214} from '@common/types/roomRequest' ;
1315
1416export const ManageRoomRequestsPage : React . FC = ( ) => {
1517 const api = useApi ( 'core' ) ;
16- const [ semester , setSemester ] = useState < string > ( 'sp25' ) ;
17-
18+ const [ semester , setSemester ] = useState < string | null > ( null ) ; // TODO: Create a selector for this
19+ const [ isLoading , setIsLoading ] = useState ( false ) ;
20+ const nextSemesters = getSemesters ( ) ;
21+ const semesterOptions = [ ...getPreviousSemesters ( ) , ...nextSemesters ] ;
1822 const createRoomRequest = async (
1923 payload : RoomRequestFormValues
2024 ) : Promise < RoomRequestPostResponse > => {
@@ -27,6 +31,9 @@ export const ManageRoomRequestsPage: React.FC = () => {
2731 return response . data ;
2832 } ;
2933
34+ useEffect ( ( ) => {
35+ setSemester ( nextSemesters [ 0 ] . value ) ;
36+ } , [ ] ) ;
3037 return (
3138 < AuthGuard
3239 resourceDef = { {
@@ -43,10 +50,29 @@ export const ManageRoomRequestsPage: React.FC = () => {
4350 < Tabs . Tab value = "new_requests" > New Request</ Tabs . Tab >
4451 </ Tabs . List >
4552
46- < Tabs . Panel value = "existing_requests" >
47- < br />
48- < ExistingRoomRequests getRoomRequests = { getRoomRequests } semester = { semester } />
49- </ Tabs . Panel >
53+ < Select
54+ label = "Select Semester"
55+ placeholder = "Select semester to view room requests"
56+ searchable
57+ value = { semester }
58+ onChange = { ( val ) => {
59+ setIsLoading ( true ) ;
60+ setSemester ( val ) ;
61+ setIsLoading ( false ) ;
62+ } }
63+ data = { semesterOptions }
64+ />
65+
66+ { isLoading ? (
67+ < Loader size = { 16 } />
68+ ) : (
69+ < Tabs . Panel value = "existing_requests" >
70+ < br />
71+ { semester && (
72+ < ExistingRoomRequests getRoomRequests = { getRoomRequests } semester = { semester } />
73+ ) }
74+ </ Tabs . Panel >
75+ ) }
5076
5177 < Tabs . Panel value = "new_requests" >
5278 < br />
0 commit comments