mirror of
https://github.com/moghtech/komodo.git
synced 2026-03-11 17:44:19 -05:00
Shift + X - Terminals, Shift + N - New (Resource, Terminal)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"]} />
|
||||
|
||||
@@ -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" />
|
||||
|
||||
Reference in New Issue
Block a user