import { Select2 } from "@/components/select2"; import { InlineView } from "@/components/surface/surface-scope"; import { useTranslation } from "react-i18next"; import { ListChecks, PanelTop, Rows3, SquareStack } from "lucide-react"; import { actionOrder, useHostActions } from "./host-contributions"; import { showsInBar } from "./tree/host-bar-actions"; import { SectionCard, SettingRow, FakeSwitch } from "@/components/section-card"; import type { HostClickBehavior, HostDensity, HostRowFields, HostSidebarPreferences, HostTrayTrigger, } from "@/types/host-sidebar-preferences"; const ROW_FIELDS: { key: keyof HostRowFields; dependsOnAddress?: boolean }[] = [ { key: "showAddress" }, { key: "showUsername", dependsOnAddress: true }, { key: "showPort", dependsOnAddress: true }, { key: "showPinIcon" }, { key: "showSharedBadge" }, { key: "showBadges" }, ]; export function CustomizeSidebarPanel({ open, onOpenChange, preferences, update, }: { open: boolean; onOpenChange: (v: boolean) => void; preferences: HostSidebarPreferences; update: ( patch: | Partial | ((prev: HostSidebarPreferences) => HostSidebarPreferences), ) => void; }) { const { t } = useTranslation(); const actions = [...useHostActions()].sort( (a, b) => actionOrder(a) - actionOrder(b) || a.id.localeCompare(b.id), ); return (

{t("hosts.customizeSidebarDescription")}

} > update((prev) => ({ ...prev, display: { ...prev.display, density: e.target.value as HostDensity, }, })) } className="h-8 border border-border bg-background px-2 text-xs outline-none focus:ring-1 focus:ring-ring" > } >

{t("hosts.rowDetailsDesc")}

{ROW_FIELDS.map(({ key, dependsOnAddress }) => ( update((prev) => ({ ...prev, display: { ...prev.display, [key]: v }, })) } /> ))}
} > update((prev) => ({ ...prev, display: { ...prev.display, showTags: v }, })) } /> update((prev) => ({ ...prev, display: { ...prev.display, showFolderPaths: v }, })) } />
{t("hosts.actionsVisibility")} {t("hosts.actionsVisibilityDesc")}
update((prev) => ({ ...prev, display: { ...prev.display, trayTrigger: e.target.value as HostTrayTrigger, }, })) } className="h-8 w-full border border-border bg-background px-2 text-xs outline-none focus:ring-1 focus:ring-ring" >
{t("hosts.hostClickBehavior")} {t("hosts.hostClickBehaviorDesc")}
update((prev) => ({ ...prev, display: { ...prev.display, hostClickBehavior: e.target.value as HostClickBehavior, }, })) } className="h-8 w-full border border-border bg-background px-2 text-xs outline-none focus:ring-1 focus:ring-ring" >
update((prev) => ({ ...prev, display: { ...prev.display, openOnDoubleClick: v }, })) } /> update((prev) => ({ ...prev, display: { ...prev.display, statusColorScheme: v ? "status" : "accent", }, })) } />
{actions.length > 0 && ( } >

{t("hosts.connectBarDesc")}

{actions.map((action) => { const Icon = action.icon; return ( update((prev) => ({ ...prev, display: { ...prev.display, barActions: { ...prev.display.barActions, [action.id]: v, }, }, })) } /> ); })}
)}

{t("hosts.customizeSortHint")}

); }