// React and component imports import { useEffect, useState } from "react"; import Hub from "./Hub.js"; import uuid from 'react-uuid'; // CSS import import "../css/UserCheckin.css"; /** * Component that build the checkin list and displays checkin info. * @returns {import('react').HtmlHTMLAttributes} A div with the hubs * in a vertical layout. */ function HubList(props) { 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.... if (!holder) { return false; }; // const matchingId = holder.id.toString().includes(queryString.toLowerCase()); //console.log(props.queryString.toLowerCase(), props.data.length); const matchingName = holder.name.toLowerCase().includes(props.queryString.toLowerCase()); return matchingName; } const toHubElement = hub => ; /** * Filters the items to be shown, then created the iteams and sets the state with the items. */ const filterItems = () => { if (!props.queryString) { // don't need to show all unless searching return setDisplayedItems(props.data.slice(0,600).map(hub => toHubElement(hub))) } const criteria = props.data.filter(holder => toInclude(holder)); setDisplayedItems(criteria.map(hub => toHubElement(hub))); } /** * Hook to update the items on change of the search string or update of data. */ useEffect(() => filterItems(), [props.queryString, props.data, props.searching]); return ; } export default HubList;