Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: David Hill <1879069+iamdavidhill@users.noreply.github.com> Co-authored-by: BB84 <110078428+BB-84C@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: Jay V <air@live.ca> Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Dustin Deus <deusdustin@gmail.com> Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com> Co-authored-by: Jack <jack@anoma.ly> Co-authored-by: Sebastian <hasta84@gmail.com> Co-authored-by: Jérôme Benoit <jerome.benoit@sap.com> Co-authored-by: Test User <test@test.com> Co-authored-by: Simon Klee <hello@simonklee.dk> Co-authored-by: Rahul A Mistry <149420892+ProdigyRahul@users.noreply.github.com> Co-authored-by: Qiping Li <liqiping1991@gmail.com> Co-authored-by: liqiping <liqiping@msh.team> Co-authored-by: OpeOginni <107570612+OpeOginni@users.noreply.github.com> Co-authored-by: Matthias Reso <13337103+mreso@users.noreply.github.com> Co-authored-by: tobwen <1864057+tobwen@users.noreply.github.com> Co-authored-by: Daniel Polito <danielbpolito@gmail.com> Co-authored-by: opencode <noreply@opencode.ai> Co-authored-by: Devin R Leopold <devin.leopold@gmail.com> Co-authored-by: Zach Bruggeman <mail@bruggie.com> Co-authored-by: Zach Bruggeman <zbruggeman@ramp.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: David Siewert <david1gruppenplan@gmail.com> Co-authored-by: Andrei Dziahel <develop7@develop7.info> Co-authored-by: adityachaudhary99 <adityaachaudhary2003@gmail.com> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com> Co-authored-by: Matt Carey <mcarey@cloudflare.com>
49 lines
1.9 KiB
TypeScript
49 lines
1.9 KiB
TypeScript
import { createPromptProjectController } from "@/components/prompt-project-selector"
|
|
import { useTitlebarRightMount } from "@/components/titlebar"
|
|
import { useSettings } from "@/context/settings"
|
|
import { createEffect, createResource } from "solid-js"
|
|
import { createNewSessionDraftController } from "./new-session/new-session-draft-controller"
|
|
import { NewSessionStatus, NewSessionView } from "./new-session/new-session-view"
|
|
import { createNewSessionWorkspaceController } from "./new-session/new-session-workspace-controller"
|
|
import { useNewSessionCommands } from "./new-session/use-new-session-commands"
|
|
|
|
/** The draft-only V2 session page. Submitting promotes the draft into a real session. */
|
|
export default function NewSessionPage() {
|
|
const settings = useSettings()
|
|
const rightMount = useTitlebarRightMount()
|
|
const workspace = createNewSessionWorkspaceController()
|
|
const draft = createNewSessionDraftController({
|
|
worktree: workspace.selection.value,
|
|
resetWorktree: workspace.selection.reset,
|
|
})
|
|
const project = createPromptProjectController({
|
|
controls: draft.project.controls,
|
|
onDone: draft.input.restoreFocus,
|
|
})
|
|
useNewSessionCommands({
|
|
restoreFocus: draft.input.restoreFocus,
|
|
project: {
|
|
empty: project.empty,
|
|
open: () => project.setOpen(true),
|
|
},
|
|
})
|
|
createEffect(() => {
|
|
if (!draft.prompt.ready()) return
|
|
draft.input.restoreFocus()
|
|
})
|
|
const ready = Promise.resolve()
|
|
const [suspendUntilPromptReady] = createResource(
|
|
() => draft.prompt.readyPromise() ?? ready,
|
|
(promise) => promise.then(() => true),
|
|
)
|
|
|
|
return (
|
|
<div class="relative size-full overflow-hidden flex flex-col">
|
|
{suspendUntilPromptReady()}
|
|
<NewSessionStatus mount={rightMount} visible={settings.visibility.status} />
|
|
<div class="flex-1 min-h-0 flex flex-col gap-2 p-2">
|
|
<NewSessionView input={draft.input} project={project} workspace={workspace} />
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|