fix: dropdown not closing is fixed (#15058)
* fix: Dropdown issues * CR fix Co-authored-by: balajisoundar <balaji@appsmith.com>
This commit is contained in:
parent
e2db190ed2
commit
d9d1c0c676
|
|
@ -93,7 +93,7 @@
|
||||||
"prismjs": "^1.27.0",
|
"prismjs": "^1.27.0",
|
||||||
"punycode": "^2.1.1",
|
"punycode": "^2.1.1",
|
||||||
"rc-pagination": "^3.1.3",
|
"rc-pagination": "^3.1.3",
|
||||||
"rc-select": "^12.1.10",
|
"rc-select": "13.2.1",
|
||||||
"rc-tree-select": "^4.4.0-alpha.2",
|
"rc-tree-select": "^4.4.0-alpha.2",
|
||||||
"re-reselect": "^3.4.0",
|
"re-reselect": "^3.4.0",
|
||||||
"react": "^16.12.0",
|
"react": "^16.12.0",
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,7 @@ function MultiTreeSelectComponent({
|
||||||
const {
|
const {
|
||||||
BackDrop,
|
BackDrop,
|
||||||
getPopupContainer,
|
getPopupContainer,
|
||||||
|
isOpen,
|
||||||
onKeyDown,
|
onKeyDown,
|
||||||
onOpen,
|
onOpen,
|
||||||
selectRef,
|
selectRef,
|
||||||
|
|
@ -284,6 +285,7 @@ function MultiTreeSelectComponent({
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
onClear={onClear}
|
onClear={onClear}
|
||||||
onDropdownVisibleChange={onDropdownVisibleChange}
|
onDropdownVisibleChange={onDropdownVisibleChange}
|
||||||
|
open={isOpen}
|
||||||
placeholder={placeholder}
|
placeholder={placeholder}
|
||||||
ref={selectRef}
|
ref={selectRef}
|
||||||
removeIcon={
|
removeIcon={
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,7 @@ function MultiSelectComponent({
|
||||||
const {
|
const {
|
||||||
BackDrop,
|
BackDrop,
|
||||||
getPopupContainer,
|
getPopupContainer,
|
||||||
|
isOpen,
|
||||||
onKeyDown,
|
onKeyDown,
|
||||||
onOpen,
|
onOpen,
|
||||||
selectRef,
|
selectRef,
|
||||||
|
|
@ -346,6 +347,7 @@ function MultiSelectComponent({
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
onDropdownVisibleChange={onDropdownVisibleChange}
|
onDropdownVisibleChange={onDropdownVisibleChange}
|
||||||
onFocus={onFocus}
|
onFocus={onFocus}
|
||||||
|
open={isOpen}
|
||||||
options={filteredOptions}
|
options={filteredOptions}
|
||||||
placeholder={placeholder || "select option(s)"}
|
placeholder={placeholder || "select option(s)"}
|
||||||
ref={selectRef}
|
ref={selectRef}
|
||||||
|
|
|
||||||
|
|
@ -136,6 +136,7 @@ function SingleSelectTreeComponent({
|
||||||
const {
|
const {
|
||||||
BackDrop,
|
BackDrop,
|
||||||
getPopupContainer,
|
getPopupContainer,
|
||||||
|
isOpen,
|
||||||
onKeyDown,
|
onKeyDown,
|
||||||
onOpen,
|
onOpen,
|
||||||
selectRef,
|
selectRef,
|
||||||
|
|
@ -283,6 +284,7 @@ function SingleSelectTreeComponent({
|
||||||
onChange={onSelectionChange}
|
onChange={onSelectionChange}
|
||||||
onClear={onClear}
|
onClear={onClear}
|
||||||
onDropdownVisibleChange={onDropdownVisibleChange}
|
onDropdownVisibleChange={onDropdownVisibleChange}
|
||||||
|
open={isOpen}
|
||||||
placeholder={placeholder}
|
placeholder={placeholder}
|
||||||
ref={selectRef}
|
ref={selectRef}
|
||||||
searchValue={filter}
|
searchValue={filter}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useCallback, useRef } from "react";
|
import React, { useCallback, useEffect, useRef, useState } from "react";
|
||||||
import { getMainCanvas } from "./WidgetUtils";
|
import { getMainCanvas } from "./WidgetUtils";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import Select from "rc-select";
|
import Select from "rc-select";
|
||||||
|
|
@ -22,12 +22,14 @@ const FOCUS_TIMEOUT = 500;
|
||||||
|
|
||||||
// TODO: Refactor More functionalities in MultiSelect, MultiTreeSelect and TreeSelect Components
|
// TODO: Refactor More functionalities in MultiSelect, MultiTreeSelect and TreeSelect Components
|
||||||
const useDropdown = ({ inputRef, renderMode }: useDropdownProps) => {
|
const useDropdown = ({ inputRef, renderMode }: useDropdownProps) => {
|
||||||
|
// This is to make the dropdown controlled
|
||||||
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
const popupContainer = useRef<HTMLElement>(getMainCanvas());
|
const popupContainer = useRef<HTMLElement>(getMainCanvas());
|
||||||
const selectRef = useRef<Select<LabelValueType[]> | null>(null);
|
const selectRef = useRef<Select<LabelValueType[]> | null>(null);
|
||||||
|
|
||||||
const closeBackDrop = useCallback(() => {
|
useEffect(() => {
|
||||||
if (selectRef.current) {
|
if (!popupContainer.current) {
|
||||||
selectRef.current.blur();
|
popupContainer.current = getMainCanvas();
|
||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|
@ -48,6 +50,7 @@ const useDropdown = ({ inputRef, renderMode }: useDropdownProps) => {
|
||||||
// When Dropdown is opened disable scrolling within the app except the list of options
|
// When Dropdown is opened disable scrolling within the app except the list of options
|
||||||
const onOpen = useCallback(
|
const onOpen = useCallback(
|
||||||
(open: boolean) => {
|
(open: boolean) => {
|
||||||
|
setIsOpen(open);
|
||||||
if (open) {
|
if (open) {
|
||||||
setTimeout(() => inputRef.current?.focus(), FOCUS_TIMEOUT);
|
setTimeout(() => inputRef.current?.focus(), FOCUS_TIMEOUT);
|
||||||
// for more context, the Element we attach to in view mode doesn't have an overflow style, so this only applies to edit mode.
|
// for more context, the Element we attach to in view mode doesn't have an overflow style, so this only applies to edit mode.
|
||||||
|
|
@ -58,15 +61,24 @@ const useDropdown = ({ inputRef, renderMode }: useDropdownProps) => {
|
||||||
if (popupContainer.current && renderMode === RenderModes.CANVAS) {
|
if (popupContainer.current && renderMode === RenderModes.CANVAS) {
|
||||||
popupContainer.current.style.overflowY = "auto";
|
popupContainer.current.style.overflowY = "auto";
|
||||||
}
|
}
|
||||||
|
selectRef.current?.blur();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[renderMode],
|
[renderMode],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const closeBackDrop = useCallback(() => {
|
||||||
|
if (selectRef.current) {
|
||||||
|
selectRef.current.blur();
|
||||||
|
onOpen(false);
|
||||||
|
}
|
||||||
|
}, [onOpen]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
BackDrop,
|
BackDrop,
|
||||||
getPopupContainer,
|
getPopupContainer,
|
||||||
onOpen,
|
onOpen,
|
||||||
|
isOpen,
|
||||||
selectRef,
|
selectRef,
|
||||||
onKeyDown,
|
onKeyDown,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -12749,19 +12749,7 @@ rc-resize-observer@^1.0.0:
|
||||||
rc-util "^5.0.0"
|
rc-util "^5.0.0"
|
||||||
resize-observer-polyfill "^1.5.1"
|
resize-observer-polyfill "^1.5.1"
|
||||||
|
|
||||||
rc-select@^12.1.10:
|
rc-select@13.2.1, rc-select@~13.2.1:
|
||||||
version "12.1.13"
|
|
||||||
resolved "https://registry.npmjs.org/rc-select/-/rc-select-12.1.13.tgz"
|
|
||||||
dependencies:
|
|
||||||
"@babel/runtime" "^7.10.1"
|
|
||||||
classnames "2.x"
|
|
||||||
rc-motion "^2.0.1"
|
|
||||||
rc-overflow "^1.0.0"
|
|
||||||
rc-trigger "^5.0.4"
|
|
||||||
rc-util "^5.9.8"
|
|
||||||
rc-virtual-list "^3.2.0"
|
|
||||||
|
|
||||||
rc-select@~13.2.1:
|
|
||||||
version "13.2.1"
|
version "13.2.1"
|
||||||
resolved "https://registry.npmjs.org/rc-select/-/rc-select-13.2.1.tgz"
|
resolved "https://registry.npmjs.org/rc-select/-/rc-select-13.2.1.tgz"
|
||||||
integrity sha512-L2cJFAjVEeDiNVa/dlOVKE79OUb0J7sUBvWN3Viav3XHcjvv9Ovn4D8J9QhBSlDXeGuczZ81CZI3BbdHD25+Gg==
|
integrity sha512-L2cJFAjVEeDiNVa/dlOVKE79OUb0J7sUBvWN3Viav3XHcjvv9Ovn4D8J9QhBSlDXeGuczZ81CZI3BbdHD25+Gg==
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user