@@ -11,6 +11,7 @@ import { GroupResponses } from "@/components/availability/group-responses";
1111import { AvailabilityHeader } from "@/components/availability/header/availability-header" ;
1212import { PersonalAvailability } from "@/components/availability/personal-availability" ;
1313import {
14+ deduplicateRooms ,
1415 groupRawRoomsByKey ,
1516 RoomRecommendationSettings ,
1617} from "@/components/availability/room-recommendations" ;
@@ -45,6 +46,8 @@ import { useAvailabilityStore } from "@/store/useAvailabilityStore";
4546import { MobilePersonalAvailabilitySidebar } from "../nav/mobile-personal-availability" ;
4647import { PersonalAvailabilitySidebar } from "../nav/personal-availability-sidebar" ;
4748import { MobileGroupResponses } from "./mobile-group-responses" ;
49+ import { MobileRoomRecommendations } from "./mobile-room-recommendations" ;
50+ import { MobileRoomWheelPicker } from "./mobile-room-wheel-picker" ;
4851import { MobileScheduleSettings } from "./mobile-schedule-settings" ;
4952
5053const LG_UP_MEDIA = "(min-width: 1024px)" ;
@@ -239,6 +242,7 @@ export function Availability({
239242 } = useRoomRecommendations ( availabilityDates ) ;
240243
241244 const [ selectedRoomIds , setSelectedRoomIds ] = useState < string [ ] > ( [ ] ) ;
245+ const [ isMobileRoomsDrawerOpen , setIsMobileRoomsDrawerOpen ] = useState ( false ) ;
242246
243247 const showRoomPreviews =
244248 availabilityView === "group" || availabilityView === "schedule" ;
@@ -254,6 +258,17 @@ export function Availability({
254258 [ studyRooms ] ,
255259 ) ;
256260
261+ const mobileRoomCount = useMemo (
262+ ( ) => deduplicateRooms ( studyRooms ) . length ,
263+ [ studyRooms ] ,
264+ ) ;
265+
266+ useEffect ( ( ) => {
267+ if ( availabilityView !== "group" ) {
268+ setIsMobileRoomsDrawerOpen ( false ) ;
269+ }
270+ } , [ availabilityView ] ) ;
271+
257272 const handleImportSlotsFromMeeting = useCallback (
258273 ( {
259274 meetingAvailabilities,
@@ -430,13 +445,23 @@ export function Availability({
430445 } , [ router , returnToPath , setAvailabilityView , user ] ) ;
431446
432447 const handleMobileOpenAttendees = useCallback ( ( ) => {
448+ setIsMobileRoomsDrawerOpen ( false ) ;
433449 setIsMobileDrawerOpen ( true ) ;
434450 } , [ setIsMobileDrawerOpen ] ) ;
435451
436452 const handleMobileSchedule = useCallback ( ( ) => {
437453 setAvailabilityView ( "schedule" ) ;
438454 } , [ setAvailabilityView ] ) ;
439455
456+ const handleMobileOpenRooms = useCallback ( ( ) => {
457+ setIsMobileDrawerOpen ( false ) ;
458+ setIsMobileRoomsDrawerOpen ( true ) ;
459+ } , [ setIsMobileDrawerOpen ] ) ;
460+
461+ const handleCloseMobileRooms = useCallback ( ( ) => {
462+ setIsMobileRoomsDrawerOpen ( false ) ;
463+ } , [ ] ) ;
464+
440465 return (
441466 < StudyRoomHoverProvider
442467 showRoomPreviews = { showRoomPreviews }
@@ -582,17 +607,46 @@ export function Availability({
582607 onOpenAttendees = { handleMobileOpenAttendees }
583608 />
584609 ) : (
585- < MobileGroupResponses
586- isOwner = { isMeetingOwner }
587- respondedMembersCount = { Math . max (
588- 0 ,
589- members . length - pendingMembers . length ,
590- ) }
591- pendingMembersCount = { pendingMembers . length }
592- onAddAvailability = { handleMobileAddAvailability }
593- onOpenAttendees = { handleMobileOpenAttendees }
594- onSchedule = { handleMobileSchedule }
595- />
610+ < >
611+ { hasSearchedRooms &&
612+ studyRooms . length > 0 &&
613+ ! isMobileRoomsDrawerOpen && (
614+ < MobileRoomWheelPicker
615+ rawRooms = { studyRooms }
616+ rawRoomsByKey = { rawRoomsByKey }
617+ filters = { roomFilters }
618+ selectedRoomIds = { selectedRoomIds }
619+ onSelectedRoomIdsChange = { setSelectedRoomIds }
620+ />
621+ ) }
622+ < MobileGroupResponses
623+ isOwner = { isMeetingOwner }
624+ respondedMembersCount = { Math . max (
625+ 0 ,
626+ members . length - pendingMembers . length ,
627+ ) }
628+ pendingMembersCount = { pendingMembers . length }
629+ roomCount = { mobileRoomCount }
630+ hasSearchedRooms = { hasSearchedRooms }
631+ onAddAvailability = { handleMobileAddAvailability }
632+ onOpenAttendees = { handleMobileOpenAttendees }
633+ onOpenRooms = { handleMobileOpenRooms }
634+ onSchedule = { handleMobileSchedule }
635+ />
636+ < MobileRoomRecommendations
637+ open = { isMobileRoomsDrawerOpen }
638+ onClose = { handleCloseMobileRooms }
639+ rawRooms = { studyRooms }
640+ hasSearched = { hasSearchedRooms }
641+ filters = { roomFilters }
642+ onFiltersChange = { setRoomFilters }
643+ onShowBestRooms = { handleShowBestRooms }
644+ isLoading = { isRoomsLoading }
645+ errorMessage = { studyRoomsError }
646+ selectedRoomIds = { selectedRoomIds }
647+ onSelectedRoomIdsChange = { setSelectedRoomIds }
648+ />
649+ </ >
596650 ) }
597651 </ div >
598652 </ div >
0 commit comments