import { Fragment, useState } from 'react'; import Tooltip from '../../../common/components/tooltip/Tooltip'; import { isKeyEnter } from '../../../common/utils/keyEvent'; import { cx } from '../../../common/utils/styleUtils'; import * as Panel from '../panel-utils/PanelUtils'; import { filterSettingsOptions, matchesSettingsOptionQuery, SettingsOption, SettingsOptionId, useAppSettingsMenu, } from '../useAppSettingsMenu'; import useAppSettingsNavigation from '../useAppSettingsNavigation'; import SettingsSearch from './SettingsSearch'; import style from './PanelList.module.scss'; export interface PanelBaseProps { location?: string; } interface PanelListProps extends PanelBaseProps { selectedPanel: string; } /** Returns the first matching setting, preferring a matching child over its non-matching group. */ function getFirstResultId(results: SettingsOption[], query: string): SettingsOptionId | null { const firstResult = results[0]; if (!firstResult) { return null; } if (matchesSettingsOptionQuery(firstResult, query.trim().toLowerCase())) { return firstResult.id as SettingsOptionId; } return (firstResult.secondary?.[0]?.id as SettingsOptionId | undefined) ?? null; } export default function PanelList({ selectedPanel, location }: PanelListProps) { const { options } = useAppSettingsMenu(); const { setLocation } = useAppSettingsNavigation(); const [query, setQuery] = useState(''); const results = filterSettingsOptions(options, query); const handleSearchSubmit = () => { const target = getFirstResultId(results, query); if (target) { setLocation(target); setQuery(''); } }; return (