add id and title
This commit is contained in:
		
							parent
							
								
									b726f5f42c
								
							
						
					
					
						commit
						1c2b025493
					
				| @ -5,6 +5,7 @@ import { Route, Switch } from 'react-router-dom'; | |||||||
| import Home from './Home'; | import Home from './Home'; | ||||||
| import Tutorial from './Tutorial/Tutorial'; | import Tutorial from './Tutorial/Tutorial'; | ||||||
| import TutorialHome from './Tutorial/TutorialHome'; | import TutorialHome from './Tutorial/TutorialHome'; | ||||||
|  | import Builder from './Tutorial/Builder/Builder'; | ||||||
| import NotFound from './NotFound'; | import NotFound from './NotFound'; | ||||||
| 
 | 
 | ||||||
| class Routes extends Component { | class Routes extends Component { | ||||||
| @ -15,6 +16,7 @@ class Routes extends Component { | |||||||
|         <Switch> |         <Switch> | ||||||
|           <Route path="/" exact component={Home} /> |           <Route path="/" exact component={Home} /> | ||||||
|           <Route path="/tutorial" exact component={TutorialHome} /> |           <Route path="/tutorial" exact component={TutorialHome} /> | ||||||
|  |           <Route path="/tutorial/builder" exact component={Builder}/> | ||||||
|           <Route path="/tutorial/:tutorialId" exact component={Tutorial} /> |           <Route path="/tutorial/:tutorialId" exact component={Tutorial} /> | ||||||
|           <Route component={NotFound} /> |           <Route component={NotFound} /> | ||||||
|         </Switch> |         </Switch> | ||||||
|  | |||||||
							
								
								
									
										95
									
								
								src/components/Tutorial/Builder/Builder.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								src/components/Tutorial/Builder/Builder.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,95 @@ | |||||||
|  | import React, { Component } from 'react'; | ||||||
|  | 
 | ||||||
|  | import Breadcrumbs from '../../Breadcrumbs'; | ||||||
|  | import Id from './Id'; | ||||||
|  | import Title from './Title'; | ||||||
|  | 
 | ||||||
|  | import Typography from '@material-ui/core/Typography'; | ||||||
|  | import Button from '@material-ui/core/Button'; | ||||||
|  | import TextField from '@material-ui/core/TextField'; | ||||||
|  | import OutlinedInput from '@material-ui/core/OutlinedInput'; | ||||||
|  | import InputLabel from '@material-ui/core/InputLabel'; | ||||||
|  | import FormControl from '@material-ui/core/FormControl'; | ||||||
|  | 
 | ||||||
|  | import { faPlus, faMinus } from "@fortawesome/free-solid-svg-icons"; | ||||||
|  | import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; | ||||||
|  | 
 | ||||||
|  | class Builder extends Component { | ||||||
|  | 
 | ||||||
|  |   state = { | ||||||
|  |     steps: [ | ||||||
|  |       { | ||||||
|  |         headline: '' | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         headline: '' | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   addStep = (index) => { | ||||||
|  |     var step = { | ||||||
|  |       headline: '' | ||||||
|  |     }; | ||||||
|  |     var steps = this.state.steps; | ||||||
|  |     steps.splice(index, 0, step); | ||||||
|  |     this.setState({steps: steps}); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   removeStep = (index) => { | ||||||
|  |     var steps = this.state.steps; | ||||||
|  |     steps.splice(index, 1); | ||||||
|  |     this.setState({steps: steps}); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   render() { | ||||||
|  |     return ( | ||||||
|  |       <div> | ||||||
|  |         <Breadcrumbs content={[{link: '/', title: 'Home'},{link: '/tutorial', title: 'Tutorial'}, {link: '/tutorial/builder', title: 'Builder'}]}/> | ||||||
|  | 
 | ||||||
|  |         <h1>Tutorial-Builder</h1> | ||||||
|  | 
 | ||||||
|  |         <Id /> | ||||||
|  |         <Title /> | ||||||
|  | 
 | ||||||
|  |         {this.state.steps.map((step, i) => | ||||||
|  |           <div style={{borderRadius: '25px', background: 'lightgrey', padding: '10px', marginBottom: '20px'}}> | ||||||
|  |             <Typography style={{marginBottom: '10px', marginLeft: '25px'}}>Schritt {i+1}</Typography> | ||||||
|  |             <Title /> | ||||||
|  |             <div style={{display: 'flex'}}> | ||||||
|  |               <Button | ||||||
|  |                 disabled={i === 0} | ||||||
|  |                 onClick={() => this.removeStep(i)} | ||||||
|  |                 variant='contained' | ||||||
|  |                 color='primary' | ||||||
|  |                 style={{borderRadius: '25px 0 0 25px', height: '40px', boxShadow: '0 0 transparent'}} | ||||||
|  |               > | ||||||
|  |                 <FontAwesomeIcon icon={faMinus} /> | ||||||
|  |               </Button> | ||||||
|  |               <Button | ||||||
|  |                 onClick={() => this.addStep(i)} | ||||||
|  |                 variant='contained' | ||||||
|  |                 color='primary' | ||||||
|  |                 style={{borderRadius: '0 25px 25px 0', height: '40px', boxShadow: '0 0 transparent'}} | ||||||
|  |               > | ||||||
|  |                 <FontAwesomeIcon icon={faPlus} /> | ||||||
|  |               </Button> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  | 
 | ||||||
|  |         )} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         <Button variant='contained' color='primary' onClick={() => {alert('hi')}}>Submit</Button> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       </div> | ||||||
|  |       /*<div style={{borderRadius: '25px', background: 'yellow', textAlign: 'center'}}> | ||||||
|  |         <Typography variant='h4'>Tutorial-Builder</Typography> | ||||||
|  |       </div> | ||||||
|  |       */ | ||||||
|  |     ); | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default Builder; | ||||||
							
								
								
									
										80
									
								
								src/components/Tutorial/Builder/Id.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								src/components/Tutorial/Builder/Id.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,80 @@ | |||||||
|  | import React, { Component } from 'react'; | ||||||
|  | 
 | ||||||
|  | import Button from '@material-ui/core/Button'; | ||||||
|  | import OutlinedInput from '@material-ui/core/OutlinedInput'; | ||||||
|  | import InputLabel from '@material-ui/core/InputLabel'; | ||||||
|  | import FormControl from '@material-ui/core/FormControl'; | ||||||
|  | import FormHelperText from '@material-ui/core/FormHelperText'; | ||||||
|  | 
 | ||||||
|  | import { faPlus, faMinus } from "@fortawesome/free-solid-svg-icons"; | ||||||
|  | import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; | ||||||
|  | 
 | ||||||
|  | class Id extends Component { | ||||||
|  | 
 | ||||||
|  |   state = { | ||||||
|  |     id: 0, | ||||||
|  |     error: false | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   handleChange = (e) => { | ||||||
|  |     var value = parseInt(e.target.value); | ||||||
|  |     if(Number.isInteger(value)){ | ||||||
|  |       this.setState({id: value, error: false}); | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |       this.setState({id: e.target.value, error: true}); | ||||||
|  |     } | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   handleCounter = (step) => { | ||||||
|  |     if(!this.state.id){ | ||||||
|  |       this.setState({id: 0+step}); | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |       this.setState({id: this.state.id+step}); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   render() { | ||||||
|  |     return ( | ||||||
|  |       <FormControl variant="outlined" /*fullWidth*/ style={{marginBottom: '10px', width: '100%'}}> | ||||||
|  |         <InputLabel htmlFor="id">ID</InputLabel> | ||||||
|  |         <OutlinedInput | ||||||
|  |           style={{borderRadius: '25px', padding: '0 0 0 10px', width: '200px'}} | ||||||
|  |           error={this.state.error} | ||||||
|  |           value={this.state.id} | ||||||
|  |           name='id' | ||||||
|  |           label='ID' | ||||||
|  |           id='id' | ||||||
|  |           onChange={this.handleChange} | ||||||
|  |           inputProps={{ | ||||||
|  |             style: {marginRight: '10px'} | ||||||
|  |           }} | ||||||
|  |           endAdornment={ | ||||||
|  |             <div style={{display: 'flex'}}> | ||||||
|  |               <Button | ||||||
|  |                 onClick={() => this.handleCounter(-1)} | ||||||
|  |                 variant='contained' | ||||||
|  |                 color='primary' | ||||||
|  |                 style={{borderRadius: '25px 0 0 25px', height: '56px', boxShadow: '0 0 transparent'}} | ||||||
|  |               > | ||||||
|  |                 <FontAwesomeIcon icon={faMinus} /> | ||||||
|  |               </Button> | ||||||
|  |               <Button | ||||||
|  |                 onClick={() => this.handleCounter(1)} | ||||||
|  |                 variant='contained' | ||||||
|  |                 color='primary' | ||||||
|  |                 style={{borderRadius: '0 25px 25px 0', height: '56px', boxShadow: '0 0 transparent'}} | ||||||
|  |               > | ||||||
|  |                 <FontAwesomeIcon icon={faPlus} /> | ||||||
|  |               </Button> | ||||||
|  |             </div> | ||||||
|  |           } | ||||||
|  |         /> | ||||||
|  |         {this.state.error ? <FormHelperText style={{color: 'red'}}>Es muss eine positive ganzzahlige Zahl sein.</FormHelperText> : null} | ||||||
|  |       </FormControl> | ||||||
|  |     ); | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default Id; | ||||||
							
								
								
									
										45
									
								
								src/components/Tutorial/Builder/Title.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/components/Tutorial/Builder/Title.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,45 @@ | |||||||
|  | import React, { Component } from 'react'; | ||||||
|  | 
 | ||||||
|  | import Button from '@material-ui/core/Button'; | ||||||
|  | import OutlinedInput from '@material-ui/core/OutlinedInput'; | ||||||
|  | import InputLabel from '@material-ui/core/InputLabel'; | ||||||
|  | import FormControl from '@material-ui/core/FormControl'; | ||||||
|  | import FormHelperText from '@material-ui/core/FormHelperText'; | ||||||
|  | 
 | ||||||
|  | class Title extends Component { | ||||||
|  | 
 | ||||||
|  |   state = { | ||||||
|  |     title: '', | ||||||
|  |     error: false | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   handleChange = (e) => { | ||||||
|  |     var value = e.target.value; | ||||||
|  |     if(value.replace(/\s/g,'') !== ''){ | ||||||
|  |       this.setState({[e.target.name]: value, error: false}); | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |       this.setState({[e.target.name]: value, error: true}); | ||||||
|  |     } | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   render() { | ||||||
|  |     return ( | ||||||
|  |       <FormControl variant="outlined" fullWidth style={{marginBottom: '10px'}}> | ||||||
|  |         <InputLabel htmlFor="title">Titel</InputLabel> | ||||||
|  |         <OutlinedInput | ||||||
|  |           style={{borderRadius: '25px', padding: '0 0 0 10px'}} | ||||||
|  |           error={this.state.error} | ||||||
|  |           value={this.state.title} | ||||||
|  |           name='title' | ||||||
|  |           label='Titel' | ||||||
|  |           id='title' | ||||||
|  |           onChange={this.handleChange} | ||||||
|  |         /> | ||||||
|  |         {this.state.error ? <FormHelperText style={{color: 'red'}}>Gib einen Titel für das Tutorial ein.</FormHelperText> : null} | ||||||
|  |       </FormControl> | ||||||
|  |     ); | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default Title; | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user