diff --git a/react_app/app.js b/react_app/app.js index 8beee08..1ba0047 100755 --- a/react_app/app.js +++ b/react_app/app.js @@ -1,6 +1,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; +import TodoApp from './components/TodoApp' -ReactDOM.render(

React works!

, +ReactDOM.render(, document.getElementById('root')); diff --git a/react_app/components/InputBar.js b/react_app/components/InputBar.js new file mode 100644 index 0000000..ad97608 --- /dev/null +++ b/react_app/components/InputBar.js @@ -0,0 +1,33 @@ +import React from 'react'; + +class InputBar extends React.Component { + constructor(props){ + super(props); + this.state = {text: ''} + } + + handleInput(e){ + this.setState({text: e.target.value}); + console.log(e.target.value) + } + + handleSubmit(){ + this.props.onSubmit(this.state.text); + this.setState({text: ''}); + } + + render(){ + return ( +
+ this.handleInput(e)} + value={this.state.text} + /> + +
+ ); + } +} + +export default InputBar; diff --git a/react_app/components/Todo.js b/react_app/components/Todo.js new file mode 100644 index 0000000..1cc8aaf --- /dev/null +++ b/react_app/components/Todo.js @@ -0,0 +1,10 @@ +import React from 'react'; + +function Todo(props){ + if(props.isCompleted){ + return
  • props.onCheck()} /> {props.name}
  • ; + } + return
  • props.onCheck()} /> {props.name}
  • ; +} + +export default Todo; diff --git a/react_app/components/TodoApp.js b/react_app/components/TodoApp.js new file mode 100644 index 0000000..319517a --- /dev/null +++ b/react_app/components/TodoApp.js @@ -0,0 +1,37 @@ +import React from 'react'; +import InputBar from './InputBar'; +import TodoList from './TodoList'; + +class TodoApp extends React.Component { + constructor(props){ + super(props); + this.state = { + data: [{name: 'Walk dog', isCompleted: false}, {name: 'Learn React', isCompleted: true}], + }; + } + + add(todoName) { + this.setState({ + data: this.state.data.concat({name: todoName, isCompleted: false}) + }) + console.log('add went') + } + + toggleCompleted(i) { + const newData = this.state.data.slice() + console.log(newData[i].isCompleted) + newData[i].isCompleted = !newData[i].isCompleted; + this.setState({data: newData}); + } + + render(){ + return ( +
    + this.add(name)} /> + this.toggleCompleted(i)} data={this.state.data} /> +
    + ); + } +} + +export default TodoApp; diff --git a/react_app/components/TodoList.js b/react_app/components/TodoList.js new file mode 100644 index 0000000..19813c6 --- /dev/null +++ b/react_app/components/TodoList.js @@ -0,0 +1,20 @@ +import React from 'react'; +import Todo from './Todo'; + +class TodoList extends React.Component { + constructor(props){ + super(props); + } + + render(){ + return ( +
      + {this.props.data.map((t, i) => { + return this.props.toggle(i)} index={i} name={t.name} isCompleted={t.isCompleted}/>; + })} +
    + ); + } +} + +export default TodoList;