diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx index f983ace80c..b30d2309ab 100644 --- a/packages/app/src/app.tsx +++ b/packages/app/src/app.tsx @@ -48,22 +48,17 @@ import { ErrorPage } from "./pages/error" import { useCheckServerHealth } from "./utils/server-health" const HomeRoute = lazy(() => import("@/pages/home")) -const loadSession = () => import("@/pages/session") -const Session = lazy(loadSession) -const Loading = () =>
+const Session = lazy(() => import("@/pages/session")) -if (typeof location === "object" && /\/session(?:\/|$)/.test(location.pathname)) { - void loadSession() -} - -const SessionRoute = () => ( - - - +const SessionRoute = Object.assign( + () => ( + + + + ), + { preload: Session.preload }, ) -const SessionIndexRoute = () => - function UiI18nBridge(props: ParentProps) { const language = useLanguage() return {props.children} @@ -317,7 +312,7 @@ export function AppInterface(props: { > - + } /> diff --git a/packages/app/src/components/titlebar.tsx b/packages/app/src/components/titlebar.tsx index 4ffcedd7c8..caae3a8905 100644 --- a/packages/app/src/components/titlebar.tsx +++ b/packages/app/src/components/titlebar.tsx @@ -223,19 +223,13 @@ export function Titlebar(props: { update?: TitlebarUpdate }) { const navigate = useNavigate() const homeMatch = useMatch(() => "/") - const openNewSession = () => { - if (params.dir) { - navigate(`/${params.dir}/session`) - return - } + const newSessionHref = () => { + if (params.dir) return `/${params.dir}/session` const project = layout.projects.list()[0] - if (!project) { - navigate("/") - return - } + if (!project) return "/" - navigate(`/${base64Encode(project.worktree)}/session`) + return `/${base64Encode(project.worktree)}/session` } type Tab = { dir: string; sessionId: string; href: string } @@ -313,13 +307,21 @@ export function Titlebar(props: { update?: TitlebarUpdate }) { return true } + const closeNewSessionTab = () => { + if (!(params.dir && !params.id)) return false + const last = tabsStore[tabsStore.length - 1] + if (last) navigate(last.href) + else navigate("/") + return true + } + makeEventListener( document, "keydown", (event) => { if (!event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return if (event.key.toLowerCase() !== "w") return - if (!closeCurrentSessionTab()) return + if (!(closeCurrentSessionTab() || closeNewSessionTab())) return event.preventDefault() event.stopPropagation() @@ -391,7 +393,8 @@ export function Titlebar(props: { update?: TitlebarUpdate }) { size="large" class="shrink-0" icon={} - onClick={openNewSession} + as="a" + href={newSessionHref()} aria-label={language.t("command.session.new")} /> }