close account menu after nav to account settings

This commit is contained in:
gabrielburnworth 2017-10-04 00:50:20 -07:00
parent 3d348455ba
commit abb806a149
4 changed files with 56 additions and 7 deletions

View file

@ -0,0 +1,35 @@
import * as React from "react";
import { mount, shallow } from "enzyme";
import { AdditionalMenu } from "../additional_menu";
describe("AdditionalMenu", () => {
it("renders the account menu", () => {
const wrapper = mount(<AdditionalMenu
logout={jest.fn()}
close={jest.fn()} />);
const text = wrapper.text();
expect(text).toContain("Account Settings");
expect(text).toContain("Set Page to English");
expect(text).toContain("Documentation");
expect(text).toContain("Logout");
expect(text).toContain("VERSION");
});
it("closes the account menu upon nav", () => {
const close = jest.fn();
const wrapper = shallow(<AdditionalMenu
logout={jest.fn()}
close={(x) => () => close(x)} />);
wrapper.find("Link").first().simulate("click");
expect(close).toHaveBeenCalledWith("accountMenuOpen");
});
it("logs out", () => {
const logout = jest.fn();
const wrapper = shallow(<AdditionalMenu
logout={logout}
close={jest.fn()} />);
wrapper.find("a").at(1).simulate("click");
expect(logout).toHaveBeenCalled();
});
});

View file

@ -2,10 +2,11 @@ import * as React from "react";
import { Link } from "react-router";
import { t } from "i18next";
import { LangToggle } from "./lang_toggle";
import { AccountMenuProps } from "./interfaces";
export const AdditionalMenu = (logout: () => void) => {
export const AdditionalMenu = (props: AccountMenuProps) => {
return <div className="nav-additional-menu">
<Link to="/app/account">
<Link to="/app/account" onClick={props.close("accountMenuOpen")}>
<i className="fa fa-cog"></i>
{t("Account Settings")}
</Link>
@ -17,7 +18,7 @@ export const AdditionalMenu = (logout: () => void) => {
</a>
</div>
<div>
<a onClick={logout}>
<a onClick={props.logout}>
<i className="fa fa-sign-out"></i>
{t("Logout")}
</a>

View file

@ -21,7 +21,8 @@ export class NavBar extends React.Component<NavBarProps, Partial<NavBarState>> {
state: NavBarState = {
mobileMenuOpen: false,
tickerListOpen: false
tickerListOpen: false,
accountMenuOpen: false
};
logout = () => Session.clear();
@ -49,7 +50,7 @@ export class NavBar extends React.Component<NavBarProps, Partial<NavBarState>> {
updatePageInfo(pageName);
const { toggle, close } = this;
const { mobileMenuOpen, tickerListOpen } = this.state;
const { mobileMenuOpen, tickerListOpen, accountMenuOpen } = this.state;
const { logs } = this.props;
return (
@ -75,9 +76,15 @@ export class NavBar extends React.Component<NavBarProps, Partial<NavBarState>> {
<Popover
inline
interactionKind={PopoverInteractionKind.HOVER}
target={<div className="nav-name">{firstName}</div>}
target={
<div className="nav-name"
onClick={this.toggle("accountMenuOpen")}>
{firstName}
</div>}
position={Position.BOTTOM_RIGHT}
content={AdditionalMenu(this.logout)} />
content={AdditionalMenu({ logout: this.logout, close })}
isOpen={accountMenuOpen}
onClose={this.close("accountMenuOpen")} />
<EStopButton
bot={this.props.bot}
user={this.props.user} />

View file

@ -19,6 +19,7 @@ export interface NavBarProps {
export interface NavBarState {
mobileMenuOpen: boolean;
tickerListOpen: boolean;
accountMenuOpen: boolean;
}
type ToggleEventHandler = (e: React.MouseEvent<HTMLDivElement>) => void;
@ -37,3 +38,8 @@ export interface TickerListProps {
export interface NavLinksProps {
close: (property: keyof NavBarState) => ToggleEventHandler;
}
export interface AccountMenuProps {
close: (property: keyof NavBarState) => ToggleEventHandler;
logout: () => void;
}