Skip to content

Commit 5144ea8

Browse files
committed
68
1 parent 5576959 commit 5144ea8

File tree

4 files changed

+52
-37
lines changed

4 files changed

+52
-37
lines changed

db.json

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,38 +32,28 @@
3232
},
3333
{
3434
"subject": "f",
35-
"completed": false,
35+
"completed": true,
3636
"id": 13
3737
},
3838
{
3939
"subject": "a",
40-
"completed": false,
40+
"completed": true,
4141
"id": 14
4242
},
4343
{
4444
"subject": "12",
45-
"completed": false,
45+
"completed": true,
4646
"id": 15
4747
},
4848
{
4949
"subject": "123",
50-
"completed": false,
50+
"completed": true,
5151
"id": 16
5252
},
5353
{
5454
"subject": "1234",
55-
"completed": true,
56-
"id": 17
57-
},
58-
{
59-
"subject": "12345",
6055
"completed": false,
61-
"id": 18
62-
},
63-
{
64-
"subject": "new todo222",
65-
"completed": true,
66-
"id": 21
56+
"id": 17
6757
}
6858
]
6959
}

src/components/DeleteModal.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<template>
22
<Modal>
3-
<template v-slot:title>
3+
<template #title>
44
Delete Todo
55
</template>
6-
<template v-slot:body>
6+
<template #body>
77
Are you sure you want to delete this todo?
88
</template>
9-
<template v-slot:footer>
9+
<template #footer>
1010
<button
1111
type="button"
1212
class="btn btn-secondary"

src/components/List.vue

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<template>
2+
<div
3+
v-for="(item, index) in items"
4+
:key="item.id"
5+
class="card mt-2"
6+
>
7+
<slot :item="item" :index="index"></slot>
8+
</div>
9+
</template>
10+
11+
<script>
12+
export default {
13+
props: {
14+
items: {
15+
type: Array,
16+
required: true
17+
}
18+
}
19+
}
20+
</script>
21+
22+
<style>
23+
24+
</style>

src/components/TodoList.vue

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,54 @@
11
<template>
2-
<div
3-
v-for="(todo, index) in todos"
4-
:key="todo.id"
5-
class="card mt-2"
6-
>
2+
<List :items="todos">
3+
<template #default="{ item, index }">
74
<div
85
class="card-body p-2 d-flex align-items-center"
96
style="cursor: pointer"
10-
@click="moveToPage(todo.id)"
7+
@click="moveToPage(item.id)"
118
>
129
<div class="flex-grow-1">
1310
<input
1411
class="ml-2 mr-2"
1512
type="checkbox"
16-
:checked="todo.completed"
13+
:checked="item.completed"
1714
@change="toggleTodo(index, $event)"
1815
@click.stop
1916
>
20-
<span :class="{ todo: todo.completed }">
21-
{{ todo.subject }}
17+
<span :class="{ todo: item.completed }">
18+
{{ item.subject }}
2219
</span>
2320
</div>
2421
<div>
2522
<button
2623
class="btn btn-danger btn-sm"
27-
@click.stop="openModal(todo.id)"
24+
@click.stop="openModal(item.id)"
2825
>
2926
Delete
3027
</button>
3128
</div>
3229
</div>
33-
</div>
34-
<teleport to="#modal">
35-
<Modal
36-
v-if="showModal"
37-
@close="closeModal"
38-
@delete="deleteTodo"
39-
/>
40-
</teleport>
30+
</template>
31+
</List>
32+
33+
<teleport to="#modal">
34+
<Modal
35+
v-if="showModal"
36+
@close="closeModal"
37+
@delete="deleteTodo"
38+
/>
39+
</teleport>
4140
</template>
4241

4342
<script>
4443
import { useRouter } from 'vue-router';
4544
import Modal from '@/components/DeleteModal.vue';
4645
import { ref } from 'vue';
46+
import List from '@/components/List.vue';
4747
4848
export default {
4949
components: {
50-
Modal
50+
Modal,
51+
List
5152
},
5253
props: {
5354
todos: {

0 commit comments

Comments
 (0)