From 508b892c0b8e819d2330c3d3f912ba33183348d8 Mon Sep 17 00:00:00 2001 From: Luis-Hebendanz Date: Fri, 1 Sep 2023 17:46:16 +0200 Subject: [PATCH] UI: Improved UX in Search Bar --- pkgs/ui/src/components/table/searchBar.tsx | 66 +++++++++++++--------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/pkgs/ui/src/components/table/searchBar.tsx b/pkgs/ui/src/components/table/searchBar.tsx index 8aca96928..06ee7d7a8 100644 --- a/pkgs/ui/src/components/table/searchBar.tsx +++ b/pkgs/ui/src/components/table/searchBar.tsx @@ -7,6 +7,10 @@ import { useEffect, useRef, useMemo, + ClassAttributes, + JSX, + Key, + LiHTMLAttributes, } from "react"; import IconButton from "@mui/material/IconButton"; import Tooltip from "@mui/material/Tooltip"; @@ -31,14 +35,19 @@ export function SearchBar(props: SearchBarProps) { let { tableData, setFilteredList } = props; const [search, setSearch] = useState(""); const debouncedSearch = useDebounce(search, 250); + const [open, setOpen] = useState(true); // Define a function to handle the Esc key press function handleEsc(event: React.KeyboardEvent) { if (event.key === "Escape") { - console.log("Escape key pressed"); setSearch(""); setFilteredList(tableData); } + + // check if the key is Enter + if (event.key === "Enter") { + setOpen(false); + } } useEffect(() => { @@ -50,11 +59,12 @@ export function SearchBar(props: SearchBarProps) { } }, [debouncedSearch, tableData, setFilteredList]); - const handleInputChange = (e: React.ChangeEvent) => { - if (e.target.value === "") { + const handleInputChange = (event: any, value: string) => { + if (value === "") { setFilteredList(tableData); } - setSearch(e.target.value); + + setSearch(value); }; const suggestions = useMemo( @@ -65,16 +75,24 @@ export function SearchBar(props: SearchBarProps) { return ( { + return ( +
  • + {option} +
  • + ); + }} onKeyDown={handleEsc} - onChange={(event, value) => { - // do something with the selected value - if (value === null) { - setSearch(""); - setFilteredList(tableData); - } else { - setSearch(value); - } + onInputChange={handleInputChange} + value={search} + open={open} + onOpen={() => { + setOpen(true); + }} + onClose={() => { + setOpen(false); }} renderInput={(params) => ( - // - // - // - // - // ), + startAdornment: ( + + + + + + ), }} - > - {/* {suggestions.map((item, index) => ( - - ))} */} - + > )} /> );