-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathTodoItem.vue
80 lines (72 loc) · 1.6 KB
/
TodoItem.vue
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<template>
<li class="list-group-item cleafix">
<input
type="checkbox"
class="mr-3"
:checked="todo.completed"
@change="onToggleChecked"
/>
<span>{{ todo.title }}</span>
<span class="float-right">
<button
class="btn px-1 mr-1 position-relative"
style="bottom: 7px;"
@click="onClickEdit"
>
<fa icon="edit" class="edit-icon"></fa>
</button>
<button
class="btn px-1 position-relative"
style="bottom: 7px;"
@click="onClickRemove"
>
<fa icon="trash" class="trash-icon"></fa>
</button>
</span>
</li>
</template>
<script lang="ts">
import { defineComponent, PropType } from "vue";
import Todo from "@/models/todo";
import { FontAwesomeIcon } from "@/plugins/font-awesome";
export default defineComponent({
name: "TodoItem",
components: { fa: FontAwesomeIcon },
props: {
todo: {
type: Object as PropType<Todo>,
required: true
}
},
setup(props, context) {
const onToggleChecked = () => {
context.emit("toggle-completed", {
todo: Object.assign({}, props.todo, {
completed: !props.todo.completed
})
});
};
const onClickEdit = () => {
context.emit("click-edit", { todo: props.todo });
};
const onClickRemove = () => {
context.emit("click-remove", { todo: props.todo });
};
return {
onToggleChecked,
onClickEdit,
onClickRemove
};
}
});
</script>
<style scoped>
.edit-icon {
width: 15px;
height: 15px;
}
.trash-icon {
width: 15px;
height: 15px;
}
</style>