Skip to content

Commit 097d819

Browse files
committed
refactor: deprecated event dispatcher
1 parent 995cfa3 commit 097d819

File tree

3 files changed

+20
-27
lines changed

3 files changed

+20
-27
lines changed

src/App.svelte

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,15 @@
100100
}
101101
};
102102
103-
const handleRemove = (event: CustomEvent<ItemDeleteEvent>) => {
104-
todoStore.remove(event.detail.id);
103+
const handleRemove = (item: ItemDeleteEvent) => {
104+
todoStore.remove(item.id);
105105
};
106106
107-
const handleEdit = (event: CustomEvent<ItemEditEvent>) => {
108-
const matchedTodo = todoStore.todos.find((todo) => todo.id === event.detail.id);
107+
const handleEdit = (item: ItemEditEvent) => {
108+
const matchedTodo = todoStore.todos.find((todo) => todo.id === item.id);
109109
110110
if (!matchedTodo) {
111-
console.warn(`Todo item with id ${event.detail.id} not found.`);
111+
console.warn(`Todo item with id ${item.id} not found.`);
112112
return;
113113
}
114114
@@ -168,11 +168,11 @@
168168

169169
<section class="list-todo-wrapper">
170170
<ui5-panel class="list-todos-panel" header-text="Incompleted Tasks" collapsed={!undoneTodos.length || undefined}>
171-
<TodoList items={undoneTodos} on:item-edit={handleEdit} on:item-delete={handleRemove} on:selection-change={handleToggleDone} />
171+
<TodoList items={undoneTodos} onEdit={handleEdit} onDelete={handleRemove} onSelectionChange={handleToggleDone} />
172172
</ui5-panel>
173173

174174
<ui5-panel class="list-todos-panel" header-text="Completed Tasks" collapsed={!doneTodos.length || undefined}>
175-
<TodoList items={doneTodos} on:item-edit={handleEdit} on:item-delete={handleRemove} on:selection-change={handleToggleDone} />
175+
<TodoList items={doneTodos} onEdit={handleEdit} onDelete={handleRemove} onSelectionChange={handleToggleDone} />
176176
</ui5-panel>
177177
</section>
178178
</section>

src/lib/TodoItem.svelte

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<script lang="ts">
2-
import { createEventDispatcher } from "svelte";
32
import "@ui5/webcomponents/dist/ListItemCustom";
43
import type { TodoItemT } from "../types/TodoItem.type";
54
import type { ItemEditEvent, ItemDeleteEvent } from "./todoitem.event";
@@ -8,26 +7,18 @@
87
// Props
98
item: TodoItemT;
109
datakey: number;
10+
onDelete(item: ItemDeleteEvent): void;
11+
onEdit(item: ItemEditEvent): void;
1112
}
1213
13-
let { item, datakey }: Props = $props();
14-
15-
// Events do not bubble from nested components
16-
// in svelte, we must dispatch them
17-
const dispatcher = createEventDispatcher();
14+
let { item, datakey, onEdit, onDelete }: Props = $props();
1815
1916
const handleEditPress = () => {
20-
const event: ItemEditEvent = {
21-
id: item.id,
22-
};
23-
dispatcher<string>("item-edit", event);
17+
onEdit({ id: item.id });
2418
};
2519
2620
const handleDeletePress = () => {
27-
const event: ItemDeleteEvent = {
28-
id: item.id,
29-
};
30-
dispatcher("item-delete", event);
21+
onDelete({ id: item.id });
3122
};
3223
</script>
3324

src/lib/TodoList.svelte

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
<script lang="ts">
2-
import { createBubbler } from 'svelte/legacy';
3-
4-
const bubble = createBubbler();
52
import "@ui5/webcomponents/dist/List";
63
74
import TodoItem from "./TodoItem.svelte";
85
import type { TodoItemT } from "../types/TodoItem.type";
6+
import type { ItemDeleteEvent, ItemEditEvent } from "./todoitem.event";
7+
import type { ListSelectionChangeEventDetail } from "@ui5/webcomponents/dist/List.js";
98
109
interface Props {
1110
items: TodoItemT[];
11+
onEdit(item: ItemEditEvent): void;
12+
onDelete(item: ItemDeleteEvent): void;
13+
onSelectionChange(event: CustomEvent<ListSelectionChangeEventDetail>): void;
1214
}
1315
14-
let { items }: Props = $props();
16+
let { items, onEdit, onDelete, onSelectionChange }: Props = $props();
1517
</script>
1618

17-
<ui5-list selection-mode="Multiple" onselection-change={bubble('selection-change')}>
19+
<ui5-list selection-mode="Multiple" onselection-change={(event: CustomEvent<ListSelectionChangeEventDetail>) => onSelectionChange(event)}>
1820
{#each items as item (item.id)}
19-
<TodoItem {item} datakey={item.id} on:item-edit on:item-delete />
21+
<TodoItem {item} datakey={item.id} {onEdit} {onDelete} />
2022
{/each}
2123
</ui5-list>
2224

0 commit comments

Comments
 (0)