import { usePubSub } from "create-pubsub/react"; import { searchResultsPubSub, searchStatePubSub, settingsPubSub, } from "../../../modules/pubSub"; import { match, Pattern } from "ts-pattern"; import { Divider, Skeleton, Alert, Stack, Group, Space, AspectRatio, em, } from "@mantine/core"; import { IconInfoCircle } from "@tabler/icons-react"; import { lazy, Suspense, useMemo } from "react"; import { Settings } from "../../../modules/settings"; import { SearchResults } from "../../../modules/search"; import { useMediaQuery } from "@mantine/hooks"; const ImageResultsList = lazy(() => import("./Graphical/ImageResultsList")); const SearchResultsList = lazy(() => import("./Textual/SearchResultsList")); export default function SearchResultsSection() { const [searchResults] = usePubSub(searchResultsPubSub); const [searchState] = usePubSub(searchStatePubSub); const [settings] = usePubSub(settingsPubSub); return useMemo( () => match(searchState) .with("running", () => ) .with("failed", () => ) .with("completed", () => ( )) .otherwise(() => null), [searchState, searchResults, settings], ); } function RunningSearchContent() { const hasSmallScreen = useMediaQuery(`(max-width: ${em(530)})`); const numberOfSquareSkeletons = hasSmallScreen ? 4 : 6; return ( <> {[...Array(numberOfSquareSkeletons)].map((_, index) => ( ))} ); } function FailedSearchContent() { return ( <> } > It looks like your current search did not return any results. Try refining your search by adding more keywords or rephrasing your query. ); } function CompletedSearchContent({ searchResults, settings, }: { searchResults: SearchResults; settings: Settings; }) { return ( <> {match([settings.enableImageSearch, searchResults.imageResults.length]) .with([true, Pattern.number.positive()], () => ( )) .otherwise(() => null)} ); }