1
- import { RoomStatus } from "@common/types" ;
2
- import ChevronRightIcon from "@mui/icons-material/ChevronRight" ;
3
1
import CloseIcon from "@mui/icons-material/Close" ;
4
2
import { Typography , TypographyProps , useMediaQuery } from "@mui/material" ;
5
3
import Box , { BoxProps } from "@mui/material/Box" ;
@@ -13,19 +11,18 @@ import { DesktopDatePicker } from "@mui/x-date-pickers/DesktopDatePicker";
13
11
import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider" ;
14
12
import { TimePicker } from "@mui/x-date-pickers/TimePicker" ;
15
13
import Image , { ImageProps } from "next/image" ;
16
- import Link from "next/link" ;
17
14
import React from "react" ;
18
15
19
16
import Button from "../components/Button" ;
20
17
import useBuildingStatus from "../hooks/useBuildingStatus" ;
21
- import useRoom from "../hooks/useRoom" ;
22
18
import {
23
19
selectCurrentBuilding ,
24
20
setCurrentBuilding ,
25
21
} from "../redux/currentBuildingSlice" ;
26
22
import { selectDatetime , setDatetime } from "../redux/datetimeSlice" ;
27
23
import { useDispatch , useSelector } from "../redux/hooks" ;
28
24
import toSydneyTime from "../utils/toSydneyTime" ;
25
+ import RoomAvailabilityBox from "./RoomAvailabilityBox" ;
29
26
30
27
const AppBox = styled ( Box ) ( ( { theme } ) => ( {
31
28
boxShadow : "none" ,
@@ -63,37 +60,6 @@ const RoomBox = styled(Box)<BoxProps>(({ theme }) => ({
63
60
padding : theme . spacing ( 0.5 ) ,
64
61
} ) ) ;
65
62
66
- const IndiviRoomBox = styled ( Box ) < BoxProps > ( ( { theme } ) => ( {
67
- display : "flex" ,
68
- flexDirection : "row" ,
69
- justifyContent : "space-between" ,
70
- alignItems : "center" ,
71
- borderRadius : 10 ,
72
- height : 70 ,
73
- fontSize : 20 ,
74
- fontWeight : 500 ,
75
- backgroundColor : "#FFFFFF" ,
76
- color : "black" ,
77
- padding : theme . spacing ( 2 , 2 , 2 , 3 ) ,
78
- margin : theme . spacing ( 1.5 , 1 ) ,
79
- "&:hover" : {
80
- border : "1px solid" ,
81
- borderColor : theme . palette . primary . main ,
82
- cursor : "pointer" ,
83
- } ,
84
- } ) ) ;
85
-
86
- const RoomBoxHeading = styled ( Typography ) < TypographyProps > ( ( { theme } ) => ( {
87
- fontSize : 16 ,
88
- fontWeight : 500 ,
89
- } ) ) ;
90
-
91
- const RoomBoxSubheading = styled ( Typography ) < TypographyProps > ( ( { theme } ) => ( {
92
- fontSize : 12 ,
93
- fontWeight : 400 ,
94
- paddingTop : 1 ,
95
- } ) ) ;
96
-
97
63
export const drawerWidth = 400 ;
98
64
const drawerWidthMobile = "100%" ;
99
65
@@ -105,7 +71,9 @@ const BuildingDrawer: React.FC<{ open: boolean }> = ({ open }) => {
105
71
const theme = useTheme ( ) ;
106
72
const isMobile = useMediaQuery ( theme . breakpoints . down ( "sm" ) ) ;
107
73
108
- if ( ! building || ! open ) return < > </ > ;
74
+ if ( ! building || ! open ) {
75
+ return < > </ > ;
76
+ }
109
77
110
78
const onClose = ( ) => dispatch ( setCurrentBuilding ( null ) ) ;
111
79
@@ -121,85 +89,6 @@ const BuildingDrawer: React.FC<{ open: boolean }> = ({ open }) => {
121
89
/>
122
90
) ;
123
91
124
- const RoomAvailabilityBox : React . FC < {
125
- roomNumber : string ;
126
- roomStatus : RoomStatus ;
127
- } > = ( { roomNumber, roomStatus } ) => {
128
- const date = new Date ( roomStatus . endtime ) ;
129
- const hoursMinutes = date . toLocaleTimeString ( "en-AU" , {
130
- hour : "2-digit" ,
131
- minute : "2-digit" ,
132
- hour12 : true ,
133
- } ) ;
134
-
135
- const roomStatusColor = {
136
- free : "#2AA300" ,
137
- busy : "#D30000" ,
138
- soon : "#ffa600" ,
139
- } ;
140
-
141
- const roomStatusMessage = {
142
- free : "Available" ,
143
- busy : "Unavailable" ,
144
- soon : "Available Soon" ,
145
- } ;
146
-
147
- const untilMessage = {
148
- free : hoursMinutes == "Invalid Date" ? "" : "until " + hoursMinutes ,
149
- busy : hoursMinutes == "Invalid Date" ? "" : "until " + hoursMinutes ,
150
- soon : "at " + hoursMinutes ,
151
- } ;
152
-
153
- const { room } = useRoom ( `${ building . id } -${ roomNumber } ` ) ;
154
-
155
- return (
156
- < Link href = { `/room/${ building . id } -${ roomNumber } ` } >
157
- < IndiviRoomBox >
158
- < Box
159
- sx = { {
160
- display : "flex" ,
161
- flexDirection : "column" ,
162
- alignItems : "flex-start" ,
163
- paddingRight : 1 ,
164
- } }
165
- >
166
- < RoomBoxHeading > { roomNumber } </ RoomBoxHeading >
167
- < RoomBoxSubheading > { ! room ? "" : room . name } </ RoomBoxSubheading >
168
- </ Box >
169
- < Box
170
- sx = { {
171
- display : "flex" ,
172
- flexDirection : "row" ,
173
- justifyContent : "space-around" ,
174
- alignItems : "center" ,
175
- } }
176
- >
177
- < Box
178
- sx = { {
179
- display : "flex" ,
180
- flexDirection : "column" ,
181
- alignItems : "flex-end" ,
182
- paddingRight : 1 ,
183
- } }
184
- >
185
- < RoomBoxHeading
186
- sx = { { color : roomStatusColor [ roomStatus . status ] } }
187
- >
188
- { roomStatusMessage [ roomStatus . status ] }
189
- </ RoomBoxHeading >
190
- < RoomBoxSubheading
191
- sx = { { color : roomStatusColor [ roomStatus . status ] } }
192
- >
193
- { untilMessage [ roomStatus . status ] }
194
- </ RoomBoxSubheading >
195
- </ Box >
196
- < ChevronRightIcon style = { { color : "grey" } } />
197
- </ Box >
198
- </ IndiviRoomBox >
199
- </ Link >
200
- ) ;
201
- } ;
202
-
203
92
return (
204
93
< Drawer
205
94
sx = { {
@@ -290,6 +179,7 @@ const BuildingDrawer: React.FC<{ open: boolean }> = ({ open }) => {
290
179
key = { roomNumber }
291
180
roomNumber = { roomNumber }
292
181
roomStatus = { rooms [ roomNumber ] }
182
+ buildingId = { building . id }
293
183
/>
294
184
) )
295
185
) : (
0 commit comments