Vivian nsarrazin HF Staff commited on
Commit
99ce0c3
·
unverified ·
1 Parent(s): 648b4e8

refactor: migrating ScrollToBottomBtn to svelte-5 (#1709)

Browse files

* refactor: migrating ScrollToBottomBtn to svelte-5

* fix: infinite loop on the scrolltobottom effect

---------

Co-authored-by: Nathan Sarrazin <[email protected]>

src/lib/components/ScrollToBottomBtn.svelte CHANGED
@@ -1,17 +1,15 @@
1
  <script lang="ts">
2
- import { run } from "svelte/legacy";
3
-
4
  import { fade } from "svelte/transition";
5
- import { onDestroy } from "svelte";
6
  import IconChevron from "./icons/IconChevron.svelte";
7
 
8
- let visible = $state(false);
9
  interface Props {
10
  scrollNode: HTMLElement;
11
  class?: string;
12
  }
13
 
14
  let { scrollNode, class: className = "" }: Props = $props();
 
 
15
  let observer: ResizeObserver | null = $state(null);
16
 
17
  function updateVisibility() {
@@ -24,20 +22,18 @@
24
  observer?.disconnect();
25
  scrollNode?.removeEventListener("scroll", updateVisibility);
26
  }
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);
38
  }
39
- scrollNode.addEventListener("scroll", updateVisibility);
40
- }
41
  });
42
  </script>
43
 
 
1
  <script lang="ts">
 
 
2
  import { fade } from "svelte/transition";
 
3
  import IconChevron from "./icons/IconChevron.svelte";
4
 
 
5
  interface Props {
6
  scrollNode: HTMLElement;
7
  class?: string;
8
  }
9
 
10
  let { scrollNode, class: className = "" }: Props = $props();
11
+
12
+ let visible = $state(false);
13
  let observer: ResizeObserver | null = $state(null);
14
 
15
  function updateVisibility() {
 
22
  observer?.disconnect();
23
  scrollNode?.removeEventListener("scroll", updateVisibility);
24
  }
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);
 
 
34
  }
35
+ });
36
+ return () => destroy();
37
  });
38
  </script>
39