refactor(app): replace Popover with DropdownMenu for server options
This commit is contained in:
@@ -11,7 +11,7 @@ import { usePlatform } from "@/context/platform"
|
||||
import { createOpencodeClient } from "@opencode-ai/sdk/v2/client"
|
||||
import { useNavigate } from "@solidjs/router"
|
||||
import { useLanguage } from "@/context/language"
|
||||
import { Popover } from "@opencode-ai/ui/popover"
|
||||
import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu"
|
||||
import { Tooltip } from "@opencode-ai/ui/tooltip"
|
||||
import { useGlobalSDK } from "@/context/global-sdk"
|
||||
|
||||
@@ -394,7 +394,6 @@ export function DialogSelectServer() {
|
||||
}
|
||||
>
|
||||
{(i) => {
|
||||
const [popoverOpen, setPopoverOpen] = createSignal(false)
|
||||
const [truncated, setTruncated] = createSignal(false)
|
||||
let nameRef: HTMLSpanElement | undefined
|
||||
let versionRef: HTMLSpanElement | undefined
|
||||
@@ -476,33 +475,19 @@ export function DialogSelectServer() {
|
||||
<p class="text-text-weak text-12-regular">{language.t("dialog.server.current")}</p>
|
||||
</Show>
|
||||
|
||||
<div onClick={(e) => e.stopPropagation()} onPointerDown={(e) => e.stopPropagation()}>
|
||||
<Popover
|
||||
open={popoverOpen()}
|
||||
onOpenChange={setPopoverOpen}
|
||||
placement="bottom-start"
|
||||
trigger={
|
||||
<IconButton
|
||||
icon="dot-grid"
|
||||
variant="ghost"
|
||||
class="shrink-0 size-8 hover:bg-surface-base-hover"
|
||||
classList={{
|
||||
"bg-transparent": !popoverOpen(),
|
||||
"bg-surface-base-active": popoverOpen(),
|
||||
}}
|
||||
onPointerDown={(event: PointerEvent) => event.stopPropagation()}
|
||||
/>
|
||||
}
|
||||
class="w-max !min-w-fit !max-w-none"
|
||||
>
|
||||
<div class="flex flex-col gap-1">
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="normal"
|
||||
class="justify-start text-md"
|
||||
onClick={(e: MouseEvent) => {
|
||||
e.stopPropagation()
|
||||
setPopoverOpen(false)
|
||||
<DropdownMenu>
|
||||
<DropdownMenu.Trigger
|
||||
as={IconButton}
|
||||
icon="dot-grid"
|
||||
variant="ghost"
|
||||
class="shrink-0 size-8 hover:bg-surface-base-hover data-[expanded]:bg-surface-base-active"
|
||||
onClick={(e: MouseEvent) => e.stopPropagation()}
|
||||
onPointerDown={(e: PointerEvent) => e.stopPropagation()}
|
||||
/>
|
||||
<DropdownMenu.Portal>
|
||||
<DropdownMenu.Content class="mt-1">
|
||||
<DropdownMenu.Item
|
||||
onSelect={() => {
|
||||
setStore("editServer", {
|
||||
id: i,
|
||||
value: i,
|
||||
@@ -511,54 +496,42 @@ export function DialogSelectServer() {
|
||||
})
|
||||
}}
|
||||
>
|
||||
{language.t("dialog.server.menu.edit")}
|
||||
</Button>
|
||||
<DropdownMenu.ItemLabel>{language.t("dialog.server.menu.edit")}</DropdownMenu.ItemLabel>
|
||||
</DropdownMenu.Item>
|
||||
<Show when={isDesktop && defaultUrl() !== i}>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="normal"
|
||||
class="justify-start text-md"
|
||||
onClick={async (e: MouseEvent) => {
|
||||
e.stopPropagation()
|
||||
setPopoverOpen(false)
|
||||
<DropdownMenu.Item
|
||||
onSelect={async () => {
|
||||
await platform.setDefaultServerUrl?.(i)
|
||||
defaultUrlActions.refetch(i)
|
||||
}}
|
||||
>
|
||||
{language.t("dialog.server.menu.default")}
|
||||
</Button>
|
||||
<DropdownMenu.ItemLabel>
|
||||
{language.t("dialog.server.menu.default")}
|
||||
</DropdownMenu.ItemLabel>
|
||||
</DropdownMenu.Item>
|
||||
</Show>
|
||||
<Show when={isDesktop && defaultUrl() === i}>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="normal"
|
||||
class="justify-start text-md"
|
||||
onClick={async (e: MouseEvent) => {
|
||||
e.stopPropagation()
|
||||
setPopoverOpen(false)
|
||||
<DropdownMenu.Item
|
||||
onSelect={async () => {
|
||||
await platform.setDefaultServerUrl?.(null)
|
||||
defaultUrlActions.refetch(null)
|
||||
}}
|
||||
>
|
||||
{language.t("dialog.server.menu.defaultRemove")}
|
||||
</Button>
|
||||
<DropdownMenu.ItemLabel>
|
||||
{language.t("dialog.server.menu.defaultRemove")}
|
||||
</DropdownMenu.ItemLabel>
|
||||
</DropdownMenu.Item>
|
||||
</Show>
|
||||
<div class="h-px bg-border-weak-base my-1" />
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="normal"
|
||||
class="justify-start text-md text-text-on-critical-base hover:bg-surface-critical-weak"
|
||||
onClick={(e: MouseEvent) => {
|
||||
e.stopPropagation()
|
||||
setPopoverOpen(false)
|
||||
handleRemove(i)
|
||||
}}
|
||||
<DropdownMenu.Separator />
|
||||
<DropdownMenu.Item
|
||||
onSelect={() => handleRemove(i)}
|
||||
class="text-text-on-critical-base hover:bg-surface-critical-weak"
|
||||
>
|
||||
{language.t("dialog.server.menu.delete")}
|
||||
</Button>
|
||||
</div>
|
||||
</Popover>
|
||||
</div>
|
||||
<DropdownMenu.ItemLabel>{language.t("dialog.server.menu.delete")}</DropdownMenu.ItemLabel>
|
||||
</DropdownMenu.Item>
|
||||
</DropdownMenu.Content>
|
||||
</DropdownMenu.Portal>
|
||||
</DropdownMenu>
|
||||
</div>
|
||||
</Show>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user