added Tutorial Builder FinalPage
This commit is contained in:
parent
77b338ffb6
commit
912440f64c
@ -301,12 +301,20 @@ export const resetTutorial = () => (dispatch, getState) => {
|
||||
hardware: [],
|
||||
requirements: [],
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
type: "instruction",
|
||||
headline: "",
|
||||
text: "",
|
||||
finalpage: true,
|
||||
solutions: [],
|
||||
},
|
||||
];
|
||||
dispatch(tutorialSteps(steps));
|
||||
dispatch({
|
||||
type: BUILDER_ERROR,
|
||||
payload: {
|
||||
steps: [{}],
|
||||
steps: [{}, {}],
|
||||
},
|
||||
});
|
||||
};
|
||||
|
@ -273,6 +273,7 @@ class Builder extends Component {
|
||||
} else {
|
||||
// export steps without attribute 'url'
|
||||
var steps = this.props.steps;
|
||||
var length = steps.length;
|
||||
var newTutorial = new FormData();
|
||||
newTutorial.append("title", this.props.title);
|
||||
newTutorial.append("difficulty", this.props.difficulty);
|
||||
@ -299,11 +300,28 @@ class Builder extends Component {
|
||||
newTutorial.append(`steps[${i}][hardware][${j}]`, hardware);
|
||||
});
|
||||
}
|
||||
if (i === length-1 && step.finalpage) {
|
||||
newTutorial.append(`steps[${i}][finalpage]`, step.finalpage);
|
||||
newTutorial.append(`steps[${i}][samplesolutions]`, step.samplesolutions);
|
||||
newTutorial.append(`steps[${i}][furthertutorials]`, step.furthertutorials);
|
||||
}
|
||||
// if (i === length-1 && step.type === "instruction" && step.samplesolutions === true) {
|
||||
// var solutions = [];
|
||||
// steps.forEach((step) => {
|
||||
// if (step.type === "task") {
|
||||
// solutions.push(step)
|
||||
// }
|
||||
// });
|
||||
// newTutorial.append(`steps[${i}][samplesolutions]`, solutions);
|
||||
// }
|
||||
if (step.xml) {
|
||||
// optional
|
||||
newTutorial.append(`steps[${i}][xml]`, step.xml);
|
||||
}
|
||||
});
|
||||
for (const pair of newTutorial.entries()) {
|
||||
console.log(`${pair[0]}, ${pair[1]}`);
|
||||
}
|
||||
return newTutorial;
|
||||
}
|
||||
};
|
||||
|
107
src/components/Tutorial/Builder/FinalPageOptions.js
Normal file
107
src/components/Tutorial/Builder/FinalPageOptions.js
Normal file
@ -0,0 +1,107 @@
|
||||
import React, { Component } from "react";
|
||||
import PropTypes from "prop-types";
|
||||
import { connect } from "react-redux";
|
||||
import { changeContent } from "../../../actions/tutorialBuilderActions";
|
||||
|
||||
import { withStyles } from "@material-ui/core/styles";
|
||||
import Switch from "@material-ui/core/Switch";
|
||||
import FormGroup from '@material-ui/core/FormGroup';
|
||||
import FormControlLabel from "@material-ui/core/FormControlLabel";
|
||||
|
||||
const styles = (theme) => ({
|
||||
errorColor: {
|
||||
color: theme.palette.error.dark,
|
||||
},
|
||||
errorBorder: {
|
||||
border: `1px solid ${theme.palette.error.dark}`,
|
||||
},
|
||||
errorButton: {
|
||||
marginTop: "5px",
|
||||
height: "40px",
|
||||
backgroundColor: theme.palette.error.dark,
|
||||
"&:hover": {
|
||||
backgroundColor: theme.palette.error.dark,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
class FinalPageOptions extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
checkedSampleSolutions: props.checkedSampleSolutions,
|
||||
checkedFurtherTutorials: props.checkedFurtherTutorials,
|
||||
};
|
||||
}
|
||||
|
||||
onChangeSampleSolutions = (value) => {
|
||||
var oldValue = this.state.checked;
|
||||
this.setState({ checked: value });
|
||||
if (oldValue !== value) {
|
||||
this.props.changeContent(value, this.props.index, "samplesolutions");
|
||||
}
|
||||
};
|
||||
|
||||
onChangeFurtherTutorials = (value) => {
|
||||
var oldValue = this.state.checked;
|
||||
this.setState({ checked: value });
|
||||
if (oldValue !== value) {
|
||||
this.props.changeContent(value, this.props.index, "furthertutorials");
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
var steps = this.props.steps;
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
marginBottom: "10px",
|
||||
padding: "18.5px 14px",
|
||||
borderRadius: "25px",
|
||||
border: "1px solid lightgrey",
|
||||
width: "calc(100% - 28px)",
|
||||
}}
|
||||
>
|
||||
<FormGroup>
|
||||
<FormControlLabel
|
||||
labelPlacement="end"
|
||||
label={
|
||||
"Musterlösung(en) der Aufgabe(n) auf der Abschlussseite anzeigen"
|
||||
}
|
||||
control={
|
||||
<Switch
|
||||
checked={this.state.checked}
|
||||
onChange={(e) => this.onChangeSampleSolutions(e.target.checked)}
|
||||
color="primary"
|
||||
/>
|
||||
}
|
||||
/>
|
||||
<FormControlLabel
|
||||
labelPlacement="end"
|
||||
label={
|
||||
"Vorschläge für weitere Tutorials auf der Abschlussseite anzeigen"
|
||||
}
|
||||
control={
|
||||
<Switch
|
||||
checked={this.state.checked}
|
||||
onChange={(e) => this.onChangeFurtherTutorials(e.target.checked)}
|
||||
color="primary"
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</FormGroup>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
FinalPageOptions.propTypes = {
|
||||
changeContent: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
const mapStateToProps = (state) => ({
|
||||
});
|
||||
|
||||
export default connect(mapStateToProps, {
|
||||
changeContent,
|
||||
})(withStyles(styles, { withTheme: true })(FinalPageOptions));
|
@ -29,6 +29,7 @@ import {
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
|
||||
import MarkdownEditor from "./MarkdownEditor";
|
||||
import FinalPageOptions from "./FinalPageOptions";
|
||||
|
||||
const styles = (theme) => ({
|
||||
button: {
|
||||
@ -64,12 +65,21 @@ class Step extends Component {
|
||||
marginBottom: "20px",
|
||||
}}
|
||||
>
|
||||
{ !this.props.step.finalpage ? (
|
||||
<Typography
|
||||
variant="h6"
|
||||
style={{ marginBottom: "10px", marginLeft: "4px" }}
|
||||
>
|
||||
Schritt {index + 1}
|
||||
</Typography>
|
||||
) : (
|
||||
<Typography
|
||||
variant="h6"
|
||||
style={{ marginBottom: "10px", marginLeft: "4px" }}
|
||||
>
|
||||
Abschlussseite
|
||||
</Typography>
|
||||
)}
|
||||
<div style={{ display: "flex", position: "relative" }}>
|
||||
<div
|
||||
style={{
|
||||
@ -80,6 +90,8 @@ class Step extends Component {
|
||||
bottom: "10px",
|
||||
}}
|
||||
>
|
||||
{!this.props.step.finalpage ? (
|
||||
<div>
|
||||
<Tooltip title="Schritt hinzufügen" arrow>
|
||||
<IconButton
|
||||
className={this.props.classes.button}
|
||||
@ -109,7 +121,7 @@ class Step extends Component {
|
||||
arrow
|
||||
>
|
||||
<IconButton
|
||||
disabled={index === steps.length - 1}
|
||||
disabled={index >= this.props.steps.length - 2}
|
||||
className={this.props.classes.button}
|
||||
style={{ marginBottom: "5px" }}
|
||||
onClick={() => this.props.changeStepIndex(index, index + 1)}
|
||||
@ -119,7 +131,7 @@ class Step extends Component {
|
||||
</Tooltip>
|
||||
<Tooltip title={`Schritt ${index + 1} löschen`} arrow>
|
||||
<IconButton
|
||||
disabled={index === 0}
|
||||
disabled={index === 0 && index === steps.length - 1}
|
||||
className={clsx(
|
||||
this.props.classes.button,
|
||||
this.props.classes.delete
|
||||
@ -132,8 +144,12 @@ class Step extends Component {
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
<div style={{ width: "100%", marginLeft: "54px" }}>
|
||||
{!this.props.step.finalpage ? (
|
||||
<StepType value={this.props.step.type} index={index} />
|
||||
) : null}
|
||||
<Textfield
|
||||
value={this.props.step.headline}
|
||||
property={"headline"}
|
||||
@ -178,12 +194,21 @@ class Step extends Component {
|
||||
/>
|
||||
</div>
|
||||
) : null}
|
||||
{ !this.props.step.finalpage ? (
|
||||
<BlocklyExample
|
||||
value={this.props.step.xml}
|
||||
index={index}
|
||||
task={this.props.step.type === "task"}
|
||||
error={this.props.error.steps[index].xml ? true : false}
|
||||
/>
|
||||
) : (
|
||||
<FinalPageOptions
|
||||
steps={steps}
|
||||
checkedSampleSolutions={this.props.step.samplesolutions}
|
||||
checkedFurtherTutorials={this.props.step.furtherTutorials}
|
||||
index={index}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -33,9 +33,18 @@ const initialState = {
|
||||
hardware: [],
|
||||
requirements: [],
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
type: "instruction",
|
||||
headline: "",
|
||||
text: "",
|
||||
finalpage: true,
|
||||
samplesolutions: false,
|
||||
furtherTutorials: false,
|
||||
},
|
||||
],
|
||||
error: {
|
||||
steps: [{}],
|
||||
steps: [{},{}],
|
||||
},
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user