From 5c6f56df000ff6c7a3723bf88e07c3529fc9483d Mon Sep 17 00:00:00 2001 From: Roosted7 <thomasroos@live.nl> Date: Sun, 21 Jan 2018 13:15:55 +0100 Subject: [PATCH] Split up views and component --- .babelrc | 6 +- client/components/GradersManager.js | 93 +++++++++++++++++++++++++++ client/views/Graders.js | 98 +---------------------------- package.json | 1 + 4 files changed, 98 insertions(+), 100 deletions(-) create mode 100644 client/components/GradersManager.js diff --git a/.babelrc b/.babelrc index 089613628..134423e90 100644 --- a/.babelrc +++ b/.babelrc @@ -1,12 +1,10 @@ -/* - ./.babelrc -*/ { "presets":[ "react", "flow" ], "plugins": [ - "syntax-dynamic-import" + "syntax-dynamic-import", + "transform-class-properties" ] } \ No newline at end of file diff --git a/client/components/GradersManager.js b/client/components/GradersManager.js new file mode 100644 index 000000000..5e92ef162 --- /dev/null +++ b/client/components/GradersManager.js @@ -0,0 +1,93 @@ +import React from 'react'; + +class GraderManager extends React.Component { + constructor(props) { + super(props); + this.state = {graders: [ + {id: '1', first_name: 'John', last_name: 'Doe'}, + {id: '2', first_name: 'Jan', last_name: 'Janssen'} + ], + first_name: '', + last_name: '' }; + + this.handleInputChange = this.handleInputChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + } + + handleInputChange(event) { + const target = event.target; + const name = target.name; + + this.setState({[name]: target.value}); + } + + fetchData() { + fetch('/api/graders', {credentials: 'same-origin'}) + .then((response) => response.json()) + .then((graders) =>{ + this.setState({graders: graders}) + }) + } + + handleSubmit(event) { + var data = {first_name: this.state.first_name, + last_name: this.state.last_name}; + + fetch('/api/graders', { + method: 'POST', // or 'PUT' + body: JSON.stringify(data), + headers: new Headers({ + 'Content-Type': 'application/json' + }) + }).then(res => res.json()) + .catch(error => console.error('Error:', error)) + .then(response => this.fetchData()); + + event.preventDefault(); + } + + componentDidMount() { + this.fetchData(); + } + + render() { + return ( + <div> + <form onSubmit={this.handleSubmit}> + <div className="field has-addons"> + <div className="control"> + <input name="first_name" value={this.state.first_name} + onChange={this.handleInputChange} className="input" type="text" + placeholder="First name" /> + </div> + <div className="control"> + <input name="last_name" value={this.state.last_name} + onChange={this.handleInputChange} className="input" type="text" + placeholder="Surname" /> + </div> + <div className="control"> + <button type="submit" className="button is-info"> + Add + </button> + </div> + </div> + </form> + + <br /> + + <aside className="menu"> + <p className="menu-label"> + Added graders + </p> + <ul className="menu-list"> + {this.state.graders.map((grader) => { + return <li key={grader.id.toString()}>{grader.first_name + ' ' + grader.last_name}</li> + })} + </ul> + </aside> + </div> + ); + } + } + + export default GraderManager; \ No newline at end of file diff --git a/client/views/Graders.js b/client/views/Graders.js index 302b5f84e..165172ce9 100644 --- a/client/views/Graders.js +++ b/client/views/Graders.js @@ -3,101 +3,7 @@ import NavBar from '../components/NavBar'; import Hero from '../components/Hero'; import Footer from '../components/Footer'; - -class GraderList extends React.Component { - constructor(props) { - super(props); - this.state = {graders: [ - {id: '1', first_name: 'John', last_name: 'Doe'}, - {id: '2', first_name: 'Jan', last_name: 'Janssen'} - ], - first_name: '', - last_name: '' }; - - this.handleInputChange = this.handleInputChange.bind(this); - this.handleSubmit = this.handleSubmit.bind(this); - } - - handleInputChange(event) { - const target = event.target; - const name = target.name; - - this.setState({[name]: target.value}); - } - - fetchData() { - fetch('/api/graders', {credentials: 'same-origin'}) - .then((response) => response.json()) - .then((graders) =>{ - this.setState({graders: graders}) - }) - } - - handleSubmit(event) { - var data = {first_name: this.state.first_name, - last_name: this.state.last_name}; - - fetch('/api/graders', { - method: 'POST', // or 'PUT' - body: JSON.stringify(data), - headers: new Headers({ - 'Content-Type': 'application/json' - }) - }).then(res => res.json()) - .catch(error => console.error('Error:', error)) - .then(response => this.fetchData()); - - event.preventDefault(); - } - - componentDidMount() { - - this.fetchData(); - - } - - componentWillUnmount() { - - } - - - render() { - return ( - <div> - <form onSubmit={this.handleSubmit}> - <div className="field has-addons"> - <div className="control"> - <input name="first_name" value={this.state.first_name} - onChange={this.handleInputChange} className="input" type="text" - placeholder="First name" /> - </div> - <div className="control"> - <input name="last_name" value={this.state.last_name} - onChange={this.handleInputChange} className="input" type="text" - placeholder="Surname" /> - </div> - <div className="control"> - <button type="submit" className="button is-info"> - Add - </button> - </div> - </div> - </form> - - <aside className="menu"> - <p className="menu-label"> - Added graders - </p> - <ul className="menu-list"> - {this.state.graders.map(function(grader) { - return <li key={grader.id.toString()}>{grader.first_name + ' ' + grader.last_name}</li> - })} - </ul> - </aside> - </div> - ); - } -} +import GraderManager from '../components/GradersManager'; const Graders = () => { return ( @@ -113,7 +19,7 @@ const Graders = () => { <h5 className='subtitle'>to add them to the system</h5> <hr /> - <GraderList /> + <GraderManager /> </div> </section> diff --git a/package.json b/package.json index 04cd85c31..a885b1cc4 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ }, "dependencies": { "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-plugin-transform-class-properties": "^6.24.1", "bulma": "^0.6.2", "css-loader": "^0.28.8", "file-loader": "^1.1.6", -- GitLab