From 9cd430b3de44765937612a32c9fa8144abcfaa93 Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Thu, 10 Jul 2025 06:35:52 -0700 Subject: [PATCH] Docs explorer tweaks --- src-web/components/GraphQLDocsExplorer.tsx | 28 +++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src-web/components/GraphQLDocsExplorer.tsx b/src-web/components/GraphQLDocsExplorer.tsx index d4cde924..90c56875 100644 --- a/src-web/components/GraphQLDocsExplorer.tsx +++ b/src-web/components/GraphQLDocsExplorer.tsx @@ -24,9 +24,9 @@ import { import type { CSSProperties, HTMLAttributes, KeyboardEvent, ReactNode } from 'react'; import { Fragment, memo, useCallback, useMemo, useRef, useState } from 'react'; import { showGraphQLDocExplorerAtom } from '../atoms/graphqlSchemaAtom'; +import { useClickOutside } from '../hooks/useClickOutside'; import { useContainerSize } from '../hooks/useContainerQuery'; import { useDebouncedValue } from '../hooks/useDebouncedValue'; -import { useRandomKey } from '../hooks/useRandomKey'; import { useStateWithDeps } from '../hooks/useStateWithDeps'; import { jotaiStore } from '../lib/jotai'; import { CountBadge } from './core/CountBadge'; @@ -165,6 +165,7 @@ function GraphQLExplorerHeader({ })} (null, [ currentItem, ]); - const [forceRefreshKey, regenerateForceRefreshKey] = useRandomKey(); - const [focused, setFocused] = useState(false); + const [focused, setOpen] = useState(false); const [value, setValue] = useState(''); const debouncedValue = useDebouncedValue(value, 300); + const menuRef = useRef(null); const canSearch = currentItem == null || (isNamedType(currentItem.type) && @@ -681,7 +682,7 @@ function GqlSchemaSearch({ } } }); - return results.slice(0, 40); + return results.slice(0, 100); }, [currentItem, schema, debouncedValue, value]); const activeIndex = useMemo(() => { @@ -690,6 +691,7 @@ function GqlSchemaSearch({ }, [activeResult, results]); const inputRef = useRef(null); + useClickOutside(menuRef, () => setOpen(false)); const handleKeyDown = useCallback( (e: KeyboardEvent) => { @@ -732,7 +734,6 @@ function GqlSchemaSearch({ hideLabel defaultValue={value} placeholder={focused ? 'Search ' + (currentItem?.type.toString() ?? 'Schema') : 'Search'} - forceUpdateKey={forceRefreshKey} leftSlot={
@@ -740,17 +741,13 @@ function GqlSchemaSearch({ } onChange={setValue} onKeyDownCapture={handleKeyDown} - onFocus={() => setFocused(true)} - onBlur={() => { - setValue(''); - regenerateForceRefreshKey(); - setTimeout(() => { - setFocused(false); - }, 100); + onFocus={() => { + setOpen(true); }} />
setItem(item)} + onMouseDown={() => { + setItem(item); + setOpen(false); + }} onMouseEnter={() => setActiveResult(r)} isActive={i === activeIndex} >