Skip to content

Commit 6b42440

Browse files
committed
feat(share): add message query param for deep linking to specific messages
1 parent e709808 commit 6b42440

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

packages/enterprise/src/routes/share/[shareID].tsx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { DataProvider } from "@opencode-ai/ui/context"
55
import { DiffComponentProvider } from "@opencode-ai/ui/context/diff"
66
import { CodeComponentProvider } from "@opencode-ai/ui/context/code"
77
import { WorkerPoolProvider } from "@opencode-ai/ui/context/worker-pool"
8-
import { createAsync, query, useParams } from "@solidjs/router"
8+
import { createAsync, query, useParams, useSearchParams } from "@solidjs/router"
99
import { createEffect, createMemo, ErrorBoundary, For, Match, Show, Switch } from "solid-js"
1010
import { Share } from "~/core/share"
1111
import { Logo, Mark } from "@opencode-ai/ui/logo"
@@ -222,8 +222,12 @@ export default function () {
222222
<CodeComponentProvider component={ClientOnlyCode}>
223223
<DataProvider data={data()} directory={info().directory}>
224224
{iife(() => {
225+
const [searchParams, setSearchParams] = useSearchParams()
226+
const getMessageId = () => {
227+
const msg = searchParams.message
228+
return Array.isArray(msg) ? msg[0] : msg
229+
}
225230
const [store, setStore] = createStore({
226-
messageId: undefined as string | undefined,
227231
expandedSteps: {} as Record<string, boolean>,
228232
})
229233
const messages = createMemo(() =>
@@ -235,13 +239,13 @@ export default function () {
235239
)
236240
const firstUserMessage = createMemo(() => messages().at(0))
237241
const activeMessage = createMemo(
238-
() => messages().find((m) => m.id === store.messageId) ?? firstUserMessage(),
242+
() => messages().find((m) => m.id === getMessageId()) ?? firstUserMessage(),
239243
)
240244
function setActiveMessage(message: UserMessage | undefined) {
241245
if (message) {
242-
setStore("messageId", message.id)
246+
setSearchParams({ message: message.id }, { replace: true })
243247
} else {
244-
setStore("messageId", undefined)
248+
setSearchParams({ message: undefined }, { replace: true })
245249
}
246250
}
247251
const provider = createMemo(() => activeMessage()?.model?.providerID)
@@ -374,12 +378,12 @@ export default function () {
374378
</Show>
375379
<SessionTurn
376380
sessionID={data().sessionID}
377-
messageID={store.messageId ?? firstUserMessage()!.id!}
381+
messageID={getMessageId() ?? firstUserMessage()!.id!}
378382
stepsExpanded={
379-
store.expandedSteps[store.messageId ?? firstUserMessage()!.id!] ?? false
383+
store.expandedSteps[getMessageId() ?? firstUserMessage()!.id!] ?? false
380384
}
381385
onStepsExpandedToggle={() => {
382-
const id = store.messageId ?? firstUserMessage()!.id!
386+
const id = getMessageId() ?? firstUserMessage()!.id!
383387
setStore("expandedSteps", id, (v) => !v)
384388
}}
385389
classes={{

0 commit comments

Comments
 (0)