UNPKG

@backstage/plugin-techdocs

Version:

The Backstage plugin that renders technical documentation for your components

71 lines (68 loc) 2.62 kB
import { useEffect } from 'react'; import { useParams } from 'react-router-dom'; import { stringifyEntityRef } from '@backstage/catalog-model'; import { useApi, configApiRef } from '@backstage/core-plugin-api'; import { useTechDocsAddons, useTechDocsReaderPage } from '@backstage/plugin-techdocs-react'; import { entityPresentationApiRef } from '@backstage/plugin-catalog-react'; import capitalize from 'lodash/capitalize'; function useTechDocsReaderHeaderData() { const addons = useTechDocsAddons(); const configApi = useApi(configApiRef); const entityPresentationApi = useApi(entityPresentationApiRef); const { "*": path = "" } = useParams(); const { title, setTitle, subtitle, setSubtitle, entityRef, metadata: { value: metadata, loading: metadataLoading }, entityMetadata: { value: entityMetadata, loading: entityMetadataLoading } } = useTechDocsReaderPage(); useEffect(() => { if (!metadata) return; setTitle(metadata.site_name); setSubtitle(() => { let { site_description } = metadata; if (!site_description || site_description === "None") { site_description = ""; } return site_description; }); }, [metadata, setTitle, setSubtitle]); const appTitle = configApi.getOptionalString("app.title") || "Backstage"; const locationMetadata = entityMetadata?.locationMetadata; const showSourceLink = !!locationMetadata && locationMetadata.type !== "dir" && locationMetadata.type !== "file"; const noEntMetadata = !entityMetadataLoading && entityMetadata === void 0; const noTdMetadata = !metadataLoading && metadata === void 0; const hidden = noEntMetadata || noTdMetadata; const removeTrailingSlash = (str) => str.replace(/\/$/, ""); const normalizeAndSpace = (str) => str.replace(/[-_]/g, " ").split(" ").map(capitalize).join(" "); let tabTitle = appTitle; if (!hidden) { const stringEntityRef = stringifyEntityRef(entityRef); const entityDisplayName = entityPresentationApi.forEntity(stringEntityRef).snapshot.primaryTitle; let techdocsTabTitleItems = []; if (path !== "") techdocsTabTitleItems = removeTrailingSlash(path).split("/").map(normalizeAndSpace); const tabTitleItems = [ entityDisplayName, ...techdocsTabTitleItems, appTitle ]; tabTitle = tabTitleItems.join(" | "); } return { title, subtitle, entityRef, entityMetadata, tabTitle, hidden, showSourceLink, sourceLink: locationMetadata?.target, addons }; } export { useTechDocsReaderHeaderData }; //# sourceMappingURL=useTechDocsReaderHeaderData.esm.js.map