From d24807e0e143a4d78bb79eb64acb6474b574649a Mon Sep 17 00:00:00 2001 From: Keith Williams Date: Mon, 12 Jan 2026 11:35:19 -0300 Subject: [PATCH] fix: make OOO team member select close after selection (#26736) * fix: make OOO team member select close after selection Replace the custom always-visible scrollable list with a proper Select component that closes after selection like a normal dropdown. The Select component uses onMenuScrollToBottom for infinite scroll and onInputChange for search functionality. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: also convert Team OOO member select to use Select component Both 'Select team member' sections now use the proper Select component that closes after selection. Removed unused useInViewObserver import. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: add menuPlacement='bottom' to Team OOO member select Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../CreateOrEditOutOfOfficeModal.tsx | 180 ++++++------------ apps/web/playwright/out-of-office.e2e.ts | 18 +- 2 files changed, 71 insertions(+), 127 deletions(-) diff --git a/apps/web/modules/settings/outOfOffice/CreateOrEditOutOfOfficeModal.tsx b/apps/web/modules/settings/outOfOffice/CreateOrEditOutOfOfficeModal.tsx index 6a18a7d03a..a5a847ab0d 100644 --- a/apps/web/modules/settings/outOfOffice/CreateOrEditOutOfOfficeModal.tsx +++ b/apps/web/modules/settings/outOfOffice/CreateOrEditOutOfOfficeModal.tsx @@ -5,7 +5,6 @@ import dayjs from "@calcom/dayjs"; import { Dialog } from "@calcom/features/components/controlled-dialog"; import { useCompatSearchParams } from "@calcom/lib/hooks/useCompatSearchParams"; import { useDebounce } from "@calcom/lib/hooks/useDebounce"; -import { useInViewObserver } from "@calcom/lib/hooks/useInViewObserver"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; import useMeQuery from "@calcom/trpc/react/hooks/useMeQuery"; @@ -73,12 +72,6 @@ export const CreateOrEditOutOfOfficeEntryModal = ({ label: member.name || member.username || "", avatarUrl: member.avatarUrl, })) || []; - const { ref: observerRefMember } = useInViewObserver(() => { - if (oooForMembers.hasNextPage && !oooForMembers.isFetching) { - oooForMembers.fetchNextPage(); - } - }, document.querySelector('[role="dialog"]')); - const [searchRedirectMember, setSearchRedirectMember] = useState(""); const debouncedSearchRedirect = useDebounce(searchRedirectMember, 500); const redirectMembers = trpc.viewer.teams.legacyListMembers.useInfiniteQuery( @@ -107,11 +100,6 @@ export const CreateOrEditOutOfOfficeEntryModal = ({ label: member.name || member.username || "", avatarUrl: member.avatarUrl, })) || []; - const { ref: observerRefRedirect } = useInViewObserver(() => { - if (redirectMembers.hasNextPage && !redirectMembers.isFetching) { - redirectMembers.fetchNextPage(); - } - }, document.querySelector('[role="dialog"]')); const { data: outOfOfficeReasonList, isPending: isReasonListPending } = trpc.viewer.ooo.outOfOfficeReasonList.useQuery(); @@ -235,68 +223,37 @@ export const CreateOrEditOutOfOfficeEntryModal = ({ {/* In case of Team, Select Member for whom OOO is created */} {oooType === OutOfOfficeTab.TEAM && ( - <> -
- -
- + + ( + setValue("forUserId", member.value, { shouldDirty: true })} - /> - {member.label} -
- - ))} - {!currentlyEditingOutOfOfficeEntry && ( -
- -
- )} -
- - - + )} + /> + )}
@@ -435,55 +392,36 @@ export const CreateOrEditOutOfOfficeEntryModal = ({ {profileRedirect && (
-
- setSearchRedirectMember(e.target.value)} - value={searchRedirectMember} - /> -
- {redirectToMemberListOptions - .filter((member) => member.value !== getValues("forUserId")) - .map((member) => ( - - ))} -
- -
-
-
+ ( +