@backstage/plugin-techdocs
Version:
The Backstage plugin that renders technical documentation for your components
71 lines (68 loc) • 2.62 kB
JavaScript
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