Download packages/app/src/components/server/server-row-menu.tsx from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 3.56 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/app/src/components/server/server-row-menu.tsx
- Command line
-
hf download hf://SaylorTwift/opencode/packages/app/src/components/server/server-row-menu.tsx
-
curl -L -o server-row-menu.tsx https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/app/src/components/server/server-row-menu.tsx
3.56 kB
| import { Icon as IconV2 } from "@opencode-ai/ui/v2/icon" | |
| import { IconButtonV2 } from "@opencode-ai/ui/v2/icon-button-v2" | |
| import { MenuV2 } from "@opencode-ai/ui/v2/menu-v2" | |
| import { type Component, Show } from "solid-js" | |
| import { useServerManagementController } from "@/components/dialog-select-server" | |
| import { useLanguage } from "@/context/language" | |
| import { ServerConnection } from "@/context/server" | |
| export const ServerRowMenu: Component<{ | |
| server: ServerConnection.Any | |
| controller: ReturnType<typeof useServerManagementController> | |
| onEdit: (server: ServerConnection.Http) => void | |
| open?: boolean | |
| onOpenChange?: (open: boolean) => void | |
| }> = (props) => { | |
| const language = useLanguage() | |
| const key = ServerConnection.key(props.server) | |
| return ( | |
| <ServerRowMenuView | |
| server={props.server} | |
| labels={serverMenuLabels(language)} | |
| canDefault={props.controller.canDefault()} | |
| isDefault={props.controller.defaultKey() === key} | |
| onEdit={props.onEdit} | |
| onSetDefault={() => props.controller.setDefault(key)} | |
| onRemoveDefault={() => props.controller.setDefault(null)} | |
| onRemove={() => props.controller.handleRemove(key)} | |
| open={props.open} | |
| onOpenChange={props.onOpenChange} | |
| /> | |
| ) | |
| } | |
| export function serverMenuLabels(language: ReturnType<typeof useLanguage>) { | |
| return { | |
| more: language.t("common.moreOptions"), | |
| server: language.t("settings.section.server"), | |
| edit: language.t("dialog.server.menu.edit"), | |
| default: language.t("dialog.server.menu.default"), | |
| defaultRemove: language.t("dialog.server.menu.defaultRemove"), | |
| delete: language.t("dialog.server.menu.delete"), | |
| } | |
| } | |
| export const ServerRowMenuView: Component<{ | |
| server: ServerConnection.Any | |
| labels: ReturnType<typeof serverMenuLabels> | |
| canDefault: boolean | |
| isDefault: boolean | |
| onEdit: (server: ServerConnection.Http) => void | |
| onSetDefault: () => void | |
| onRemoveDefault: () => void | |
| onRemove: () => void | |
| open?: boolean | |
| onOpenChange?: (open: boolean) => void | |
| }> = (props) => { | |
| const builtin = () => ServerConnection.builtin(props.server) | |
| const httpServer = () => (props.server.type === "http" ? props.server : undefined) | |
| return ( | |
| <MenuV2 gutter={6} modal={false} placement="bottom-end" open={props.open} onOpenChange={props.onOpenChange}> | |
| <MenuV2.Trigger | |
| as={IconButtonV2} | |
| variant="ghost-muted" | |
| size="small" | |
| icon={<IconV2 name="outline-dots" />} | |
| aria-label={props.labels.more} | |
| /> | |
| <MenuV2.Portal> | |
| <MenuV2.Content> | |
| <MenuV2.Group> | |
| <MenuV2.GroupLabel>{props.labels.server}</MenuV2.GroupLabel> | |
| <MenuV2.Item | |
| disabled={builtin() || !httpServer()} | |
| onSelect={() => { | |
| const server = httpServer() | |
| if (server) props.onEdit(server) | |
| }} | |
| > | |
| {props.labels.edit} | |
| </MenuV2.Item> | |
| <Show when={props.canDefault && !props.isDefault}> | |
| <MenuV2.Item onSelect={props.onSetDefault}>{props.labels.default}</MenuV2.Item> | |
| </Show> | |
| <Show when={props.canDefault && props.isDefault}> | |
| <MenuV2.Item onSelect={props.onRemoveDefault}>{props.labels.defaultRemove}</MenuV2.Item> | |
| </Show> | |
| <MenuV2.Separator /> | |
| <MenuV2.Item disabled={builtin()} onSelect={props.onRemove}> | |
| {props.labels.delete} | |
| </MenuV2.Item> | |
| </MenuV2.Group> | |
| </MenuV2.Content> | |
| </MenuV2.Portal> | |
| </MenuV2> | |
| ) | |
| } | |