fix(app): new session button
This commit is contained in:
@@ -1710,6 +1710,43 @@ export default function Layout(props: ParentProps) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const NewSessionItem = (props: { slug: string; mobile?: boolean; dense?: boolean }): JSX.Element => {
|
||||||
|
const label = language.t("command.session.new")
|
||||||
|
const tooltip = () => props.mobile || !layout.sidebar.opened()
|
||||||
|
const item = (
|
||||||
|
<A
|
||||||
|
href={`${props.slug}/session`}
|
||||||
|
end
|
||||||
|
class={`flex items-center justify-between gap-3 min-w-0 text-left w-full focus:outline-none ${props.dense ? "py-0.5" : "py-1"}`}
|
||||||
|
onClick={() => setHoverSession(undefined)}
|
||||||
|
>
|
||||||
|
<div class="flex items-center gap-1 w-full">
|
||||||
|
<div class="shrink-0 size-6 flex items-center justify-center">
|
||||||
|
<Icon name="plus-small" size="small" class="text-icon-weak" />
|
||||||
|
</div>
|
||||||
|
<span class="text-14-regular text-text-strong grow-1 min-w-0 overflow-hidden text-ellipsis truncate">
|
||||||
|
{label}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</A>
|
||||||
|
)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div class="group/session relative w-full rounded-md cursor-default transition-colors pl-2 pr-3 hover:bg-surface-raised-base-hover focus-within:bg-surface-raised-base-hover has-[.active]:bg-surface-base-active">
|
||||||
|
<Show
|
||||||
|
when={!tooltip()}
|
||||||
|
fallback={
|
||||||
|
<Tooltip placement={props.mobile ? "bottom" : "right"} value={label} gutter={10}>
|
||||||
|
{item}
|
||||||
|
</Tooltip>
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{item}
|
||||||
|
</Show>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
const SessionSkeleton = (props: { count?: number }): JSX.Element => {
|
const SessionSkeleton = (props: { count?: number }): JSX.Element => {
|
||||||
const items = Array.from({ length: props.count ?? 4 }, (_, index) => index)
|
const items = Array.from({ length: props.count ?? 4 }, (_, index) => index)
|
||||||
return (
|
return (
|
||||||
@@ -1943,16 +1980,7 @@ export default function Layout(props: ParentProps) {
|
|||||||
|
|
||||||
<Collapsible.Content>
|
<Collapsible.Content>
|
||||||
<nav class="flex flex-col gap-1 px-2">
|
<nav class="flex flex-col gap-1 px-2">
|
||||||
<Button
|
<NewSessionItem slug={slug()} mobile={props.mobile} />
|
||||||
as={A}
|
|
||||||
href={`${slug()}/session`}
|
|
||||||
variant="ghost"
|
|
||||||
size="large"
|
|
||||||
icon="edit"
|
|
||||||
class="hidden _flex w-full text-left justify-start text-text-base rounded-md px-3"
|
|
||||||
>
|
|
||||||
{language.t("command.session.new")}
|
|
||||||
</Button>
|
|
||||||
<Show when={loading()}>
|
<Show when={loading()}>
|
||||||
<SessionSkeleton />
|
<SessionSkeleton />
|
||||||
</Show>
|
</Show>
|
||||||
@@ -2159,6 +2187,7 @@ export default function Layout(props: ParentProps) {
|
|||||||
style={{ "overflow-anchor": "none" }}
|
style={{ "overflow-anchor": "none" }}
|
||||||
>
|
>
|
||||||
<nav class="flex flex-col gap-1 px-2">
|
<nav class="flex flex-col gap-1 px-2">
|
||||||
|
<NewSessionItem slug={slug()} mobile={props.mobile} />
|
||||||
<Show when={loading()}>
|
<Show when={loading()}>
|
||||||
<SessionSkeleton />
|
<SessionSkeleton />
|
||||||
</Show>
|
</Show>
|
||||||
|
|||||||
Reference in New Issue
Block a user