diff --git a/client/src/components/EventCard/EditDialog.tsx b/client/src/components/EventCard/EditDialog.tsx index d448b68..c789cf8 100644 --- a/client/src/components/EventCard/EditDialog.tsx +++ b/client/src/components/EventCard/EditDialog.tsx @@ -295,7 +295,7 @@ export default function EditDialog({ open, event, handleClose, currentRoom, onEd 0 ? availableRoomOptions[0].value : '')} loading={roomLoading} currentRoom={currentRoom} disabled={!availableRoomOptions.length} diff --git a/client/src/pages/Home/BookRoomView/index.tsx b/client/src/pages/Home/BookRoomView/index.tsx index 9afce60..9f92e0d 100644 --- a/client/src/pages/Home/BookRoomView/index.tsx +++ b/client/src/pages/Home/BookRoomView/index.tsx @@ -282,7 +282,7 @@ export default function BookRoomView({ refresh, setRefresh }: BookRoomViewProps) 0 ? availableRoomOptions[0].value : '')} loading={roomLoading} disabled={!availableRoomOptions.length} onChange={handleInputChange} diff --git a/client/src/pages/Home/SettingsDialog.tsx b/client/src/pages/Home/SettingsDialog.tsx index dba8c09..db7e83c 100644 --- a/client/src/pages/Home/SettingsDialog.tsx +++ b/client/src/pages/Home/SettingsDialog.tsx @@ -46,6 +46,7 @@ const StyledToggleButtonGroup = styled(ToggleButtonGroup)(({ theme }) => ({ borderRadius: 30, }, }, + justifyContent: 'center', })); const StyledToggleButton = styled(ToggleButton)(({ theme }) => ({ @@ -441,12 +442,12 @@ export default function SettingsDialog({ open, handleClose, onSave }: SettingsDi borderRadius: 100, backgroundColor: 'white', py: 1, - px: 1, + px: 0, display: 'flex', justifyContent: 'center', alignItems: 'center', textAlign: 'center', - mr: 1, + mr: 0, }} > @@ -471,6 +472,7 @@ export default function SettingsDialog({ open, handleClose, onSave }: SettingsDi px: 0.5, width: '100%', borderRadius: 30, + textAlign: 'center', }} > @@ -482,33 +484,33 @@ export default function SettingsDialog({ open, handleClose, onSave }: SettingsDi + {/* logout icon */} + + + ({ + color: theme.palette.common.black, + }), + ]} + /> + + - {/* logout icon */} - - - ({ - color: theme.palette.common.black, - }), - ]} - /> - - {tabs[tabIndex].component({ onSave: () => onSave() })} diff --git a/server/src/calender/calender.service.ts b/server/src/calender/calender.service.ts index c1fa2d0..b79176a 100644 --- a/server/src/calender/calender.service.ts +++ b/server/src/calender/calender.service.ts @@ -125,7 +125,6 @@ export class CalenderService { ): Promise { const filteredRoomEmails: string[] = []; const rooms = await this.authService.getDirectoryResources(domain); - for (const room of rooms) { if (room.seats >= Number(minSeats) && (floor === undefined || room.floor === floor)) { filteredRoomEmails.push(room.email); @@ -151,13 +150,34 @@ export class CalenderService { if (eventId) { const event = await this.googleApiService.getCalenderEvent(client, eventId); - const requestStart = new Date(start); - const requestEnd = new Date(end); - const isWithinRange = new Date(event.start.dateTime) >= requestStart && new Date(event.end.dateTime) <= requestEnd; - if (isWithinRange) { - const attendee = event.attendees.find((attendee) => attendee.email.endsWith('resource.calendar.google.com')); - const currentRoom = extractRoomByEmail(rooms, attendee.email); + const currentStartTime = new Date(event.start.dateTime).getTime(); + const currentEndTime = new Date(event.end.dateTime).getTime(); + + const requestStart = new Date(start).getTime(); + const requestEnd = new Date(end).getTime(); + + const attendee = event.attendees.find((attendee) => attendee.email.endsWith('resource.calendar.google.com')); + const currentRoom = extractRoomByEmail(rooms, attendee.email); + + const { timeZone } = event.start; + + let isEventRoomAvailable = true; + if (requestStart < currentStartTime) { + const isAvailable = await this.isRoomAvailable(client, start, event.start.dateTime, attendee.email, timeZone); + if (!isAvailable) { + isEventRoomAvailable = false; + } + } + + if (requestEnd > currentEndTime) { + const isAvailable = await this.isRoomAvailable(client, event.end.dateTime, end, attendee.email, timeZone); + if (!isAvailable) { + isEventRoomAvailable = false; + } + } + + if (isEventRoomAvailable) { availableRooms.unshift(currentRoom); } } diff --git a/server/src/google-api/google-api.service.ts b/server/src/google-api/google-api.service.ts index 988c66d..c8ed8e5 100644 --- a/server/src/google-api/google-api.service.ts +++ b/server/src/google-api/google-api.service.ts @@ -121,6 +121,7 @@ export class GoogleApiService implements IGoogleApiService { timeMin: start, timeMax: end, timeZone, + calendarExpansionMax: 100, items: rooms.map((email) => { return { id: email,