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