All files / src/views/Home useSection.ts

0% Statements 0/17
0% Branches 0/13
0% Functions 0/4
0% Lines 0/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55                                                                                                             
import { useMemo } from "react";
import { ExtendedCatalogPackage } from "../../api/catalog-search";
import { CatalogSearchSort } from "../../api/catalog-search/constants";
import { FeaturedPackagesDetail } from "../../api/config";
import { useSearchContext } from "../../contexts/Search";
import { useCatalog } from "../../hooks/useCatalog";
import { useCatalogResults } from "../../hooks/useCatalogResults";
 
export const useSection = ({
  showLastUpdated,
  showPackages,
}: {
  showLastUpdated?: number;
  showPackages?: FeaturedPackagesDetail[];
}) => {
  const { isLoading, error } = useCatalog();
  const { results } = useCatalogResults({
    limit: 25,
    sort: CatalogSearchSort.PublishDateDesc,
  });
 
  const searchInstance = useSearchContext();
 
  return useMemo(() => {
    if (isLoading || error || !results) return [];
 
    if (showLastUpdated) {
      return results.slice(0, showLastUpdated);
    } else if (showPackages && searchInstance) {
      return showPackages
        .map((p) => {
          const [pkg] = searchInstance.findByName(p.name, { dedup: true });
 
          if (pkg) {
            return {
              ...pkg,
              comment: p.comment,
            };
          }
          return undefined;
        })
        .filter((pkg) => pkg !== undefined) as ExtendedCatalogPackage[];
    } else {
      return undefined;
    }
  }, [
    isLoading,
    error,
    results,
    showLastUpdated,
    showPackages,
    searchInstance,
  ]);
};