// React and component imports import { useEffect, useState } from "react"; import InvestorInfo from "./InvestorInfo.js"; // CSS import import '../css/UserCheckin.css'; import Hub from "./HubList.js"; import Search from "./HubSearch.js"; /** * Component that build the checkin list and displays checkin info. * @returns {import('react').HtmlHTMLAttributes} A div with the hubs * in a vertical layout. */ function HubSearch(props) { const [queryString, setQueryString] = useState(""); const [displayedItems, setDisplayedItems] = useState([]); /** * Method that determines whehter the Hub should be showed. * @returns {Boolean} True if to be shown, false if not. */ const toInclude = (holder) => { // TODO: add number search or differentiate between it // TODO: add sus score range.... const matchingId = queryString.toLowerCase().includes(holder?.id ?? ""); const matchingName = queryString.toLowerCase().includes(holder?.name ?? ""); return matchingId || matchingName; } /** * Filters the items to be shown, then created the iteams and sets the state with the items. */ const filterItems = () => { const criteria = props.data.filter(holder => toInclude(holder)); setDisplayedItems(criteria.map(hub => )) } /** * Hook to update the items on change of the search string. */ useEffect(() => filterItems(), [queryString]); // TODO: maybe have a quick explanation of what search gives... // TODO: have number of ceos that make it... // TODO: weighted search or sort after search.... // TODO: highlight part of string that matched... return (

Search

setQueryString(e.value)}> ;
); } export default HubSearch;