import { memo, useContext, useEffect, useId } from "preact/compat"; import { twMerge } from "tailwind-merge"; import { SearchContext } from "../Search/SearchBase"; import useI18n from "../utils/hooks/useI18n"; import type { HTMLAttributes, PreactDOMAttributes } from "preact"; import type { SearchResponse } from "../utils/hooks/useSearchStops"; export type SearchResultsProps = { className?: string; filter?: (item: T) => boolean; resultClassName?: string; resultsClassName?: string; resultsContainerClassName?: string; searchResponse?: SearchResponse; sort?: (a: T, b: T) => number; } & HTMLAttributes & PreactDOMAttributes; export interface SearchResultsChildProps { item: T; onSelectItem?: (item: T, evt: Event) => void; } /** * Results list of search. */ function SearchResults({ children, className, resultsClassName, searchResponse, ...props }: SearchResultsProps) { const { t } = useI18n(); const id = useId(); const { setResults } = useContext(SearchContext); // Notify parent about results change useEffect(() => { if (!searchResponse.isLoading) { setResults(id, searchResponse?.results || []); } return () => { setResults(id, []); }; }, [searchResponse, id, setResults]); if (!(searchResponse?.results?.length >= 0)) { return null; } return (
{searchResponse.results.length === 0 && (
{t("search_no_results")}
)} {searchResponse.results.length > 0 && (
    {children}
)}
); } export default memo(SearchResults);