Skip to content

Commit 7bfd4d3

Browse files
posthog[bot]PostHog Codeoliverb123jonathanlab
authored
Cmd+Enter on a single inbox report opens Create PR dialog (#1892)
Co-authored-by: PostHog Code <code@posthog.com> Co-authored-by: Oliver Browne <oliverbrowne627@gmail.com> Co-authored-by: JonathanLab <jonathanmieloo@gmail.com>
1 parent 5bcf25f commit 7bfd4d3

1 file changed

Lines changed: 50 additions & 9 deletions

File tree

apps/code/src/renderer/features/inbox/components/detail/ReportDetailPane.tsx

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
WarningIcon,
2323
XIcon,
2424
} from "@phosphor-icons/react";
25+
import { Kbd } from "@posthog/quill";
2526
import {
2627
Box,
2728
Flex,
@@ -46,7 +47,14 @@ import type {
4647
} from "@shared/types";
4748
import { useNavigationStore } from "@stores/navigationStore";
4849
import { useQuery } from "@tanstack/react-query";
49-
import { type ReactNode, useCallback, useMemo, useState } from "react";
50+
import { isMac } from "@utils/platform";
51+
import {
52+
type ReactNode,
53+
useCallback,
54+
useEffect,
55+
useMemo,
56+
useState,
57+
} from "react";
5058
import { toast } from "sonner";
5159
import { ReportImplementationPrLink } from "../utils/ReportImplementationPrLink";
5260
import { SignalReportActionabilityBadge } from "../utils/SignalReportActionabilityBadge";
@@ -280,6 +288,31 @@ export function ReportDetailPane({
280288
report,
281289
]);
282290

291+
useEffect(() => {
292+
if (!canCreateImplementationPr) return;
293+
const handler = (e: KeyboardEvent) => {
294+
if (e.key !== "Enter") return;
295+
if (!(e.metaKey || e.ctrlKey)) return;
296+
if (
297+
document.querySelector(
298+
"[data-radix-popper-content-wrapper], [role='dialog'][data-state='open']",
299+
)
300+
) {
301+
return;
302+
}
303+
const target = e.target as HTMLElement | null;
304+
if (
305+
target?.closest("input, select, textarea, [contenteditable='true']")
306+
) {
307+
return;
308+
}
309+
e.preventDefault();
310+
handleCreateImplementationTask();
311+
};
312+
window.addEventListener("keydown", handler);
313+
return () => window.removeEventListener("keydown", handler);
314+
}, [canCreateImplementationPr, handleCreateImplementationTask]);
315+
283316
return (
284317
<>
285318
{/* ── Header bar ──────────────────────────────────────────── */}
@@ -343,15 +376,23 @@ export function ReportDetailPane({
343376
size="md"
344377
/>
345378
) : canCreateImplementationPr ? (
346-
<Button
347-
size="1"
348-
variant="solid"
349-
className="gap-1 text-[12px]"
350-
onClick={handleCreateImplementationTask}
379+
<Tooltip
380+
content={
381+
<Flex align="center" gap="1">
382+
Create PR <Kbd>{isMac ? "⌘↵" : "Ctrl+↵"}</Kbd>
383+
</Flex>
384+
}
351385
>
352-
<Plus size={12} />
353-
Create PR
354-
</Button>
386+
<Button
387+
size="1"
388+
variant="solid"
389+
className="gap-1 text-[12px]"
390+
onClick={handleCreateImplementationTask}
391+
>
392+
<Plus size={12} />
393+
Create PR
394+
</Button>
395+
</Tooltip>
355396
) : null}
356397
<button
357398
type="button"

0 commit comments

Comments
 (0)