From 9f2577db660eb48608ab2ba1b320497ea7daa477 Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Fri, 27 Oct 2023 12:40:43 -0700 Subject: [PATCH] Only wrap URLBar on focus and hotkey to open recent requests --- .../components/EnvironmentActionsDropdown.tsx | 15 +++++++++------ src-web/components/RecentRequestsDropdown.tsx | 19 +++++++++++++++---- src-web/components/Sidebar.tsx | 4 ++-- src-web/components/UrlBar.tsx | 7 +++++-- src-web/components/core/Dropdown.tsx | 9 ++++++--- src-web/components/core/Editor/Editor.tsx | 4 ---- src-web/components/core/Input.tsx | 6 +++++- 7 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src-web/components/EnvironmentActionsDropdown.tsx b/src-web/components/EnvironmentActionsDropdown.tsx index 60c66bb0..d27d8cc1 100644 --- a/src-web/components/EnvironmentActionsDropdown.tsx +++ b/src-web/components/EnvironmentActionsDropdown.tsx @@ -112,25 +112,28 @@ export const EnvironmentActionsDropdown = memo(function EnvironmentActionsDropdo }, ]; }, [ - // deleteEnvironment.mutate, activeEnvironment, createEnvironment, + deleteEnvironment, dialog, environments, prompt, - updateEnvironment, - deleteEnvironment, routes, + updateEnvironment, ]); return ( ); diff --git a/src-web/components/RecentRequestsDropdown.tsx b/src-web/components/RecentRequestsDropdown.tsx index e7a416ec..2b2f4c36 100644 --- a/src-web/components/RecentRequestsDropdown.tsx +++ b/src-web/components/RecentRequestsDropdown.tsx @@ -9,6 +9,7 @@ import { Button } from './core/Button'; import { CountBadge } from './core/CountBadge'; import type { DropdownItem, DropdownRef } from './core/Dropdown'; import { Dropdown } from './core/Dropdown'; +import classNames from 'classnames'; export function RecentRequestsDropdown() { const dropdownRef = useRef(null); @@ -18,8 +19,16 @@ export function RecentRequestsDropdown() { const requests = useRequests(); const routes = useAppRoutes(); + // Toggle the menu on Cmd+k + useKey('k', (e) => { + if (e.metaKey) { + e.preventDefault(); + dropdownRef.current?.toggle(0); + } + }); + + // Handle key-up useKeyPressEvent('Control', undefined, () => { - // Key up dropdownRef.current?.select?.(); }); @@ -29,8 +38,8 @@ export function RecentRequestsDropdown() { if (!e.ctrlKey || recentRequestIds.length === 0) return; if (!dropdownRef.current?.isOpen) { - // Set to 1 because the first item is the active request dropdownRef.current?.open(e.shiftKey ? -1 : 0); + return; } if (e.shiftKey) dropdownRef.current?.prev?.(); @@ -72,9 +81,11 @@ export function RecentRequestsDropdown() { return ( diff --git a/src-web/components/Sidebar.tsx b/src-web/components/Sidebar.tsx index 7dbb880c..3584f0ed 100644 --- a/src-web/components/Sidebar.tsx +++ b/src-web/components/Sidebar.tsx @@ -162,7 +162,7 @@ export const Sidebar = memo(function Sidebar({ className }: Props) { )} > (null); const sendRequest = useSendRequest(requestId); const updateRequest = useUpdateRequest(requestId); + const [isFocused, setIsFocused] = useState(false); const handleMethodChange = useCallback( (method: string) => updateRequest.mutate({ method }), [updateRequest], @@ -47,7 +48,7 @@ export const UrlBar = memo(function UrlBar({ id: requestId, url, method, classNa
setIsFocused(true)} + onBlur={() => setIsFocused(false)} containerClassName="shadow shadow-gray-100 dark:shadow-gray-50" onChange={handleUrlChange} defaultValue={url} diff --git a/src-web/components/core/Dropdown.tsx b/src-web/components/core/Dropdown.tsx index 5756b792..42f0a8e1 100644 --- a/src-web/components/core/Dropdown.tsx +++ b/src-web/components/core/Dropdown.tsx @@ -46,7 +46,7 @@ export interface DropdownProps { export interface DropdownRef { isOpen: boolean; open: (activeIndex?: number) => void; - toggle: () => void; + toggle: (activeIndex?: number) => void; close?: () => void; next?: () => void; prev?: () => void; @@ -65,8 +65,11 @@ export const Dropdown = forwardRef(function Dropdown useImperativeHandle(ref, () => ({ ...menuRef.current, isOpen: open, - toggle: () => setOpen(!open), - open: (activeIndex?: number) => { + toggle (activeIndex?: number) { + if (!open) this.open(activeIndex); + else setOpen(false); + }, + open(activeIndex?: number) { if (activeIndex === undefined) { setDefaultSelectedIndex(undefined); } else { diff --git a/src-web/components/core/Editor/Editor.tsx b/src-web/components/core/Editor/Editor.tsx index 5ad37c3c..5c2a3ade 100644 --- a/src-web/components/core/Editor/Editor.tsx +++ b/src-web/components/core/Editor/Editor.tsx @@ -259,10 +259,6 @@ function getExtensions({ ...(singleLine ? [ EditorView.domEventHandlers({ - focus: (_, view) => { - // select all text on focus, like a regular input does - view.dispatch({ selection: { anchor: 0, head: view.state.doc.length } }); - }, keydown: (e) => { // Submit nearest form on enter if there is one if (onEnter != null && e.key === 'Enter') { diff --git a/src-web/components/core/Input.tsx b/src-web/components/core/Input.tsx index e2317062..abe98fa8 100644 --- a/src-web/components/core/Input.tsx +++ b/src-web/components/core/Input.tsx @@ -124,7 +124,11 @@ export const Input = forwardRef(function Inp {leftSlot}