Skip to content

Commit

Permalink
fix(components): Put Popover inside a portal (#2360)
Browse files Browse the repository at this point in the history
* Put Popover inside a portal

* Simplify logic

* Add back in line breaks

* Add back one more empty line
  • Loading branch information
Aiden-Brine authored Feb 6, 2025
1 parent 2579026 commit 4798047
Showing 1 changed file with 28 additions and 30 deletions.
58 changes: 28 additions & 30 deletions packages/components/src/Popover/Popover.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import React, { CSSProperties, useState } from "react";
import { usePopper } from "react-popper";
import { useRefocusOnActivator } from "@jobber/hooks/useRefocusOnActivator";
import classnames from "classnames";
import ReactDOM from "react-dom";
import classes from "./Popover.module.css";
import { ButtonDismiss } from "../ButtonDismiss";

Expand Down Expand Up @@ -86,37 +87,34 @@ export function Popover({
UNSAFE_className.dismissButtonContainer,
);
const arrowClassNames = classnames(classes.arrow, UNSAFE_className.arrow);

return (
<>
{open && (
<div
role="dialog"
data-elevation={"elevated"}
ref={setPopperElement}
style={{ ...popperStyles.popper, ...(UNSAFE_style.container ?? {}) }}
className={popoverClassNames}
{...attributes.popper}
data-testid="popover-container"
>
<div
className={dismissButtonClassNames}
style={UNSAFE_style.dismissButtonContainer ?? {}}
data-testid="popover-dismiss-button-container"
>
<ButtonDismiss onClick={onRequestClose} ariaLabel="Close dialog" />
</div>
{children}
<div
ref={setArrowElement}
className={arrowClassNames}
style={{ ...popperStyles.arrow, ...(UNSAFE_style.arrow ?? {}) }}
data-testid="popover-arrow"
/>
</div>
)}
</>
const popoverContent = (
<div
role="dialog"
data-elevation={"elevated"}
ref={setPopperElement}
style={{ ...popperStyles.popper, ...(UNSAFE_style.container ?? {}) }}
className={popoverClassNames}
{...attributes.popper}
data-testid="popover-container"
>
<div
className={dismissButtonClassNames}
style={UNSAFE_style.dismissButtonContainer ?? {}}
data-testid="popover-dismiss-button-container"
>
<ButtonDismiss onClick={onRequestClose} ariaLabel="Close dialog" />
</div>
{children}
<div
ref={setArrowElement}
className={arrowClassNames}
style={{ ...popperStyles.arrow, ...(UNSAFE_style.arrow ?? {}) }}
data-testid="popover-arrow"
/>
</div>
);

return <>{open && ReactDOM.createPortal(popoverContent, document.body)}</>;
}

function buildModifiers(arrowElement: HTMLElement | undefined | null) {
Expand Down

0 comments on commit 4798047

Please sign in to comment.