fix bugs concerning uploading json

This commit is contained in:
Delucse 2020-09-20 00:09:05 +02:00
parent 7579be52c9
commit 3ba35751ea
3 changed files with 49 additions and 62 deletions

View File

@ -1,5 +1,7 @@
import { PROGRESS, BUILDER_CHANGE, BUILDER_ERROR, BUILDER_TITLE, BUILDER_ID, BUILDER_ADD_STEP, BUILDER_DELETE_STEP, BUILDER_CHANGE_STEP, BUILDER_CHANGE_ORDER, BUILDER_DELETE_PROPERTY } from './types'; import { PROGRESS, BUILDER_CHANGE, BUILDER_ERROR, BUILDER_TITLE, BUILDER_ID, BUILDER_ADD_STEP, BUILDER_DELETE_STEP, BUILDER_CHANGE_STEP, BUILDER_CHANGE_ORDER, BUILDER_DELETE_PROPERTY } from './types';
import data from '../data/hardware.json';
export const changeTutorialBuilder = () => (dispatch) => { export const changeTutorialBuilder = () => (dispatch) => {
dispatch({ dispatch({
type: BUILDER_CHANGE type: BUILDER_CHANGE
@ -162,9 +164,24 @@ export const setSubmitError = () => (dispatch, getState) => {
} }
for(var i = 0; i < builder.steps.length; i++){ for(var i = 0; i < builder.steps.length; i++){
builder.steps[i].id = i+1; builder.steps[i].id = i+1;
if(i === 0 && (builder.steps[i].hardware === undefined || builder.steps[i].hardware.length < 1)){ if(i === 0){
if(builder.steps[i].requirements && builder.steps[i].requirements.length > 0){
var requirements = builder.steps[i].requirements.filter(requirement => typeof(requirement)==='number');
if(requirements.length < builder.steps[i].requirements.length){
dispatch(changeContent(i, 'requirements', requirements));
}
}
if(builder.steps[i].hardware === undefined || builder.steps[i].hardware.length < 1){
dispatch(setError(i, 'hardware')); dispatch(setError(i, 'hardware'));
} }
else{
var hardwareIds = data.map(hardware => hardware.id);
var hardware = builder.steps[i].hardware.filter(hardware => hardwareIds.includes(hardware));
if(hardware.length < builder.steps[i].hardware.length){
dispatch(changeContent(i, 'hardware', hardware));
}
}
}
if(builder.steps[i].headline === undefined || builder.steps[i].headline === ''){ if(builder.steps[i].headline === undefined || builder.steps[i].headline === ''){
dispatch(setError(i, 'headline')); dispatch(setError(i, 'headline'));
} }

View File

@ -79,8 +79,18 @@ class BlocklyExample extends Component {
} }
} }
render() { render() {
moment.locale('de', localization); moment.locale('de', localization);
var initialXml = this.props.value;
// check if value is valid xml;
try{
Blockly.Xml.textToDom(initialXml);
}
catch(err){
initialXml = null;
this.props.setError(this.props.index, 'xml');
}
return ( return (
<div style={{marginBottom: '10px'}}> <div style={{marginBottom: '10px'}}>
<FormControlLabel <FormControlLabel
@ -100,17 +110,7 @@ class BlocklyExample extends Component {
<FormHelperText style={{lineHeight: 'initial', marginBottom: '10px'}} className={this.props.classes.errorColor}>Reiche deine Blöcke ein, indem du auf den rot gefärbten Button klickst.</FormHelperText> <FormHelperText style={{lineHeight: 'initial', marginBottom: '10px'}} className={this.props.classes.errorColor}>Reiche deine Blöcke ein, indem du auf den rot gefärbten Button klickst.</FormHelperText>
: <FormHelperText style={{lineHeight: 'initial', marginBottom: '10px'}}>Die letzte Einreichung erfolgte um {this.state.input} Uhr.</FormHelperText> : <FormHelperText style={{lineHeight: 'initial', marginBottom: '10px'}}>Die letzte Einreichung erfolgte um {this.state.input} Uhr.</FormHelperText>
: null} : null}
{this.state.checked ? () => { {this.state.checked ?
var initialXml = this.props.value;
// check if value is valid xml;
try{
Blockly.Xml.textToDom(initialXml);
}
catch(err){
initialXml = null;
this.props.setError(this.props.index, 'xml');
}
return(
<div> <div>
<Grid container className={!this.props.value ? this.props.classes.errorBorder : null}> <Grid container className={!this.props.value ? this.props.classes.errorBorder : null}>
<Grid item xs={12}> <Grid item xs={12}>
@ -127,7 +127,6 @@ class BlocklyExample extends Component {
{this.props.task ? 'Musterlösung einreichen' : 'Beispiel einreichen'} {this.props.task ? 'Musterlösung einreichen' : 'Beispiel einreichen'}
</Button> </Button>
</div> </div>
)}
: null} : null}
</div> </div>
); );

View File

@ -67,15 +67,12 @@ class Builder extends Component {
reader.onloadend = () => { reader.onloadend = () => {
try { try {
var result = JSON.parse(reader.result); var result = JSON.parse(reader.result);
if(this.checkSteps(result.steps)){ if(!this.checkSteps(result.steps)){
alert('Hier'); result.steps = [{}];
}
this.props.readJSON(result); this.props.readJSON(result);
}
else{
this.props.progress(false);
alert('die JSON-Datei hat nicht die richtige Form');
}
} catch(err){ } catch(err){
console.log(err);
this.props.progress(false); this.props.progress(false);
alert('ungültige JSON-Datei'); alert('ungültige JSON-Datei');
this.setState({ open: true, file: false, title: 'Ungültige XML', content: 'Die XML-Datei konnte nicht in Blöcke zerlegt werden. Bitte überprüfe den XML-Code und versuche es erneut.' }); this.setState({ open: true, file: false, title: 'Ungültige XML', content: 'Die XML-Datei konnte nicht in Blöcke zerlegt werden. Bitte überprüfe den XML-Code und versuche es erneut.' });
@ -86,34 +83,8 @@ class Builder extends Component {
checkSteps = (steps) => { checkSteps = (steps) => {
if(!(steps && steps.length > 0)){ if(!(steps && steps.length > 0)){
alert(1);
return false; return false;
} }
steps.map((step, i) => {
if(i === 0){
if(!(step.requirements &&
step.requirements.length > 0 &&
step.requirements.filter(requirement => typeof(requirement) === 'number').length === step.requirements.length)){
alert(3);
return false;
}
var hardwareIds = data.map(hardware => hardware.id);
if(!(step.hardware &&
step.hardware.length > 0 &&
step.hardware.filter(hardware => typeof(hardware) === 'string' && hardwareIds.includes(hardware)).length === step.hardware.length)){
alert(4);
return false;
}
}
if(!(step.headline && typeof(step.headline)==='string')){
alert(5);
return false;
}
if(!(step.text && typeof(step.text)==='string')){
alert(6);
return false;
}
});
return true; return true;
} }