forked from jakubgarfield/expenses
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.tsx
88 lines (78 loc) 路 2.31 KB
/
main.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import React, { Component } from "react";
import { Route, RouteComponentProps, withRouter } from "react-router-dom";
import TopBar from "./top-bar/top-bar";
import Hamburger, { Menu } from "./hamburger/hamburger";
import Dashboard from "./dashboard/dashboard";
import Settings from "./settings/settings";
import { Snackbar } from "@material/react-snackbar";
type MainProps = {
selectedMenuIndex: number,
openDrawer: () => void,
closeDrawer: () => void,
navigateTo: () => void,
menu: Menu,
}
type MainState = {
snackbarMessage: string,
drawerOpen: boolean
profile: gapi.auth2.BasicProfile | null
}
class Main extends Component<RouteComponentProps<{}> & MainProps, MainState> {
state: MainState = {
snackbarMessage: '',
drawerOpen: false,
profile: null,
};
openDrawer = () => {
this.setState({ drawerOpen: true });
};
closeDrawer = () => {
this.setState({ drawerOpen: false });
};
navigateTo = (url: string) => {
this.props.history.push(url);
};
signedInChanged = (profile: gapi.auth2.BasicProfile | null) => {
this.setState({ profile });
};
render(): React.ReactElement<RouteComponentProps<{}> & MainProps, React.JSXElementConstructor<MainState>> {
return (
<React.Fragment>
<TopBar
title={this.props.menu[this.props.selectedMenuIndex].text}
openDrawer={this.openDrawer}
/>
<Hamburger
closeDrawer={this.closeDrawer}
menu={this.props.menu}
navigateTo={this.navigateTo}
drawerOpen={this.state.drawerOpen}
profile={this.state.profile}
/>
<div
className={`${this.props.menu[this.props.selectedMenuIndex].text.toLowerCase()}-root`}
>
<Route
path="/"
exact
render={(props) =>
<Dashboard
{...props}
state={this.state}
menu={this.props.menu}
signedInChanged={this.signedInChanged}
/>}
/>
<Route
path="/settings"
render={(props) => <Settings {...props} state={this.state} menu={this.props.menu} />}
/>
</div>
<Snackbar
message={this.state.snackbarMessage || ''}
/>
</React.Fragment>
);
}
}
export default withRouter(Main);