React
by nimishgoel056
HTML
<div id="app"></div>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
.is-done {
text-decoration: line-through;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
li {
margin: 8px 0;
}
h2 {
font-weight: bold;
margin-bottom: 15px;
}
.done {
color: rgba(0, 0, 0, 0.3);
text-decoration: line-through;
}
input {
margin-right: 5px;
}
React
class TodoApp extends React.Component {
indexValue =0;
constructor(props) {
super(props);
this.state = {
term: '',
items: [], completedItems :0
};
this.gettotalUndone = this.gettotalUndone.bind(this);
}
onChange = (event) => {
this.setState({term: event.target.value});
}
onSubmit = (event) => {
event.preventDefault();
console.log(this.state);
if(this.state.term && this.state.term.trim() && this.state.term.trim().length)
{
this.setState({
term: '',
items: [...this.state.items, {id:Math.floor(Math.random() * 1001), term: this.state.term, completed: false}]
});
}
}
getComponent(selected) {
console.log(selected);
// let selectedItem = this.state.items.find(item => item.id = selected.id);
// console.log(selectedItem);
// selected.completed = !selected.completed;
let temp = this.state.items;
console.log("item", temp);
temp = temp.map(item => {
if(selected.id== item.id)
item.completed = !item.completed;
return item;
})
// this.setState({items: temp});
this.setState({items: temp}, ()=> this.gettotalUndone());
}
// this.setState({items: temp}, ()=> this.gettotalUndone());
gettotalUndone(){
console.log(this.state.items);
let temp =0;
if(this.state.items){
console.log("in");
let items = this.state.items.filter(item => {
return !item.completed
});
console.log(items);
if(items && items.length >0) temp = items.length; temp= 0;
}
//temp = 0;
this.setState({completedItems: temp})
}
render() {
return (
<div>
<h2>
Todo List
</h2>
<form className="App" onSubmit={this.onSubmit}>
<input value={this.state.term} onChange={this.onChange} />
...