refactor(app): lift parent session navigation (#33782)
This commit is contained in:
parent
259e153d10
commit
fed8f01016
2 changed files with 13 additions and 14 deletions
|
|
@ -29,7 +29,7 @@ import { previewSelectedLines } from "@opencode-ai/session-ui/pierre/selection-b
|
||||||
import { Button } from "@opencode-ai/ui/button"
|
import { Button } from "@opencode-ai/ui/button"
|
||||||
import { showToast } from "@/utils/toast"
|
import { showToast } from "@/utils/toast"
|
||||||
import { base64Encode, checksum } from "@opencode-ai/core/util/encode"
|
import { base64Encode, checksum } from "@opencode-ai/core/util/encode"
|
||||||
import { useLocation, useSearchParams } from "@solidjs/router"
|
import { useLocation, useNavigate, useSearchParams } from "@solidjs/router"
|
||||||
import { NewSessionView, SessionHeader } from "@/components/session"
|
import { NewSessionView, SessionHeader } from "@/components/session"
|
||||||
import { useComments } from "@/context/comments"
|
import { useComments } from "@/context/comments"
|
||||||
import { useServerSync } from "@/context/server-sync"
|
import { useServerSync } from "@/context/server-sync"
|
||||||
|
|
@ -66,6 +66,7 @@ import { diffs as list } from "@/utils/diffs"
|
||||||
import { Persist, persisted } from "@/utils/persist"
|
import { Persist, persisted } from "@/utils/persist"
|
||||||
import { extractPromptFromParts } from "@/utils/prompt"
|
import { extractPromptFromParts } from "@/utils/prompt"
|
||||||
import { formatServerError } from "@/utils/server-errors"
|
import { formatServerError } from "@/utils/server-errors"
|
||||||
|
import { legacySessionHref, requireServerKey, sessionHref } from "@/utils/session-route"
|
||||||
import { useUsageExceededDialogs } from "./session/usage-exceeded-dialogs"
|
import { useUsageExceededDialogs } from "./session/usage-exceeded-dialogs"
|
||||||
import { createSessionOwnership } from "./session/session-ownership"
|
import { createSessionOwnership } from "./session/session-ownership"
|
||||||
|
|
||||||
|
|
@ -123,6 +124,7 @@ export default function Page() {
|
||||||
const terminal = useTerminal()
|
const terminal = useTerminal()
|
||||||
const [searchParams, setSearchParams] = useSearchParams<{ prompt?: string }>()
|
const [searchParams, setSearchParams] = useSearchParams<{ prompt?: string }>()
|
||||||
const location = useLocation()
|
const location = useLocation()
|
||||||
|
const navigate = useNavigate()
|
||||||
const { params, sessionKey, workspaceKey, tabs, view } = useSessionLayout()
|
const { params, sessionKey, workspaceKey, tabs, view } = useSessionLayout()
|
||||||
const sessionOwnership = createSessionOwnership(sessionKey)
|
const sessionOwnership = createSessionOwnership(sessionKey)
|
||||||
const newSessionDesign = createMemo(() => settings.general.newLayoutDesigns())
|
const newSessionDesign = createMemo(() => settings.general.newLayoutDesigns())
|
||||||
|
|
@ -1562,6 +1564,13 @@ export default function Page() {
|
||||||
ready={!store.deferRender && messagesReady()}
|
ready={!store.deferRender && messagesReady()}
|
||||||
centered={placement === "dock" && centered()}
|
centered={placement === "dock" && centered()}
|
||||||
placement={placement}
|
placement={placement}
|
||||||
|
openParent={() => {
|
||||||
|
const id = info()?.parentID
|
||||||
|
if (!id) return
|
||||||
|
navigate(
|
||||||
|
params.serverKey ? sessionHref(requireServerKey(params.serverKey), id) : legacySessionHref(sdk().directory, id),
|
||||||
|
)
|
||||||
|
}}
|
||||||
inputRef={(el) => {
|
inputRef={(el) => {
|
||||||
inputRef = el
|
inputRef = el
|
||||||
}}
|
}}
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ import { ServerConnection, useServer } from "@/context/server"
|
||||||
import { type DraftTab, useTabs } from "@/context/tabs"
|
import { type DraftTab, useTabs } from "@/context/tabs"
|
||||||
import { useDirectoryPicker } from "@/components/directory-picker"
|
import { useDirectoryPicker } from "@/components/directory-picker"
|
||||||
import { base64Encode } from "@opencode-ai/core/util/encode"
|
import { base64Encode } from "@opencode-ai/core/util/encode"
|
||||||
import { legacySessionHref, requireServerKey, sessionHref } from "@/utils/session-route"
|
|
||||||
import { useGlobal } from "@/context/global"
|
import { useGlobal } from "@/context/global"
|
||||||
|
|
||||||
export function SessionComposerRegion(props: {
|
export function SessionComposerRegion(props: {
|
||||||
|
|
@ -37,6 +36,7 @@ export function SessionComposerRegion(props: {
|
||||||
ready: boolean
|
ready: boolean
|
||||||
centered: boolean
|
centered: boolean
|
||||||
placement?: "dock" | "inline"
|
placement?: "dock" | "inline"
|
||||||
|
openParent?: () => void
|
||||||
inputRef: (el: HTMLDivElement) => void
|
inputRef: (el: HTMLDivElement) => void
|
||||||
newSessionWorktree: string
|
newSessionWorktree: string
|
||||||
onNewSessionWorktreeReset: () => void
|
onNewSessionWorktreeReset: () => void
|
||||||
|
|
@ -225,16 +225,6 @@ export function SessionComposerRegion(props: {
|
||||||
const lift = createMemo(() => (rolled() ? 18 : 36 * value()))
|
const lift = createMemo(() => (rolled() ? 18 : 36 * value()))
|
||||||
const full = createMemo(() => Math.max(78, store.height))
|
const full = createMemo(() => Math.max(78, store.height))
|
||||||
|
|
||||||
const openParent = () => {
|
|
||||||
const id = parentID()
|
|
||||||
if (!id) return
|
|
||||||
navigate(
|
|
||||||
route.params.serverKey
|
|
||||||
? sessionHref(requireServerKey(route.params.serverKey), id)
|
|
||||||
: legacySessionHref(sdk().directory, id),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
createEffect(() => {
|
createEffect(() => {
|
||||||
const el = store.body
|
const el = store.body
|
||||||
if (!el) return
|
if (!el) return
|
||||||
|
|
@ -392,11 +382,11 @@ export function SessionComposerRegion(props: {
|
||||||
class="w-full rounded-[12px] border border-border-weak-base bg-background-base p-3 text-16-regular text-text-weak"
|
class="w-full rounded-[12px] border border-border-weak-base bg-background-base p-3 text-16-regular text-text-weak"
|
||||||
>
|
>
|
||||||
<span>{language.t("session.child.promptDisabled")} </span>
|
<span>{language.t("session.child.promptDisabled")} </span>
|
||||||
<Show when={parentID()}>
|
<Show when={parentID() && props.openParent}>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="text-text-base transition-colors hover:text-text-strong"
|
class="text-text-base transition-colors hover:text-text-strong"
|
||||||
onClick={openParent}
|
onClick={props.openParent}
|
||||||
>
|
>
|
||||||
{language.t("session.child.backToParent")}
|
{language.t("session.child.backToParent")}
|
||||||
</button>
|
</button>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue