All files / src/views/Package/useSectionItems useSectionItems.ts

0% Statements 0/24
0% Branches 0/14
0% Functions 0/4
0% Lines 0/21

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 56 57 58                                                                                                                   
import { useMemo } from "react";
import { useLocation, useRouteMatch } from "react-router-dom";
import { schemaToSectionItems } from "./util";
import { QUERY_PARAMS } from "../../../constants/url";
import { useLanguage } from "../../../hooks/useLanguage";
import { useQueryParams } from "../../../hooks/useQueryParams";
import { API_URL_RESOURCE, README_ITEM_ID } from "../constants";
import { usePackageState } from "../PackageState";
import { isApiPath, MenuItem } from "../util";
 
export const useSectionItems = (): MenuItem[] => {
  const { pathname } = useLocation();
  const { path } = useRouteMatch();
  const { menuItems, jsonDocs } = usePackageState();
 
  const match = useRouteMatch<{ typeId: string }>(
    `${path}/${API_URL_RESOURCE}/:typeId`
  );
  const typeId = match?.params.typeId;
 
  const [language] = useLanguage();
  const q = useQueryParams();
  const submodule = q.get(QUERY_PARAMS.SUBMODULE) ?? "";
 
  const { types, metadata } = useMemo(() => {
    if (!jsonDocs.data) return { types: [] };
 
    const apiReference = jsonDocs.data?.apiReference;
    if (!apiReference) return { types: [] };
 
    return {
      types: [
        ...apiReference.classes,
        ...apiReference.constructs,
        ...apiReference.interfaces,
        ...apiReference.structs,
        ...apiReference.enums,
      ],
      metadata: jsonDocs.data.metadata,
    };
  }, [jsonDocs]);
 
  return useMemo(() => {
    if (!isApiPath(pathname)) {
      const [readmeSection] = menuItems;
      const readmeItems: MenuItem[] =
        readmeSection?.id === README_ITEM_ID ? readmeSection.children : [];
 
      return readmeItems;
    }
 
    const typeInfo = types.find((type) => type.displayName === typeId);
    return typeInfo && metadata
      ? schemaToSectionItems(typeInfo, language, submodule)
      : [];
  }, [language, menuItems, metadata, pathname, submodule, typeId, types]);
};