mirror of
https://github.com/usebruno/bruno.git
synced 2026-07-07 22:18:33 +00:00
* feat: implemented fuzzy search in grpc methods Changes: 1) New SearchInput reusable component created. 2) Search input box added in grpc methods list. 3) Fuzzy search and keyboard navigation functionality implemented. Closes #5683 * feat: e2e test cases added for new grpc method searchbox * fix: package-lock json update * fix: added missing collection files for testing * fix: fixed lint issue * chore: update package-lock json file * fix: improve keyboard navigation and search handling in MethodDropdown Changes: 1) Adjusted focused index logic for ArrowUp key to remove focus after first item. 2) Enhanced handleSearchChange logic to highlight first item when search text is not empty. * feat: implemented fuzzy search in grpc methods Changes: 1) New SearchInput reusable component created. 2) Search input box added in grpc methods list. 3) Fuzzy search and keyboard navigation functionality implemented. Closes #5683 * feat: e2e test cases added for new grpc method searchbox * fix: added missing collection files for testing * fix: fixed lint issue * chore: update package-lock json file * fix: improve keyboard navigation and search handling in MethodDropdown Changes: 1) Adjusted focused index logic for ArrowUp key to remove focus after first item. 2) Enhanced handleSearchChange logic to highlight first item when search text is not empty. * test: updated test description and some code optimisation
57 lines
1.4 KiB
JavaScript
57 lines
1.4 KiB
JavaScript
import React from 'react';
|
|
import { IconSearch, IconX } from '@tabler/icons';
|
|
|
|
const SearchInput = ({
|
|
searchText,
|
|
setSearchText,
|
|
placeholder = 'Search',
|
|
className = '',
|
|
onChange,
|
|
...props
|
|
}) => {
|
|
const handleChange = (e) => {
|
|
setSearchText(e.target.value);
|
|
if (onChange) {
|
|
onChange(e);
|
|
}
|
|
};
|
|
|
|
return (
|
|
<div className={`relative px-2 ${className}`}>
|
|
<div className="absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none">
|
|
<span className="text-gray-500 sm:text-sm">
|
|
<IconSearch size={16} strokeWidth={1.5} />
|
|
</span>
|
|
</div>
|
|
<input
|
|
type="text"
|
|
name="search"
|
|
placeholder={placeholder}
|
|
id="search-input"
|
|
autoComplete="off"
|
|
autoCorrect="off"
|
|
autoCapitalize="off"
|
|
spellCheck="false"
|
|
className="block w-full pl-7 py-2 sm:text-sm rounded-md"
|
|
value={searchText}
|
|
onChange={handleChange}
|
|
{...props}
|
|
/>
|
|
{searchText !== '' && (
|
|
<div className="absolute inset-y-0 right-0 pr-4 flex items-center">
|
|
<span
|
|
className="close-icon"
|
|
onClick={() => {
|
|
setSearchText('');
|
|
}}
|
|
>
|
|
<IconX size={16} strokeWidth={1.5} className="cursor-pointer" />
|
|
</span>
|
|
</div>
|
|
)}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default SearchInput;
|