HeaderRightMenu.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import React, { FC } from "react";
  2. import { bindActionCreators } from "redux";
  3. import { connect } from "react-redux";
  4. import Router from "next/router";
  5. import styled from "styled-components";
  6. import { Flex } from "reflexbox/styled-components";
  7. import HeaderMenuItem from "./HeaderMenuItem";
  8. import Button from "./Button";
  9. interface Props {
  10. isAuthenticated: boolean;
  11. }
  12. const List = styled(Flex).attrs({
  13. as: "ul",
  14. justifyContent: "flex-end",
  15. flexDirection: "row",
  16. alignItems: "center",
  17. m: 0,
  18. p: 0
  19. })`
  20. list-style: none;
  21. `;
  22. const ReportLink = styled.a`
  23. display: none;
  24. @media only screen and (max-width: 488px) {
  25. display: block;
  26. }
  27. `;
  28. const HeaderMenu: FC<Props> = ({ isAuthenticated }) => {
  29. const goTo = e => {
  30. e.preventDefault();
  31. const path = e.currentTarget.getAttribute("href");
  32. if (!path || window.location.pathname === path) return;
  33. Router.push(path);
  34. };
  35. const login = !isAuthenticated && (
  36. <HeaderMenuItem>
  37. <a href="/login" title="login / signup" onClick={goTo}>
  38. <Button>Login / Sign up</Button>
  39. </a>
  40. </HeaderMenuItem>
  41. );
  42. const logout = isAuthenticated && (
  43. <HeaderMenuItem>
  44. <a href="/logout" title="logout" onClick={goTo}>
  45. Log out
  46. </a>
  47. </HeaderMenuItem>
  48. );
  49. const settings = isAuthenticated && (
  50. <HeaderMenuItem>
  51. <a href="/settings" title="settings" onClick={goTo}>
  52. <Button>Settings</Button>
  53. </a>
  54. </HeaderMenuItem>
  55. );
  56. return (
  57. <List>
  58. <HeaderMenuItem>
  59. <ReportLink href="/report" title="Report" onClick={goTo}>
  60. Report
  61. </ReportLink>
  62. </HeaderMenuItem>
  63. {logout}
  64. {settings}
  65. {login}
  66. </List>
  67. );
  68. };
  69. const mapStateToProps = ({ auth: { isAuthenticated } }) => ({
  70. isAuthenticated
  71. });
  72. export default connect(
  73. mapStateToProps,
  74. null
  75. )(HeaderMenu);