From 3b7de25c30a345d15f22594840676ffca19f5e42 Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Tue, 21 Oct 2025 16:11:27 -0700 Subject: [PATCH] Shift + X - Terminals, Shift + N - New (Resource, Terminal) --- frontend/src/components/layouts.tsx | 16 +++++++++++----- frontend/src/components/resources/common.tsx | 5 +++++ frontend/src/components/topbar/components.tsx | 2 +- frontend/src/pages/terminals.tsx | 8 +++++--- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/frontend/src/components/layouts.tsx b/frontend/src/components/layouts.tsx index ce5e94b82..883e08f8a 100644 --- a/frontend/src/components/layouts.tsx +++ b/frontend/src/components/layouts.tsx @@ -32,7 +32,7 @@ export const Layout = () => { useShiftKeyListener("B", () => nav("/builds")); useShiftKeyListener("R", () => nav("/repos")); useShiftKeyListener("P", () => nav("/procedures")); - useShiftKeyListener("J", () => nav("/terminals")); + useShiftKeyListener("X", () => nav("/terminals")); useShiftKeyListener("C", () => nav("/schedules")); useShiftKeyListener("V", () => { setSettingsView("Variables"); @@ -217,6 +217,8 @@ export const NewLayout = ({ onConfirm, onOpenChange, configureLabel = "a unique name", + open: _open, + setOpen: _setOpen, }: { entityType: string; children: ReactNode; @@ -224,15 +226,19 @@ export const NewLayout = ({ onConfirm: () => Promise; onOpenChange?: (open: boolean) => void; configureLabel?: string; + open?: boolean; + setOpen?: (open: boolean) => void; }) => { - const [open, set] = useState(false); + const [__open, __setOpen] = useState(false); + const open = _open ? _open : __open; + const setOpen = _setOpen ? _setOpen : __setOpen; const [loading, setLoading] = useState(false); return ( { - set(open); + setOpen(open); onOpenChange && onOpenChange(open); }} > @@ -258,11 +264,11 @@ export const NewLayout = ({ setLoading(true); try { await onConfirm(); - set(false); + setOpen(false); } catch (error: any) { const status = error?.status || error?.response?.status; if (status !== 409 && status !== 400) { - set(false); + setOpen(false); } } finally { setLoading(false); diff --git a/frontend/src/components/resources/common.tsx b/frontend/src/components/resources/common.tsx index 3f9ac9c7a..f482def18 100644 --- a/frontend/src/components/resources/common.tsx +++ b/frontend/src/components/resources/common.tsx @@ -10,6 +10,7 @@ import { useInvalidate, usePermissions, useRead, + useShiftKeyListener, useWrite, WebhookIntegration, } from "@lib/hooks"; @@ -563,12 +564,16 @@ export const NewResource = ({ nav(`/${usableResourcePath(type)}/${resourceId}`); } }; + const [open, setOpen] = useState(false); + useShiftKeyListener("N", () => !open && setOpen(true)); return ( setName(_name)} + open={open} + setOpen={setOpen} >
{readable_type ?? type} Name diff --git a/frontend/src/components/topbar/components.tsx b/frontend/src/components/topbar/components.tsx index a91d14467..9bb3b0aea 100644 --- a/frontend/src/components/topbar/components.tsx +++ b/frontend/src/components/topbar/components.tsx @@ -652,7 +652,7 @@ export const KeyboardShortcuts = () => { - + diff --git a/frontend/src/pages/terminals.tsx b/frontend/src/pages/terminals.tsx index d4567cd37..3f64694ac 100644 --- a/frontend/src/pages/terminals.tsx +++ b/frontend/src/pages/terminals.tsx @@ -7,6 +7,7 @@ import { usePermissions, useRead, useSetTitle, + useShiftKeyListener, useTags, useWrite, } from "@lib/hooks"; @@ -175,7 +176,7 @@ const default_create_terminal = (first_server: string) => { }; const CreateTerminal = () => { - const [open, set] = useState(false); + const [open, setOpen] = useState(false); const nav = useNavigate(); const first_server = (useRead("ListServers", {}).data ?? [])[0]?.id ?? ""; const [request, setRequest] = useState( @@ -188,7 +189,7 @@ const CreateTerminal = () => { const { mutate, isPending } = useWrite("CreateTerminal", { onSuccess: () => { nav(`/servers/${request.server}/terminal/${request.name}`); - set(false); + setOpen(false); setRequest(default_create_terminal(first_server)); }, }); @@ -196,9 +197,10 @@ const CreateTerminal = () => { if (!request.server || !request.name) return; mutate(request); }; + useShiftKeyListener("N", () => !open && setOpen(true)); return ( - +