45 lines
1.2 KiB
TypeScript
Raw Permalink Normal View History

2018-07-22 14:50:08 -06:00
import { observer } from "mobx-react";
2018-06-25 13:37:37 -06:00
import * as React from "react";
import { Link } from "react-router-dom";
import { Menu } from "semantic-ui-react";
2018-08-11 19:59:20 +03:00
import * as route from "@client/routePaths";
2018-08-07 21:21:26 +03:00
import { AppState, ConsumeState, injectState } from "@client/state";
2018-06-25 13:37:37 -06:00
interface NavItemProps {
2018-09-02 02:57:55 -06:00
to: string;
children: React.ReactNode;
2018-06-25 13:37:37 -06:00
}
2018-07-08 07:16:17 -06:00
const NavItem = observer(({ to, children }: NavItemProps) => {
2018-09-02 02:57:55 -06:00
function consumeState(appState: AppState) {
const { location } = appState.routerStore;
return (
<Menu.Item as={Link} to={to} active={location.pathname.startsWith(to)}>
{children}
</Menu.Item>
);
}
2018-07-08 07:16:17 -06:00
2018-09-02 02:57:55 -06:00
return <ConsumeState>{consumeState}</ConsumeState>;
2018-07-08 07:16:17 -06:00
});
2018-06-25 13:37:37 -06:00
function NavBar({ appState }: { appState: AppState }) {
2018-09-02 02:57:55 -06:00
let loginMenu;
// tslint:disable-next-line:prefer-conditional-expression
if (appState.isLoggedIn) {
loginMenu = <NavItem to={route.logout}>Logout</NavItem>;
} else {
loginMenu = <NavItem to={route.login}>Login</NavItem>;
}
return (
<Menu>
<NavItem to={route.device()}>Devices</NavItem>
<NavItem to={route.messagesTest}>Messages test</NavItem>
<Menu.Menu position="right">{loginMenu}</Menu.Menu>
</Menu>
);
2018-06-25 13:37:37 -06:00
}
export default observer(injectState(NavBar));