From d1bcf7e8f41a4d1b3fa9e020e5a079ea682f5f35 Mon Sep 17 00:00:00 2001 From: Vamsi krishna Date: Mon, 6 Jan 2025 19:57:52 +0530 Subject: [PATCH 1/2] fix: dropdown visibility on scroll to bottom --- .../components/onboarding/invite-members.tsx | 88 ++++++++++--------- 1 file changed, 46 insertions(+), 42 deletions(-) diff --git a/web/core/components/onboarding/invite-members.tsx b/web/core/components/onboarding/invite-members.tsx index 695b6f24813..458c914d92f 100644 --- a/web/core/components/onboarding/invite-members.tsx +++ b/web/core/components/onboarding/invite-members.tsx @@ -15,6 +15,7 @@ import { useForm, } from "react-hook-form"; // icons +import { usePopper } from "react-popper"; import { Check, ChevronDown, Plus, XCircle } from "lucide-react"; import { Listbox, Transition } from "@headlessui/react"; // types @@ -104,9 +105,10 @@ const InviteMemberInput: React.FC = (props) => { const buttonRef = useRef(null); const dropdownRef = useRef(null); - const [isDropdownOpen, setIsDropdownOpen] = useState(false); + const [referenceElement, setReferenceElement] = useState(null); + const [popperElement, setPopperElement] = useState(null); - useDynamicDropdownPosition(isDropdownOpen, () => setIsDropdownOpen(false), buttonRef, dropdownRef); + // useDynamicDropdownPosition(isDropdownOpen, () => setIsDropdownOpen(false), buttonRef, dropdownRef); const email = watch(`emails.${index}.email`); @@ -134,6 +136,18 @@ const InviteMemberInput: React.FC = (props) => { } }; + const { styles, attributes } = usePopper(referenceElement, popperElement, { + placement: "bottom-end", + modifiers: [ + { + name: "preventOverflow", + options: { + padding: 12, + }, + }, + ], + }); + return (
@@ -177,15 +191,13 @@ const InviteMemberInput: React.FC = (props) => { value={value} onChange={(val) => { onChange(val); - setIsDropdownOpen(false); setValue(`emails.${index}.role_active`, true); }} className="w-full flex-shrink-0 text-left" > setIsDropdownOpen((prev) => !prev)} + ref={setReferenceElement} className="flex w-full items-center justify-between gap-1 rounded-md px-2.5 py-2 text-sm border-[0.5px] border-onboarding-border-100" > = (props) => { /> - - +
-
- {Object.entries(ROLE_DETAILS).map(([key, value]) => ( - - `cursor-pointer select-none truncate rounded px-1 py-1.5 ${ - active || selected ? "bg-onboarding-background-400/40" : "" - } ${selected ? "text-onboarding-text-100" : "text-custom-text-200"}` - } - > - {({ selected }) => ( -
-
-
{value.title}
-
{value.description}
-
- {selected && } + {Object.entries(ROLE_DETAILS).map(([key, value]) => ( + + `cursor-pointer select-none truncate rounded px-1 py-1.5 ${ + active || selected ? "bg-onboarding-background-400/40" : "" + } ${selected ? "text-onboarding-text-100" : "text-custom-text-200"}` + } + > + {({ selected }) => ( +
+
+
{value.title}
+
{value.description}
- )} - - ))} -
- - + {selected && } +
+ )} +
+ ))} +
+ )} /> From b6ee1ada27b9b87057f27a9d153c3d0b4e3190f0 Mon Sep 17 00:00:00 2001 From: Vamsi krishna Date: Mon, 6 Jan 2025 20:06:32 +0530 Subject: [PATCH 2/2] chore: removed unused variables --- web/core/components/onboarding/invite-members.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/web/core/components/onboarding/invite-members.tsx b/web/core/components/onboarding/invite-members.tsx index 458c914d92f..27b15610ee6 100644 --- a/web/core/components/onboarding/invite-members.tsx +++ b/web/core/components/onboarding/invite-members.tsx @@ -17,7 +17,7 @@ import { // icons import { usePopper } from "react-popper"; import { Check, ChevronDown, Plus, XCircle } from "lucide-react"; -import { Listbox, Transition } from "@headlessui/react"; +import { Listbox } from "@headlessui/react"; // types import { IUser, IWorkspace } from "@plane/types"; // ui @@ -29,7 +29,6 @@ import { ROLE, ROLE_DETAILS } from "@/constants/workspace"; import { getUserRole } from "@/helpers/user.helper"; // hooks import { useEventTracker } from "@/hooks/store"; -import useDynamicDropdownPosition from "@/hooks/use-dynamic-dropdown"; // plane web constants import { EUserPermissions } from "@/plane-web/constants/user-permissions"; // services @@ -102,14 +101,9 @@ const InviteMemberInput: React.FC = (props) => { watch, } = props; - const buttonRef = useRef(null); - const dropdownRef = useRef(null); - const [referenceElement, setReferenceElement] = useState(null); const [popperElement, setPopperElement] = useState(null); - // useDynamicDropdownPosition(isDropdownOpen, () => setIsDropdownOpen(false), buttonRef, dropdownRef); - const email = watch(`emails.${index}.email`); const emailOnChange = (event: React.ChangeEvent) => {