Shift + X - Terminals, Shift + N - New (Resource, Terminal)

This commit is contained in:
mbecker20
2025-10-21 16:11:27 -07:00
parent 793bb99f31
commit 3b7de25c30
4 changed files with 22 additions and 9 deletions

View File

@@ -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<unknown>;
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 (
<Dialog
open={open}
onOpenChange={(open) => {
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);

View File

@@ -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 (
<NewLayout
entityType={readable_type ?? type}
onConfirm={onConfirm}
enabled={!!name}
onOpenChange={() => setName(_name)}
open={open}
setOpen={setOpen}
>
<div className="grid md:grid-cols-2 gap-6 items-center">
{readable_type ?? type} Name

View File

@@ -652,7 +652,7 @@ export const KeyboardShortcuts = () => {
<KeyboardShortcut label="Go to Repos" keys={["Shift", "R"]} />
<KeyboardShortcut label="Go to Procedures" keys={["Shift", "P"]} />
<KeyboardShortcut label="Go to Variables" keys={["Shift", "V"]} />
<KeyboardShortcut label="Go to Terminals" keys={["Shift", "J"]} />
<KeyboardShortcut label="Go to Terminals" keys={["Shift", "X"]} />
<KeyboardShortcut label="Go to Schedules" keys={["Shift", "C"]} />
<KeyboardShortcut label="Search" keys={["Shift", "S"]} />

View File

@@ -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<Types.CreateTerminal>(
@@ -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 (
<Dialog open={open} onOpenChange={set}>
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>
<Button className="items-center gap-2" variant="secondary">
New Terminal <PlusCircle className="w-4 h-4" />