Skip to content

Commit 18fed73

Browse files
committed
fix(browser): submit address on Enter
Generated-By: PostHog Code Task-Id: b23f944d-dd7f-465b-9fed-1a1d028f35e1
1 parent 393dccc commit 18fed73

2 files changed

Lines changed: 64 additions & 0 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { ServiceProvider } from "@posthog/di/react";
2+
import { Theme } from "@radix-ui/themes";
3+
import { render, screen } from "@testing-library/react";
4+
import userEvent from "@testing-library/user-event";
5+
import { Container } from "inversify";
6+
import { useEffect } from "react";
7+
import { describe, expect, it, vi } from "vitest";
8+
import { BrowserPanel } from "./BrowserPanel";
9+
import {
10+
BROWSER_VIEW_COMPONENT,
11+
type BrowserViewHandle,
12+
type BrowserViewProps,
13+
} from "./identifiers";
14+
15+
const loadURL = vi.fn<(url: string) => Promise<void>>();
16+
17+
const browserViewHandle: BrowserViewHandle = {
18+
loadURL,
19+
reload: vi.fn(),
20+
stop: vi.fn(),
21+
goBack: vi.fn(),
22+
goForward: vi.fn(),
23+
};
24+
25+
function FakeBrowserView({ onReady }: BrowserViewProps) {
26+
useEffect(() => {
27+
onReady(browserViewHandle);
28+
return () => onReady(null);
29+
}, [onReady]);
30+
return <div data-testid="browser-view" />;
31+
}
32+
33+
describe("BrowserPanel", () => {
34+
it("navigates when Enter is pressed in the address input", async () => {
35+
loadURL.mockResolvedValue();
36+
const container = new Container();
37+
container.bind(BROWSER_VIEW_COMPONENT).toConstantValue(FakeBrowserView);
38+
const user = userEvent.setup();
39+
40+
render(
41+
<ServiceProvider container={container}>
42+
<Theme>
43+
<BrowserPanel url="about:blank" />
44+
</Theme>
45+
</ServiceProvider>,
46+
);
47+
48+
await user.type(
49+
screen.getByRole("textbox", { name: "Address" }),
50+
"posthog.com{Enter}",
51+
);
52+
53+
expect(loadURL).toHaveBeenCalledWith("https://posthog.com");
54+
});
55+
});

packages/ui/src/features/browser/BrowserPanel.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,14 @@ export function BrowserPanel({
170170
},
171171
[address, navigate],
172172
);
173+
const handleAddressKeyDown = useCallback(
174+
(event: React.KeyboardEvent<HTMLInputElement>) => {
175+
if (event.key !== "Enter" || event.nativeEvent.isComposing) return;
176+
event.preventDefault();
177+
navigate(address);
178+
},
179+
[address, navigate],
180+
);
173181

174182
if (!BrowserView) return null;
175183

@@ -215,6 +223,7 @@ export function BrowserPanel({
215223
autoFocus={initialUrl.current === DEFAULT_URL}
216224
value={address}
217225
onChange={(e) => setAddress(e.target.value)}
226+
onKeyDown={handleAddressKeyDown}
218227
placeholder="Search or enter address"
219228
spellCheck={false}
220229
className="h-[24px] w-full rounded-(--radius-2) border-0 bg-(--gray-3) px-2 text-(--gray-12) text-[12px] outline-none focus:bg-(--gray-4)"

0 commit comments

Comments
 (0)