From 749d9de58169b801086d861e60564996f7ffad39 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Wed, 5 Aug 2020 17:35:33 +0300 Subject: [PATCH] SideMenu: change to be a function component. --- src/App.tsx | 2 +- src/SideMenu/index.tsx | 159 ++++++++++++++++++----------------------- 2 files changed, 69 insertions(+), 92 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 948416c..c1a6e26 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -255,7 +255,7 @@ function App(props: PropsType) { open={drawerOpen} onClose={toggleDrawer} > - + diff --git a/src/SideMenu/index.tsx b/src/SideMenu/index.tsx index 0b46800..c790a75 100644 --- a/src/SideMenu/index.tsx +++ b/src/SideMenu/index.tsx @@ -2,10 +2,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import * as React from "react"; -import { connect } from "react-redux"; -import { RouteComponentProps, withRouter } from "react-router"; import { List, ListItem, ListSubheader, ListDivider } from "../widgets/List"; -import { Theme, withTheme } from "@material-ui/core/styles"; import ActionCode from "@material-ui/icons/Code"; import ActionHome from "@material-ui/icons/Home"; import ActionSettings from "@material-ui/icons/Settings"; @@ -19,107 +16,87 @@ import logo from "../images/logo.svg"; import { routeResolver } from "../App"; -import { store, UserInfoData, StoreState, CredentialsData } from "../store"; +import { store } from "../store"; import { logout } from "../store/actions"; import * as C from "../constants"; +import { useTheme } from "@material-ui/core"; +import { useCredentials } from "../login"; +import { useHistory } from "react-router"; interface PropsType { - etesync: CredentialsData | null; onCloseDrawerRequest: () => void; } -type PropsTypeInner = RouteComponentProps<{}> & PropsType & { - userInfo: UserInfoData; - theme: Theme; -}; +export default function SideMenu(props: PropsType) { + const theme = useTheme(); + const etesync = useCredentials(); + const username = etesync?.credentials.email ?? C.appName; + const history = useHistory(); -class SideMenu extends React.PureComponent { - constructor(props: PropsTypeInner) { - super(props); - this.logout = this.logout.bind(this); + function logoutDo() { + store.dispatch(logout(etesync!)); + props.onCloseDrawerRequest(); } - public logout() { - store.dispatch(logout(this.props.etesync!)); - this.props.onCloseDrawerRequest(); + let loggedInItems; + if (etesync) { + loggedInItems = ( + + } + onClick={() => { + props.onCloseDrawerRequest(); + history.push(routeResolver.getRoute("journals")); + }} + /> + } + onClick={() => { + props.onCloseDrawerRequest(); + history.push(routeResolver.getRoute("journals.import")); + }} + /> + } + onClick={() => { + props.onCloseDrawerRequest(); + history.push(routeResolver.getRoute("settings")); + }} + /> + } onClick={logoutDo} /> + + ); } - public render() { - const { theme } = this.props; - const username = (this.props.etesync && this.props.etesync.credentials.email) ? - this.props.etesync.credentials.email - : C.appName; - - let loggedInItems; - if (this.props.etesync) { - loggedInItems = ( - - } - onClick={() => { - this.props.onCloseDrawerRequest(); - this.props.history.push(routeResolver.getRoute("journals")); - }} - /> - } - onClick={() => { - this.props.onCloseDrawerRequest(); - this.props.history.push(routeResolver.getRoute("journals.import")); - }} - /> - } - onClick={() => { - this.props.onCloseDrawerRequest(); - this.props.history.push(routeResolver.getRoute("settings")); - }} - /> - } onClick={this.logout} /> - - ); - } - - return ( -
-
- App logo -
- {username} -
+ return ( +
+
+ App logo +
+ {username}
- - } - onClick={() => { - this.props.onCloseDrawerRequest(); - this.props.history.push(routeResolver.getRoute("home")); - }} - /> - {loggedInItems} - - External Links - } href={C.homePage} /> - } href={C.faq} /> - } href={C.sourceCode} /> - } href={C.reportIssue} /> -
- ); - } + + } + onClick={() => { + props.onCloseDrawerRequest(); + history.push(routeResolver.getRoute("home")); + }} + /> + {loggedInItems} + + External Links + } href={C.homePage} /> + } href={C.faq} /> + } href={C.sourceCode} /> + } href={C.reportIssue} /> + +
+ ); } - -const mapStateToProps = (state: StoreState, _props: PropsType) => { - return { - userInfo: state.cache.userInfo, - }; -}; - -export default withTheme(withRouter(connect( - mapStateToProps -)(SideMenu)));