From d88b873c63d8ad5b5336b509f8a4ee35a583e279 Mon Sep 17 00:00:00 2001 From: Determinant Date: Wed, 6 Feb 2019 21:13:23 -0500 Subject: add snackbar and dialog --- src/Settings.js | 53 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 5 deletions(-) (limited to 'src/Settings.js') 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 (
+ + General @@ -178,7 +221,7 @@ class Settings extends React.Component { Account - + { (this.state.isLoggedIn && ) || -- cgit v1.2.3