@lendi/navbar 7.30.0 → 7.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2983,23 +2983,33 @@ var NavDropdown = _ref2 => {
2983
2983
  props = _objectWithoutProperties(_ref2, _excluded$4);
2984
2984
  var globalProps = utils$1.filterGlobalProps(props);
2985
2985
  var dropdownRef = React.useRef(null);
2986
+ var dropdownGroupRef = React.useRef(null);
2986
2987
  var [isOpen, setIsOpen] = React.useState(false);
2987
2988
  var handleClick = event => {
2988
2989
  setIsOpen(!isOpen);
2989
2990
  onClick === null || onClick === void 0 || onClick(event, !isOpen);
2990
2991
  };
2992
+ var pageClickEvent = event => {
2993
+ var target = event.target;
2994
+
2995
+ /**
2996
+ * When button clicked, global click event will be fired as well, but after the button click event.
2997
+ * So we need prevent global event fired when user click button.
2998
+ *
2999
+ * When the button click event fired, the icon will be changed. So event target will be the unmounted svg.
3000
+ * That unmounted svg will hack the contains logic. So we do mount check on line.67
3001
+ */
3002
+ if (!target.isConnected) return;
3003
+ if (dropdownRef.current && dropdownGroupRef.current && !dropdownGroupRef.current.contains(target)) {
3004
+ setIsOpen(false);
3005
+ }
3006
+ };
3007
+ var escapeEvent = event => {
3008
+ if (event.key === 'Escape' && isOpen) {
3009
+ setIsOpen(!isOpen);
3010
+ }
3011
+ };
2991
3012
  React.useEffect(() => {
2992
- var pageClickEvent = event => {
2993
- if (dropdownRef.current !== null && !dropdownRef.current.contains(event.target)) {
2994
- setIsOpen(!isOpen);
2995
- }
2996
- };
2997
- var escapeEvent = event => {
2998
- if (event.key === 'Escape' && isOpen) {
2999
- setIsOpen(!isOpen);
3000
- }
3001
- };
3002
-
3003
3013
  // If the item is open listen for clicks or escape key
3004
3014
  if (isOpen) {
3005
3015
  window.addEventListener('click', pageClickEvent);
@@ -3009,6 +3019,7 @@ var NavDropdown = _ref2 => {
3009
3019
  window.removeEventListener('click', pageClickEvent);
3010
3020
  window.removeEventListener('keydown', escapeEvent);
3011
3021
  };
3022
+ // eslint-disable-next-line react-hooks/exhaustive-deps
3012
3023
  }, [isOpen]);
3013
3024
  return (
3014
3025
  /*#__PURE__*/
@@ -3017,6 +3028,7 @@ var NavDropdown = _ref2 => {
3017
3028
  style: {
3018
3029
  position: 'relative'
3019
3030
  },
3031
+ ref: dropdownGroupRef,
3020
3032
  children: [/*#__PURE__*/jsxRuntime.jsx(NavButton, {
3021
3033
  isOpen: isOpen,
3022
3034
  onClick: e => handleClick(e),
@@ -1978,21 +1978,20 @@ var _templateObject$3, _templateObject2$1, _templateObject$2, _templateObject$1,
1978
1978
  var {minWidth: minWidth} = _ref;
1979
1979
  return minWidth && "min-width: ".concat(minWidth);
1980
1980
  }), (() => styled.css([ "top:calc(100% + ", ");" ], utils$1.pxToRem(HeaderPaddingSmall))), (() => styled.css([ "", "" ], breakpoint.gte("md")(_templateObject$2 || (_templateObject$2 = _taggedTemplateLiteral([ "\n top: calc(100% + ", ");\n " ])), utils$1.pxToRem(HeaderPaddingLarge))))), NavDropdown = _ref2 => {
1981
- var {label: label, children: children, onClick: onClick, minDropdownWidth: minDropdownWidth, align: align = "left"} = _ref2, props = _objectWithoutProperties(_ref2, _excluded$4), globalProps = utils$1.filterGlobalProps(props), dropdownRef = React.useRef(null), [isOpen, setIsOpen] = React.useState(!1);
1982
- return React.useEffect((() => {
1983
- var pageClickEvent = event => {
1984
- null === dropdownRef.current || dropdownRef.current.contains(event.target) || setIsOpen(!isOpen);
1985
- }, escapeEvent = event => {
1986
- "Escape" === event.key && isOpen && setIsOpen(!isOpen);
1987
- };
1988
- return isOpen && (window.addEventListener("click", pageClickEvent), window.addEventListener("keydown", escapeEvent)),
1989
- () => {
1990
- window.removeEventListener("click", pageClickEvent), window.removeEventListener("keydown", escapeEvent);
1991
- };
1992
- }), [ isOpen ]), jsxRuntime.jsxs("div", _objectSpread2(_objectSpread2({}, globalProps), {}, {
1981
+ var {label: label, children: children, onClick: onClick, minDropdownWidth: minDropdownWidth, align: align = "left"} = _ref2, props = _objectWithoutProperties(_ref2, _excluded$4), globalProps = utils$1.filterGlobalProps(props), dropdownRef = React.useRef(null), dropdownGroupRef = React.useRef(null), [isOpen, setIsOpen] = React.useState(!1), pageClickEvent = event => {
1982
+ var target = event.target;
1983
+ target.isConnected && dropdownRef.current && dropdownGroupRef.current && !dropdownGroupRef.current.contains(target) && setIsOpen(!1);
1984
+ }, escapeEvent = event => {
1985
+ "Escape" === event.key && isOpen && setIsOpen(!isOpen);
1986
+ };
1987
+ return React.useEffect((() => (isOpen && (window.addEventListener("click", pageClickEvent),
1988
+ window.addEventListener("keydown", escapeEvent)), () => {
1989
+ window.removeEventListener("click", pageClickEvent), window.removeEventListener("keydown", escapeEvent);
1990
+ })), [ isOpen ]), jsxRuntime.jsxs("div", _objectSpread2(_objectSpread2({}, globalProps), {}, {
1993
1991
  style: {
1994
1992
  position: "relative"
1995
1993
  },
1994
+ ref: dropdownGroupRef,
1996
1995
  children: [ jsxRuntime.jsx(NavButton, {
1997
1996
  isOpen: isOpen,
1998
1997
  onClick: e => {
@@ -2950,23 +2950,33 @@ var NavDropdown = _ref2 => {
2950
2950
  props = _objectWithoutProperties(_ref2, _excluded$4);
2951
2951
  var globalProps = filterGlobalProps(props);
2952
2952
  var dropdownRef = useRef(null);
2953
+ var dropdownGroupRef = useRef(null);
2953
2954
  var [isOpen, setIsOpen] = useState(false);
2954
2955
  var handleClick = event => {
2955
2956
  setIsOpen(!isOpen);
2956
2957
  onClick === null || onClick === void 0 || onClick(event, !isOpen);
2957
2958
  };
2959
+ var pageClickEvent = event => {
2960
+ var target = event.target;
2961
+
2962
+ /**
2963
+ * When button clicked, global click event will be fired as well, but after the button click event.
2964
+ * So we need prevent global event fired when user click button.
2965
+ *
2966
+ * When the button click event fired, the icon will be changed. So event target will be the unmounted svg.
2967
+ * That unmounted svg will hack the contains logic. So we do mount check on line.67
2968
+ */
2969
+ if (!target.isConnected) return;
2970
+ if (dropdownRef.current && dropdownGroupRef.current && !dropdownGroupRef.current.contains(target)) {
2971
+ setIsOpen(false);
2972
+ }
2973
+ };
2974
+ var escapeEvent = event => {
2975
+ if (event.key === 'Escape' && isOpen) {
2976
+ setIsOpen(!isOpen);
2977
+ }
2978
+ };
2958
2979
  useEffect(() => {
2959
- var pageClickEvent = event => {
2960
- if (dropdownRef.current !== null && !dropdownRef.current.contains(event.target)) {
2961
- setIsOpen(!isOpen);
2962
- }
2963
- };
2964
- var escapeEvent = event => {
2965
- if (event.key === 'Escape' && isOpen) {
2966
- setIsOpen(!isOpen);
2967
- }
2968
- };
2969
-
2970
2980
  // If the item is open listen for clicks or escape key
2971
2981
  if (isOpen) {
2972
2982
  window.addEventListener('click', pageClickEvent);
@@ -2976,6 +2986,7 @@ var NavDropdown = _ref2 => {
2976
2986
  window.removeEventListener('click', pageClickEvent);
2977
2987
  window.removeEventListener('keydown', escapeEvent);
2978
2988
  };
2989
+ // eslint-disable-next-line react-hooks/exhaustive-deps
2979
2990
  }, [isOpen]);
2980
2991
  return (
2981
2992
  /*#__PURE__*/
@@ -2984,6 +2995,7 @@ var NavDropdown = _ref2 => {
2984
2995
  style: {
2985
2996
  position: 'relative'
2986
2997
  },
2998
+ ref: dropdownGroupRef,
2987
2999
  children: [/*#__PURE__*/jsx(NavButton, {
2988
3000
  isOpen: isOpen,
2989
3001
  onClick: e => handleClick(e),
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lendi/navbar",
3
3
  "access": "restricted",
4
- "version": "7.30.0",
4
+ "version": "7.31.1",
5
5
  "license": "ISC",
6
6
  "source": "src/index.tsx",
7
7
  "main": "dist/navbar.cjs.js",
@@ -40,7 +40,7 @@
40
40
  "@lendi-ui/typography": "^5.13.11-beta.0",
41
41
  "@lendi-ui/utils": "^6.0.2-beta.1",
42
42
  "@lendi/analytics": "^4.6.0",
43
- "@lendi/chat": "^1.12.0",
43
+ "@lendi/chat": "^1.13.0",
44
44
  "@lendi/lala-utils": "^11.2.0",
45
45
  "@lendi/launchdarkly": "^0.1.7",
46
46
  "@lendi/lendigroup-leads-library": "^3.2.1",