move helpers to techdocs-react
Signed-off-by: Chris Suich <csuich2@gmail.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs': minor
|
||||
'@backstage/plugin-techdocs-react': minor
|
||||
'@backstage/plugin-catalog': minor
|
||||
'@backstage/plugin-techdocs-common': patch
|
||||
---
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
"@backstage/plugin-scaffolder-common": "workspace:^",
|
||||
"@backstage/plugin-search-common": "workspace:^",
|
||||
"@backstage/plugin-search-react": "workspace:^",
|
||||
"@backstage/plugin-techdocs": "workspace:^",
|
||||
"@backstage/plugin-techdocs-react": "workspace:^",
|
||||
"@backstage/types": "workspace:^",
|
||||
"@backstage/version-bridge": "workspace:^",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
|
||||
@@ -64,7 +64,7 @@ import { taskCreatePermission } from '@backstage/plugin-scaffolder-common/alpha'
|
||||
import { usePermission } from '@backstage/plugin-permission-react';
|
||||
import { catalogTranslationRef } from '../../alpha/translation';
|
||||
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
||||
import { buildTechDocsURL } from '@backstage/plugin-techdocs';
|
||||
import { buildTechDocsURL } from '@backstage/plugin-techdocs-react';
|
||||
|
||||
const TECHDOCS_ANNOTATION = 'backstage.io/techdocs-ref';
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
"@backstage/core-components": "workspace:^",
|
||||
"@backstage/core-plugin-api": "workspace:^",
|
||||
"@backstage/frontend-plugin-api": "workspace:^",
|
||||
"@backstage/plugin-techdocs-common": "workspace:^",
|
||||
"@backstage/version-bridge": "workspace:^",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/styles": "^4.11.0",
|
||||
|
||||
@@ -15,7 +15,23 @@
|
||||
*/
|
||||
|
||||
import { Config } from '@backstage/config';
|
||||
import { CompoundEntityRef } from '@backstage/catalog-model';
|
||||
import {
|
||||
CompoundEntityRef,
|
||||
DEFAULT_NAMESPACE,
|
||||
Entity,
|
||||
parseEntityRef,
|
||||
} from '@backstage/catalog-model';
|
||||
import {
|
||||
TECHDOCS_EXTERNAL_ANNOTATION,
|
||||
TECHDOCS_EXTERNAL_PATH_ANNOTATION,
|
||||
} from '@backstage/plugin-techdocs-common';
|
||||
import { RouteFunc } from '@backstage/core-plugin-api';
|
||||
|
||||
export type TechDocsRouteFunc = RouteFunc<{
|
||||
namespace: string;
|
||||
kind: string;
|
||||
name: string;
|
||||
}>;
|
||||
|
||||
/**
|
||||
* Lower-case entity triplets by default, but allow override.
|
||||
@@ -35,3 +51,52 @@ export function toLowercaseEntityRefMaybe(
|
||||
|
||||
return entityRef;
|
||||
}
|
||||
|
||||
export function getEntityRootTechDocsPath(entity: Entity): string {
|
||||
let path = entity.metadata.annotations?.[TECHDOCS_EXTERNAL_PATH_ANNOTATION];
|
||||
if (!path) {
|
||||
return '';
|
||||
}
|
||||
if (!path.startsWith('/')) {
|
||||
path = `/${path}`;
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
export const buildTechDocsURL = (
|
||||
entity: Entity,
|
||||
routeFunc: TechDocsRouteFunc | undefined,
|
||||
) => {
|
||||
if (!routeFunc) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
let namespace = entity.metadata.namespace || DEFAULT_NAMESPACE;
|
||||
let kind = entity.kind;
|
||||
let name = entity.metadata.name;
|
||||
|
||||
if (entity.metadata.annotations?.[TECHDOCS_EXTERNAL_ANNOTATION]) {
|
||||
try {
|
||||
const techdocsRef = parseEntityRef(
|
||||
entity.metadata.annotations?.[TECHDOCS_EXTERNAL_ANNOTATION],
|
||||
);
|
||||
namespace = techdocsRef.namespace;
|
||||
kind = techdocsRef.kind;
|
||||
name = techdocsRef.name;
|
||||
} catch {
|
||||
// not a fan of this but we don't care if the parseEntityRef fails
|
||||
}
|
||||
}
|
||||
|
||||
const url = routeFunc({
|
||||
namespace,
|
||||
kind,
|
||||
name,
|
||||
});
|
||||
|
||||
// Add on the external entity path to the url if one exists. This allows deep linking into another
|
||||
// entities TechDocs.
|
||||
const path = getEntityRootTechDocsPath(entity);
|
||||
|
||||
return `${url}${path}`;
|
||||
};
|
||||
|
||||
@@ -52,4 +52,9 @@ export {
|
||||
useShadowRootElements,
|
||||
useShadowRootSelection,
|
||||
} from './hooks';
|
||||
export { toLowercaseEntityRefMaybe } from './helpers';
|
||||
export {
|
||||
toLowercaseEntityRefMaybe,
|
||||
getEntityRootTechDocsPath,
|
||||
buildTechDocsURL,
|
||||
} from './helpers';
|
||||
export type { TechDocsRouteFunc } from './helpers';
|
||||
|
||||
@@ -20,12 +20,12 @@ import {
|
||||
parseEntityRef,
|
||||
} from '@backstage/catalog-model';
|
||||
import { TECHDOCS_EXTERNAL_ANNOTATION } from '@backstage/plugin-techdocs-common';
|
||||
import { getEntityRootTechDocsPath } from '@backstage/plugin-techdocs-react';
|
||||
|
||||
import { TechDocsReaderPage } from './plugin';
|
||||
import { TechDocsReaderPageContent } from './reader/components/TechDocsReaderPageContent';
|
||||
import { TechDocsReaderPageSubheader } from './reader/components/TechDocsReaderPageSubheader';
|
||||
import { useEntityPageTechDocsRedirect } from './search/hooks/useTechDocsLocation';
|
||||
import { getEntityRootTechDocsPath } from './helpers';
|
||||
|
||||
type EntityPageDocsProps = {
|
||||
entity: Entity;
|
||||
|
||||
@@ -14,23 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
DEFAULT_NAMESPACE,
|
||||
Entity,
|
||||
parseEntityRef,
|
||||
} from '@backstage/catalog-model';
|
||||
import { Config } from '@backstage/config';
|
||||
import {
|
||||
TECHDOCS_EXTERNAL_ANNOTATION,
|
||||
TECHDOCS_EXTERNAL_PATH_ANNOTATION,
|
||||
} from '@backstage/plugin-techdocs-common';
|
||||
import { RouteFunc } from '@backstage/core-plugin-api';
|
||||
|
||||
export type TechDocsRouteFunc = RouteFunc<{
|
||||
namespace: string;
|
||||
kind: string;
|
||||
name: string;
|
||||
}>;
|
||||
|
||||
// Lower-case entity triplets by default, but allow override.
|
||||
export function toLowerMaybe(str: string, config: Config) {
|
||||
@@ -40,52 +24,3 @@ export function toLowerMaybe(str: string, config: Config) {
|
||||
? str
|
||||
: str.toLocaleLowerCase('en-US');
|
||||
}
|
||||
|
||||
export function getEntityRootTechDocsPath(entity: Entity): string {
|
||||
let path = entity.metadata.annotations?.[TECHDOCS_EXTERNAL_PATH_ANNOTATION];
|
||||
if (!path) {
|
||||
return '';
|
||||
}
|
||||
if (!path.startsWith('/')) {
|
||||
path = `/${path}`;
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
export const buildTechDocsURL = (
|
||||
entity: Entity,
|
||||
routeFunc: TechDocsRouteFunc | undefined,
|
||||
) => {
|
||||
if (!routeFunc) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
let namespace = entity.metadata.namespace || DEFAULT_NAMESPACE;
|
||||
let kind = entity.kind;
|
||||
let name = entity.metadata.name;
|
||||
|
||||
if (entity.metadata.annotations?.[TECHDOCS_EXTERNAL_ANNOTATION]) {
|
||||
try {
|
||||
const techdocsRef = parseEntityRef(
|
||||
entity.metadata.annotations?.[TECHDOCS_EXTERNAL_ANNOTATION],
|
||||
);
|
||||
namespace = techdocsRef.namespace;
|
||||
kind = techdocsRef.kind;
|
||||
name = techdocsRef.name;
|
||||
} catch {
|
||||
// not a fan of this but we don't care if the parseEntityRef fails
|
||||
}
|
||||
}
|
||||
|
||||
const url = routeFunc({
|
||||
namespace,
|
||||
kind,
|
||||
name,
|
||||
});
|
||||
|
||||
// Add on the external entity path to the url if one exists. This allows deep linking into another
|
||||
// entities TechDocs.
|
||||
const path = getEntityRootTechDocsPath(entity);
|
||||
|
||||
return `${url}${path}`;
|
||||
};
|
||||
|
||||
@@ -46,7 +46,6 @@ export {
|
||||
LegacyEmbeddedDocsRouter as EmbeddedDocsRouter,
|
||||
Router,
|
||||
} from './Router';
|
||||
export { buildTechDocsURL, getEntityRootTechDocsPath } from './helpers';
|
||||
|
||||
export type { TechDocsSearchResultListItemProps } from './search/components/TechDocsSearchResultListItem';
|
||||
|
||||
@@ -70,5 +69,3 @@ export type {
|
||||
};
|
||||
|
||||
export * from './overridableComponents';
|
||||
|
||||
export type { TechDocsRouteFunc } from './helpers';
|
||||
|
||||
@@ -6355,7 +6355,7 @@ __metadata:
|
||||
"@backstage/plugin-scaffolder-common": "workspace:^"
|
||||
"@backstage/plugin-search-common": "workspace:^"
|
||||
"@backstage/plugin-search-react": "workspace:^"
|
||||
"@backstage/plugin-techdocs": "workspace:^"
|
||||
"@backstage/plugin-techdocs-react": "workspace:^"
|
||||
"@backstage/test-utils": "workspace:^"
|
||||
"@backstage/types": "workspace:^"
|
||||
"@backstage/version-bridge": "workspace:^"
|
||||
@@ -8504,6 +8504,7 @@ __metadata:
|
||||
"@backstage/core-components": "workspace:^"
|
||||
"@backstage/core-plugin-api": "workspace:^"
|
||||
"@backstage/frontend-plugin-api": "workspace:^"
|
||||
"@backstage/plugin-techdocs-common": "workspace:^"
|
||||
"@backstage/test-utils": "workspace:^"
|
||||
"@backstage/theme": "workspace:^"
|
||||
"@backstage/version-bridge": "workspace:^"
|
||||
|
||||
Reference in New Issue
Block a user