summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/pages/session/use-session-hash-scroll.ts
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-03-02 10:50:50 -0600
committerGitHub <[email protected]>2026-03-02 10:50:50 -0600
commit8176bafc555e562ade48a675dffa3f38751ed8c9 (patch)
tree7d4b0f6e98f431999b89c1f24687f6f53bd0bc6b /packages/app/src/pages/session/use-session-hash-scroll.ts
parent0a3a3216db5974efd3edc9a213054fd97d8dbd34 (diff)
downloadopencode-8176bafc555e562ade48a675dffa3f38751ed8c9.tar.gz
opencode-8176bafc555e562ade48a675dffa3f38751ed8c9.zip
chore(app): solidjs refactoring (#13399)
Diffstat (limited to 'packages/app/src/pages/session/use-session-hash-scroll.ts')
-rw-r--r--packages/app/src/pages/session/use-session-hash-scroll.ts36
1 files changed, 22 insertions, 14 deletions
diff --git a/packages/app/src/pages/session/use-session-hash-scroll.ts b/packages/app/src/pages/session/use-session-hash-scroll.ts
index 235714588..c5a7dde9e 100644
--- a/packages/app/src/pages/session/use-session-hash-scroll.ts
+++ b/packages/app/src/pages/session/use-session-hash-scroll.ts
@@ -1,4 +1,4 @@
-import { createEffect, createMemo, on, onCleanup } from "solid-js"
+import { createEffect, createMemo, onCleanup, onMount } from "solid-js"
import { UserMessage } from "@opencode-ai/sdk/v2"
export const messageIdFromHash = (hash: string) => {
@@ -28,6 +28,7 @@ export const useSessionHashScroll = (input: {
const visibleUserMessages = createMemo(() => input.visibleUserMessages())
const messageById = createMemo(() => new Map(visibleUserMessages().map((m) => [m.id, m])))
const messageIndex = createMemo(() => new Map(visibleUserMessages().map((m, i) => [m.id, i])))
+ let pendingKey = ""
const clearMessageHash = () => {
if (!window.location.hash) return
@@ -130,15 +131,6 @@ export const useSessionHashScroll = (input: {
if (el) input.scheduleScrollState(el)
}
- createEffect(
- on(input.sessionKey, (key) => {
- if (!input.sessionID()) return
- const messageID = input.consumePendingMessage(key)
- if (!messageID) return
- input.setPendingMessage(messageID)
- }),
- )
-
createEffect(() => {
if (!input.sessionID() || !input.messagesReady()) return
requestAnimationFrame(() => applyHash("auto"))
@@ -150,7 +142,20 @@ export const useSessionHashScroll = (input: {
visibleUserMessages()
input.turnStart()
- const targetId = input.pendingMessage() ?? messageIdFromHash(window.location.hash)
+ let targetId = input.pendingMessage()
+ if (!targetId) {
+ const key = input.sessionKey()
+ if (pendingKey !== key) {
+ pendingKey = key
+ const next = input.consumePendingMessage(key)
+ if (next) {
+ input.setPendingMessage(next)
+ targetId = next
+ }
+ }
+ }
+
+ if (!targetId) targetId = messageIdFromHash(window.location.hash)
if (!targetId) return
if (input.currentMessageId() === targetId) return
@@ -162,9 +167,12 @@ export const useSessionHashScroll = (input: {
requestAnimationFrame(() => scrollToMessage(msg, "auto"))
})
- createEffect(() => {
- if (!input.sessionID() || !input.messagesReady()) return
- const handler = () => requestAnimationFrame(() => applyHash("auto"))
+ onMount(() => {
+ const handler = () => {
+ if (!input.sessionID() || !input.messagesReady()) return
+ requestAnimationFrame(() => applyHash("auto"))
+ }
+
window.addEventListener("hashchange", handler)
onCleanup(() => window.removeEventListener("hashchange", handler))
})