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)}
>
);
}