add snackbar to tutorial builder

This commit is contained in:
Delucse 2020-09-21 11:41:19 +02:00
parent 9574462fbf
commit 0f0bfb98c6
3 changed files with 34 additions and 2 deletions

View File

@ -220,6 +220,7 @@ export const progress = (inProgress) => (dispatch) => {
}; };
export const resetTutorial = () => (dispatch, getState) => { export const resetTutorial = () => (dispatch, getState) => {
dispatch(jsonString(''));
dispatch(tutorialTitle('')); dispatch(tutorialTitle(''));
dispatch(tutorialId('')); dispatch(tutorialId(''));
var steps = [ var steps = [

View File

@ -12,6 +12,7 @@ import Id from './Id';
import Textfield from './Textfield'; import Textfield from './Textfield';
import Step from './Step'; import Step from './Step';
import Dialog from '../../Dialog'; import Dialog from '../../Dialog';
import Snackbar from '../../Snackbar';
import { withStyles } from '@material-ui/core/styles'; import { withStyles } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button'; import Button from '@material-ui/core/Button';
@ -34,14 +35,21 @@ class Builder extends Component {
open: false, open: false,
title: '', title: '',
content: '', content: '',
string: false string: false,
snackbar: false,
message: ''
}; };
this.inputRef = React.createRef(); this.inputRef = React.createRef();
} }
componentWillUnmount(){
this.reset();
}
submit = () => { submit = () => {
var isError = this.props.checkError(); var isError = this.props.checkError();
if(isError){ if(isError){
this.setState({ snackbar: true, message: `Die Angaben für das Tutorial sind nicht vollständig.`, type: 'error'});
window.scrollTo(0, 0); window.scrollTo(0, 0);
} }
else{ else{
@ -57,6 +65,7 @@ class Builder extends Component {
reset = () => { reset = () => {
this.props.resetTutorial(); this.props.resetTutorial();
this.setState({ snackbar: true, message: `Das Tutorial wurde erfolgreich zurückgesetzt.`, type: 'success'});
window.scrollTo(0, 0); window.scrollTo(0, 0);
} }
@ -86,6 +95,7 @@ class Builder extends Component {
result.steps = [{}]; result.steps = [{}];
} }
this.props.readJSON(result); this.props.readJSON(result);
this.setState({ snackbar: true, message: `${isFile ? 'Die übergebene JSON-Datei' : 'Der übergebene JSON-String'} wurde erfolgreich übernommen.`, type: 'success'});
} catch(err){ } catch(err){
console.log(err); console.log(err);
this.props.progress(false); this.props.progress(false);
@ -105,6 +115,10 @@ class Builder extends Component {
this.setState({ open: !this.state }); this.setState({ open: !this.state });
} }
toggleSnackbar = () => {
this.setState({ snackbar: !this.state, message: '', type: null });
}
render() { render() {
return ( return (
@ -169,6 +183,13 @@ class Builder extends Component {
: null} : null}
</Dialog> </Dialog>
<Snackbar
open={this.state.snackbar}
onClose={this.toggleSnackbar}
message={this.state.message}
type={this.state.type}
/>
</div> </div>
); );
}; };

View File

@ -3,6 +3,8 @@ import PropTypes from 'prop-types';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { addStep, removeStep, changeStepIndex } from '../../../actions/tutorialBuilderActions'; import { addStep, removeStep, changeStepIndex } from '../../../actions/tutorialBuilderActions';
import clsx from 'clsx';
import Textfield from './Textfield'; import Textfield from './Textfield';
import StepType from './StepType'; import StepType from './StepType';
import BlocklyExample from './BlocklyExample'; import BlocklyExample from './BlocklyExample';
@ -27,6 +29,14 @@ const styles = (theme) => ({
backgroundColor: theme.palette.primary.main, backgroundColor: theme.palette.primary.main,
color: theme.palette.primary.contrastText, color: theme.palette.primary.contrastText,
} }
},
delete: {
backgroundColor: theme.palette.error.dark,
color: theme.palette.error.contrastText,
'&:hover': {
backgroundColor: theme.palette.error.dark,
color: theme.palette.error.contrastText,
}
} }
}); });
@ -74,7 +84,7 @@ class Step extends Component {
<Tooltip title={`Schritt ${index+1} löschen`} arrow> <Tooltip title={`Schritt ${index+1} löschen`} arrow>
<IconButton <IconButton
disabled={index === 0} disabled={index === 0}
className={this.props.classes.button} className={clsx(this.props.classes.button, this.props.classes.delete)}
onClick={() => this.props.removeStep(index)} onClick={() => this.props.removeStep(index)}
> >
<FontAwesomeIcon icon={faTrash} size="xs"/> <FontAwesomeIcon icon={faTrash} size="xs"/>