summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context
diff options
context:
space:
mode:
authorBrendan Allan <[email protected]>2026-04-02 17:40:03 +0800
committerGitHub <[email protected]>2026-04-02 09:40:03 +0000
commit69d047ae7dd84d4c4de41e09b1ecee88e3fdc3d3 (patch)
tree832dc97a20d9e1ee0ac4fba7b9daa689691a18c3 /packages/app/src/context
parent327f62526a7f60c1c67ae017d1b105466bb730e9 (diff)
downloadopencode-69d047ae7dd84d4c4de41e09b1ecee88e3fdc3d3.tar.gz
opencode-69d047ae7dd84d4c4de41e09b1ecee88e3fdc3d3.zip
cleanup event listeners with solid-primitives/event-listener (#20619)
Diffstat (limited to 'packages/app/src/context')
-rw-r--r--packages/app/src/context/command.tsx7
-rw-r--r--packages/app/src/context/global-sdk.tsx24
-rw-r--r--packages/app/src/context/layout.tsx7
3 files changed, 15 insertions, 23 deletions
diff --git a/packages/app/src/context/command.tsx b/packages/app/src/context/command.tsx
index 65805f40c..d2238828c 100644
--- a/packages/app/src/context/command.tsx
+++ b/packages/app/src/context/command.tsx
@@ -2,6 +2,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context"
import { useDialog } from "@opencode-ai/ui/context/dialog"
import { type Accessor, createEffect, createMemo, onCleanup, onMount } from "solid-js"
import { createStore } from "solid-js/store"
+import { makeEventListener } from "@solid-primitives/event-listener"
import { useLanguage } from "@/context/language"
import { useSettings } from "@/context/settings"
import { dict as en } from "@/i18n/en"
@@ -378,11 +379,7 @@ export const { use: useCommand, provider: CommandProvider } = createSimpleContex
}
onMount(() => {
- document.addEventListener("keydown", handleKeyDown)
- })
-
- onCleanup(() => {
- document.removeEventListener("keydown", handleKeyDown)
+ makeEventListener(document, "keydown", handleKeyDown)
})
function register(cb: () => CommandOption[]): void
diff --git a/packages/app/src/context/global-sdk.tsx b/packages/app/src/context/global-sdk.tsx
index d240f9eef..1205a8fa8 100644
--- a/packages/app/src/context/global-sdk.tsx
+++ b/packages/app/src/context/global-sdk.tsx
@@ -1,7 +1,8 @@
import type { Event } from "@opencode-ai/sdk/v2/client"
import { createSimpleContext } from "@opencode-ai/ui/context"
import { createGlobalEmitter } from "@solid-primitives/event-bus"
-import { batch, onCleanup } from "solid-js"
+import { makeEventListener } from "@solid-primitives/event-listener"
+import { batch, onCleanup, onMount } from "solid-js"
import z from "zod"
import { createSdkForServer } from "@/utils/server"
import { useLanguage } from "./language"
@@ -206,21 +207,16 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
clearHeartbeat()
}
- const onVisibility = () => {
- if (typeof document === "undefined") return
- if (document.visibilityState !== "visible") return
- if (!started) return
- if (Date.now() - lastEventAt < HEARTBEAT_TIMEOUT_MS) return
- attempt?.abort()
- }
- if (typeof document !== "undefined") {
- document.addEventListener("visibilitychange", onVisibility)
- }
+ onMount(() => {
+ makeEventListener(document, "visibilitychange", () => {
+ if (document.visibilityState !== "visible") return
+ if (!started) return
+ if (Date.now() - lastEventAt < HEARTBEAT_TIMEOUT_MS) return
+ attempt?.abort()
+ })
+ })
onCleanup(() => {
- if (typeof document !== "undefined") {
- document.removeEventListener("visibilitychange", onVisibility)
- }
stop()
abort.abort()
flush()
diff --git a/packages/app/src/context/layout.tsx b/packages/app/src/context/layout.tsx
index aafa4fb66..bab3d39f3 100644
--- a/packages/app/src/context/layout.tsx
+++ b/packages/app/src/context/layout.tsx
@@ -1,6 +1,7 @@
import { createStore, produce } from "solid-js/store"
import { batch, createEffect, createMemo, onCleanup, onMount, type Accessor } from "solid-js"
import { createSimpleContext } from "@opencode-ai/ui/context"
+import { makeEventListener } from "@solid-primitives/event-listener"
import { useGlobalSync } from "./global-sync"
import { useGlobalSDK } from "./global-sdk"
import { useServer } from "./server"
@@ -366,12 +367,10 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
flush()
}
- window.addEventListener("pagehide", flush)
- document.addEventListener("visibilitychange", handleVisibility)
+ makeEventListener(window, "pagehide", flush)
+ makeEventListener(document, "visibilitychange", handleVisibility)
onCleanup(() => {
- window.removeEventListener("pagehide", flush)
- document.removeEventListener("visibilitychange", handleVisibility)
scroll.dispose()
})
})