Radish alpha
r
rad:z4D5UCArafTzTQpDZNQRuqswh3ury
Radicle desktop app
Radicle
Git
Await event listeners and unlisten on unmount
Merged did:key:z6MkkfM3...sVz5 opened 1 year ago
1 file changed +20 -9 d4825ab1 4d81bf53
modified src/App.svelte
@@ -1,5 +1,5 @@
<script lang="ts">
-
  import { onMount } from "svelte";
+
  import { onDestroy, onMount } from "svelte";

  import { invoke } from "@tauri-apps/api/core";
  import { listen } from "@tauri-apps/api/event";
@@ -18,22 +18,26 @@

  const activeRouteStore = router.activeRouteStore;

+
  type UnlistenFn = () => void;
+
  let unlistenEvents: UnlistenFn | undefined = undefined;
+
  let unlistenNodeEvents: UnlistenFn | undefined = undefined;
+

  onMount(async () => {
-
    try {
-
      await listen("event", event => {
-
        console.log(event.payload);
-
      });
+
    unlistenEvents = await listen("event", event => {
+
      console.log(event.payload);
+
    });

-
      await listen<boolean>("node_running", event => {
-
        nodeRunning.set(event.payload);
-
      });
+
    unlistenNodeEvents = await listen<boolean>("node_running", event => {
+
      nodeRunning.set(event.payload);
+
    });
+

+
    try {
      // For development purposes don't run tauri commands when viewing from
      // a browser.
      if (window.__TAURI_INTERNALS__) {
        await invoke("authenticate");
      }

-
      void router.loadFromLocation();
      // eslint-disable-next-line @typescript-eslint/no-explicit-any
    } catch (e: any) {
      void router.push({
@@ -43,9 +47,16 @@
          hint: e.hint,
        },
      });
+
    } finally {
+
      void router.loadFromLocation();
    }
  });

+
  onDestroy(() => {
+
    if (unlistenEvents) unlistenEvents();
+
    if (unlistenNodeEvents) unlistenNodeEvents();
+
  });
+

  $: document.documentElement.setAttribute("data-theme", $theme);
</script>