@keycloakify/keycloak-admin-ui
Version:
Repackaged Keycloak Admin UI
30 lines • 1.78 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { useEffect, useRef } from "react";
import { Icon } from "@patternfly/react-core";
import { CaretDownIcon } from "@patternfly/react-icons";
import "./dropdown-panel.css";
const DropdownPanel = ({ buttonText, children, setSearchDropdownOpen, searchDropdownOpen, marginRight, width, }) => {
const dropdownRef = useRef(null);
useEffect(() => {
const handleClickOutside = (event) => {
if (dropdownRef.current &&
!dropdownRef.current.contains(event.target)) {
setSearchDropdownOpen(false);
}
};
document.addEventListener("mousedown", handleClickOutside);
return () => document.removeEventListener("mousedown", handleClickOutside);
}, [setSearchDropdownOpen]);
useEffect(() => {
const handleVisibilityChange = () => {
if (document.visibilityState === "hidden") {
setSearchDropdownOpen(false);
}
};
document.addEventListener("visibilitychange", handleVisibilityChange);
return () => document.removeEventListener("visibilitychange", handleVisibilityChange);
}, [setSearchDropdownOpen]);
return (_jsxs("span", { ref: dropdownRef, children: [_jsxs("button", { className: "kc-dropdown-panel", onClick: () => setSearchDropdownOpen(!searchDropdownOpen), "aria-label": buttonText, style: { width, marginRight }, "data-testid": "dropdown-panel-btn", children: [buttonText, _jsx(Icon, { className: "kc-dropdown-panel-icon", children: _jsx(CaretDownIcon, {}) })] }), searchDropdownOpen && (_jsx("div", { className: "kc-dropdown-panel-content", children: children }))] }));
};
export default DropdownPanel;
//# sourceMappingURL=DropdownPanel.js.map