forked from riot/examples
-
Notifications
You must be signed in to change notification settings - Fork 0
/
todo.riot
59 lines (55 loc) · 1.21 KB
/
todo.riot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<todo>
<h3>{ props.title }</h3>
<ul>
<li each={ item in state.items } hidden={ item.hidden }>
<label class={ item.done ? 'completed' : null }>
<input
type="checkbox"
checked={ item.done }
onclick={ () => toggle(item) } />
{ item.title }
</label>
</li>
</ul>
<form onsubmit={ add }>
<input onkeyup={ edit } />
<button disabled={ !state.text }>
Add #{ state.items.length + 1 }
</button>
</form>
<script>
export default {
onBeforeMount(props, state) {
// initial state
this.state = {
items: props.items,
text: ''
}
},
edit(e) {
// update only the text state
this.update({
text: e.target.value
})
},
add(e) {
e.preventDefault()
if (this.state.text) {
this.update({
items: [
...this.state.items,
// add a new item
{title: this.state.text}
],
text: ''
})
}
},
toggle(item) {
item.done = !item.done
// trigger a component update
this.update()
}
}
</script>
</todo>