Skip to content

Commit 91ee8e8

Browse files
vvnsrznnsarrazin
andauthored
refactor: migrating ScrollToBottomBtn to svelte-5 (huggingface#1709)
* refactor: migrating ScrollToBottomBtn to svelte-5 * fix: infinite loop on the scrolltobottom effect --------- Co-authored-by: Nathan Sarrazin <[email protected]>
1 parent 84593da commit 91ee8e8

File tree

1 file changed

+13
-17
lines changed

1 file changed

+13
-17
lines changed

src/lib/components/ScrollToBottomBtn.svelte

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
<script lang="ts">
2-
import { run } from "svelte/legacy";
3-
42
import { fade } from "svelte/transition";
5-
import { onDestroy } from "svelte";
63
import IconChevron from "./icons/IconChevron.svelte";
74
8-
let visible = $state(false);
95
interface Props {
106
scrollNode: HTMLElement;
117
class?: string;
128
}
139
1410
let { scrollNode, class: className = "" }: Props = $props();
11+
12+
let visible = $state(false);
1513
let observer: ResizeObserver | null = $state(null);
1614
1715
function updateVisibility() {
@@ -24,20 +22,18 @@
2422
observer?.disconnect();
2523
scrollNode?.removeEventListener("scroll", updateVisibility);
2624
}
27-
28-
onDestroy(destroy);
29-
run(() => {
30-
if (scrollNode) {
31-
destroy();
32-
33-
if (window.ResizeObserver) {
34-
observer = new ResizeObserver(() => {
35-
updateVisibility();
36-
});
37-
observer.observe(scrollNode);
25+
const cleanup = $effect.root(() => {
26+
$effect(() => {
27+
if (scrollNode) {
28+
if (window.ResizeObserver) {
29+
observer = new ResizeObserver(() => updateVisibility());
30+
observer.observe(scrollNode);
31+
cleanup();
32+
}
33+
scrollNode?.addEventListener("scroll", updateVisibility);
3834
}
39-
scrollNode.addEventListener("scroll", updateVisibility);
40-
}
35+
});
36+
return () => destroy();
4137
});
4238
</script>
4339

0 commit comments

Comments
 (0)