diff --git a/frontend/src/metabase/components/OnClickOutsideWrapper.jsx b/frontend/src/metabase/components/OnClickOutsideWrapper.jsx index 5c5ccdd4a5bbcc224f6b2f1143303201ec07c326..7a972d73ec8c0bee92630b34eb954b946b2291bf 100644 --- a/frontend/src/metabase/components/OnClickOutsideWrapper.jsx +++ b/frontend/src/metabase/components/OnClickOutsideWrapper.jsx @@ -1,5 +1,5 @@ import React, { Component, PropTypes } from "react"; -import { findDOMNode } from "react-dom"; +import ReactDOM from "react-dom"; // keep track of the order popovers were opened so we only close the last one when clicked outside const popoverStack = []; @@ -21,10 +21,9 @@ export default class OnClickOutsideWrapper extends Component { this._timeout = setTimeout(() => { popoverStack.push(this); - // HACK: set the z-index of the parent element to ensure it's always on top - // NOTE: this actually doesn"t seem to be working correctly for - // popovers since PopoverBody creates a stacking context - findDOMNode(this).parentNode.classList.add('zF'); + // HACK: set the z-index of the parent element to ensure it"s always on top + // NOTE: this actually doesn"t seem to be working correctly for popovers since PopoverBody creates a stacking context + ReactDOM.findDOMNode(this).parentNode.style.zIndex = popoverStack.length + 2; // HACK: add 2 to ensure it"s in front of main and nav elements if (this.props.dismissOnEscape) { document.addEventListener("keydown", this._handleKeyPress, false); @@ -39,7 +38,6 @@ export default class OnClickOutsideWrapper extends Component { document.removeEventListener("keydown", this._handleKeyPress, false); window.removeEventListener("click", this._handleClick, true); clearTimeout(this._timeout); - findDOMNode(this).parentNode.classList.remove('zF'); // remove from the stack after a delay, if it is removed through some other // means this will happen too early causing parent modal to close @@ -52,7 +50,7 @@ export default class OnClickOutsideWrapper extends Component { } _handleClick = (e) => { - if (!findDOMNode(this).contains(e.target)) { + if (!ReactDOM.findDOMNode(this).contains(e.target)) { setTimeout(this._handleDismissal, 0); } } diff --git a/frontend/src/metabase/css/components/modal.css b/frontend/src/metabase/css/components/modal.css index 3ba7b2590a623b533f3afee6839c7c59d54ccd90..ba111df10102426b27652f3c19f14f690d0e4c79 100644 --- a/frontend/src/metabase/css/components/modal.css +++ b/frontend/src/metabase/css/components/modal.css @@ -1,3 +1,7 @@ +.ModalContainer { + z-index: 3; +} + .Modal { margin: auto; width: 640px; diff --git a/frontend/src/metabase/css/home.css b/frontend/src/metabase/css/home.css index d99f32ca19fe929b5330e2846516020137b066eb..4e301f009750f23d0f3afde5ba30955f0bb5028a 100644 --- a/frontend/src/metabase/css/home.css +++ b/frontend/src/metabase/css/home.css @@ -1,3 +1,7 @@ +.Nav { + z-index: 3; +} + .CheckBg { background-image: url('/app/components/icons/assets/header_rect.svg'); background-repeat: repeat; @@ -51,7 +55,9 @@ .NavDropdown { position: relative; } - +.NavDropdown.open { + z-index: 100; +} .NavDropdown .NavDropdown-content { display: none; } diff --git a/frontend/src/metabase/nav/containers/Navbar.jsx b/frontend/src/metabase/nav/containers/Navbar.jsx index db2831cca8323641fb8e2732cee9beb09035880f..61170f1a24c71b975448ca7fd342a17864adb24b 100644 --- a/frontend/src/metabase/nav/containers/Navbar.jsx +++ b/frontend/src/metabase/nav/containers/Navbar.jsx @@ -106,7 +106,7 @@ export default class Navbar extends Component { renderMainNav() { return ( - <nav className={cx("CheckBg CheckBg-offset z4 relative bg-brand sm-py2 sm-py1 xl-py3", this.props.className)}> + <nav className={cx("Nav CheckBg CheckBg-offset relative bg-brand sm-py2 sm-py1 xl-py3", this.props.className)}> <ul className="pl4 pr1 flex align-center"> <li> <Link to="/" data-metabase-event={"Navbar;Logo"} className="NavItem cursor-pointer text-white flex align-center my1 transition-background"> @@ -115,11 +115,7 @@ export default class Navbar extends Component { </li> <li className="pl3"> <DashboardsDropdown {...this.props}> - <a - className={cx("NavDropdown-button NavItem text-white text-bold cursor-pointer px2 flex align-center transition-background", {"NavItem--selected": this.isActive("/dash/")})} - data-metabase-event={"Navbar;Dashboard Dropdown;Toggle"} - style={this.styles.navButton} - > + <a data-metabase-event={"Navbar;Dashboard Dropdown;Toggle"} style={this.styles.navButton} className={cx("NavDropdown-button NavItem text-white text-bold cursor-pointer px2 flex align-center transition-background", {"NavItem--selected": this.isActive("/dash/")})}> <span className="NavDropdown-button-layer"> Dashboards <Icon className="ml1" name={'chevrondown'} size={8}></Icon>