aboutsummaryrefslogtreecommitdiff
path: root/src/Settings.js
diff options
context:
space:
mode:
authorDeterminant <ted.sybil@gmail.com>2019-02-06 21:13:23 -0500
committerDeterminant <ted.sybil@gmail.com>2019-02-06 21:13:23 -0500
commitd88b873c63d8ad5b5336b509f8a4ee35a583e279 (patch)
tree787ac45d6cc5cac30b7939314a37c283ba161c34 /src/Settings.js
parenta8b8cd7d51cafea253f3e7b2e3d1e76054d97135 (diff)
add snackbar and dialog
Diffstat (limited to 'src/Settings.js')
-rw-r--r--src/Settings.js53
1 files changed, 48 insertions, 5 deletions
diff --git a/src/Settings.js b/src/Settings.js
index e071f9e..3865438 100644
--- a/src/Settings.js
+++ b/src/Settings.js
@@ -23,6 +23,8 @@ import * as gapi from './gapi';
import { msgType, MsgClient } from './msg';
import { Pattern, PatternEntry } from './pattern';
import PatternTable from './PatternTable';
+import Snackbar from './Snackbar';
+import AlertDialog from './Dialog';
const styles = theme => ({
tableHead: {
@@ -32,6 +34,7 @@ const styles = theme => ({
},
tableContent: {
textAlign: 'left',
+ maxWidth: 600,
},
calendarList: {
maxHeight: 400,
@@ -57,6 +60,10 @@ class Settings extends React.Component {
isLoggedIn: false,
patterns: [],
calendars: {},
+ snackBarOpen: false,
+ snackBarMsg: 'unknown',
+ dialogOpen: false,
+ dialogMsg: {title: '', message: ''},
};
constructor(props) {
@@ -72,19 +79,23 @@ class Settings extends React.Component {
this.msgClient.sendMsg({ type: msgType.getCalendars, data: { enabledOnly: false } }).then(msg => {
this.setState({ calendars: msg.data });
});
+ this.dialogPromiseResolver = null;
}
handleLogin = () => {
gapi.login().then(() => {
this.setState({ isLoggedIn: true });
this.loadAll(true);
- });
+ }).catch(() => this.handleSnackbarOpen("Failed to login!"));
}
handleLogout = () => {
- gapi.logout().then(() => {
- this.setState({ isLoggedIn: false });
- this.loadPatterns([], 'analyze');
+ this.handleDialogOpen("Logout", "Are you sure to logout?").then(ans => {
+ if (!ans) return;
+ gapi.logout().then(() => {
+ this.setState({ isLoggedIn: false });
+ //this.loadPatterns([], 'analyze');
+ }).catch(() => this.handleSnackbarOpen("Failed to logout!"));
});
}
@@ -167,10 +178,42 @@ class Settings extends React.Component {
}).then(() => this.setState({ patterns }));
};
+ handleSnackbarClose = (event, reason) => {
+ if (reason === 'clickaway') return;
+ this.setState({ snackBarOpen: false });
+ }
+
+ handleSnackbarOpen = msg => {
+ this.setState({ snackBarOpen: true, snackBarMsg: msg });
+ }
+
+ handleDialogOpen = (title, message) => {
+ let pm = new Promise(resolver => {
+ this.dialogPromiseResolver = resolver
+ });
+ this.setState({ dialogOpen: true, dialogMsg: {title, message} });
+ return pm;
+ }
+
+ handleDialogClose = result => {
+ this.dialogPromiseResolver(result);
+ this.setState({ dialogOpen: false });
+ }
+
render() {
const { classes } = this.props;
return (
<div>
+ <AlertDialog
+ title={this.state.dialogMsg.title}
+ message={this.state.dialogMsg.message}
+ open={this.state.dialogOpen}
+ handleClose={this.handleDialogClose}/>
+ <Snackbar
+ message={this.state.snackBarMsg}
+ open={this.state.snackBarOpen}
+ variant='error'
+ onClose={this.handleSnackbarClose}/>
<Typography variant="h6" component="h1" gutterBottom>
General
</Typography>
@@ -178,7 +221,7 @@ class Settings extends React.Component {
<TableBody>
<TableRow>
<STableCell className={classes.tableHead}>Account</STableCell>
- <STableCell align='left'>
+ <STableCell className={classes.tableContent}>
{
(this.state.isLoggedIn &&
<Button variant="contained" color="primary" onClick={this.handleLogout}>Logout</Button>) ||