import * as React from "react"; import * as ReactDOM from "react-dom"; import { ICivilContext, CivilContext } from "@joincivil/components"; import { copyToClipboard, getFormattedEthAddress } from "@joincivil/utils"; import { buttonSizes, Button } from "@joincivil/elements"; import { StyledNavDrawer, NavDrawerSection, NavDrawerSectionHeader, UserAddress, CopyButton } from "./styledComponents"; import { NavDrawerUserAddessText, NavDrawerCopyBtnText } from "./textComponents"; import { routes } from "../../constants"; export interface NavDrawerProps { userAccountElRef?: any; handleOutsideClick(): void; } export const NavDrawerComponent: React.FunctionComponent = props => { const civilContext = React.useContext(CivilContext); const civilUser = civilContext.currentUser; const userEthAddress = civilUser && civilUser.ethAddress; async function onLogoutPressed(): Promise { civilContext.auth.logout(); } if (!userEthAddress) { return <>; } return ( {getFormattedEthAddress(userEthAddress)} copyToClipboard(userEthAddress)}> ); }; class NavDrawer extends React.Component { public bucket: HTMLDivElement = document.createElement("div"); public componentDidMount(): void { document.body.appendChild(this.bucket); document.addEventListener("mousedown", this.handleClick, false); } public componentWillUnmount(): void { document.body.removeChild(this.bucket); document.removeEventListener("mousedown", this.handleClick, false); } public render(): React.ReactPortal { return ReactDOM.createPortal(, this.bucket); } private handleClick = (event: any) => { const toggleEl = this.props.userAccountElRef && this.props.userAccountElRef.current; if ( this.bucket.contains(event.target) || ((toggleEl && toggleEl.contains(event.target)) || event.target === toggleEl) ) { return; } this.props.handleOutsideClick(); }; } export default NavDrawer;