diff options
| author | Kit Langton <[email protected]> | 2026-02-07 14:21:50 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-07 13:21:50 -0600 |
| commit | 9401029b1dda6f39823221f3424bbc878a00ad72 (patch) | |
| tree | a8217df850d0784e0e3c8fd40f23a8a03884749a | |
| parent | 04f216902bfb517e88ffbfbe7dcf0d7767671ba6 (diff) | |
| download | opencode-9401029b1dda6f39823221f3424bbc878a00ad72.tar.gz opencode-9401029b1dda6f39823221f3424bbc878a00ad72.zip | |
fix(app): move workspace New session into header (#12624)
| -rw-r--r-- | packages/app/src/pages/layout/sidebar-workspace.tsx | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/packages/app/src/pages/layout/sidebar-workspace.tsx b/packages/app/src/pages/layout/sidebar-workspace.tsx index 11bad84b0..44f4b3530 100644 --- a/packages/app/src/pages/layout/sidebar-workspace.tsx +++ b/packages/app/src/pages/layout/sidebar-workspace.tsx @@ -1,3 +1,4 @@ +import { useNavigate, useParams } from "@solidjs/router" import { createEffect, createMemo, For, Show, type Accessor, type JSX } from "solid-js" import { createStore } from "solid-js/store" import { createSortable } from "@thisbeyond/solid-dnd" @@ -86,6 +87,8 @@ export const SortableWorkspace = (props: { project: LocalProject mobile?: boolean }): JSX.Element => { + const navigate = useNavigate() + const params = useParams() const globalSync = useGlobalSync() const language = useLanguage() const sortable = createSortable(props.directory) @@ -111,6 +114,7 @@ export const SortableWorkspace = (props: { const busy = createMemo(() => props.ctx.isBusy(props.directory)) const wasBusy = createMemo((prev) => prev || busy(), false) const loading = createMemo(() => open() && !booted() && sessions().length === 0 && !wasBusy()) + const showNew = createMemo(() => !loading() && (sessions().length === 0 || (active() && !params.id))) const loadMore = async () => { setWorkspaceStore("limit", (limit) => limit + 5) await globalSync.project.loadSessions(props.directory) @@ -260,6 +264,23 @@ export const SortableWorkspace = (props: { </DropdownMenu.Content> </DropdownMenu.Portal> </DropdownMenu> + <Tooltip value={language.t("command.session.new")} placement="top"> + <IconButton + icon="plus-small" + variant="ghost" + class="size-6 rounded-md opacity-0 pointer-events-none group-hover/workspace:opacity-100 group-hover/workspace:pointer-events-auto group-focus-within/workspace:opacity-100 group-focus-within/workspace:pointer-events-auto" + data-action="workspace-new-session" + data-workspace={base64Encode(props.directory)} + aria-label={language.t("command.session.new")} + onClick={(event) => { + event.preventDefault() + event.stopPropagation() + props.ctx.setHoverSession(undefined) + props.ctx.clearHoverProjectSoon() + navigate(`/${slug()}/session`) + }} + /> + </Tooltip> </div> </div> </div> @@ -267,13 +288,15 @@ export const SortableWorkspace = (props: { <Collapsible.Content> <nav class="flex flex-col gap-1 px-2"> - <NewSessionItem - slug={slug()} - mobile={props.mobile} - sidebarExpanded={props.ctx.sidebarExpanded} - clearHoverProjectSoon={props.ctx.clearHoverProjectSoon} - setHoverSession={props.ctx.setHoverSession} - /> + <Show when={showNew()}> + <NewSessionItem + slug={slug()} + mobile={props.mobile} + sidebarExpanded={props.ctx.sidebarExpanded} + clearHoverProjectSoon={props.ctx.clearHoverProjectSoon} + setHoverSession={props.ctx.setHoverSession} + /> + </Show> <Show when={loading()}> <SessionSkeleton /> </Show> |
