catalog: group catalog extension data refs

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2023-12-13 17:08:29 +01:00
parent 8563ee2b8f
commit fd9863c209
5 changed files with 48 additions and 52 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-react': patch
---
Grouped all `/alpha` extension data reference exports under `catalogExtensionData`.
+14 -22
View File
@@ -13,6 +13,16 @@ import { ResolvedExtensionInputs } from '@backstage/frontend-plugin-api';
import { ResourcePermission } from '@backstage/plugin-permission-common';
import { RouteRef } from '@backstage/frontend-plugin-api';
// @alpha (undocumented)
export const catalogExtensionData: {
entityContentTitle: ConfigurableExtensionDataRef<string, {}>;
entityFilterFunction: ConfigurableExtensionDataRef<
(entity: Entity) => boolean,
{}
>;
entityFilterExpression: ConfigurableExtensionDataRef<string, {}>;
};
// @alpha (undocumented)
export function createEntityCardExtension<
TInputs extends AnyExtensionInputMap,
@@ -26,8 +36,8 @@ export function createEntityCardExtension<
disabled?: boolean;
inputs?: TInputs;
filter?:
| typeof entityFilterFunctionExtensionDataRef.T
| typeof entityFilterExpressionExtensionDataRef.T;
| typeof catalogExtensionData.entityFilterFunction.T
| typeof catalogExtensionData.entityFilterExpression.T;
loader: (options: {
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
}) => Promise<JSX.Element>;
@@ -51,8 +61,8 @@ export function createEntityContentExtension<
defaultPath: string;
defaultTitle: string;
filter?:
| typeof entityFilterFunctionExtensionDataRef.T
| typeof entityFilterExpressionExtensionDataRef.T;
| typeof catalogExtensionData.entityFilterFunction.T
| typeof catalogExtensionData.entityFilterExpression.T;
loader: (options: {
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
}) => Promise<JSX.Element>;
@@ -62,24 +72,6 @@ export function createEntityContentExtension<
filter?: string | undefined;
}>;
// @alpha (undocumented)
export const entityContentTitleExtensionDataRef: ConfigurableExtensionDataRef<
string,
{}
>;
// @alpha (undocumented)
export const entityFilterExpressionExtensionDataRef: ConfigurableExtensionDataRef<
string,
{}
>;
// @alpha (undocumented)
export const entityFilterFunctionExtensionDataRef: ConfigurableExtensionDataRef<
(entity: Entity) => boolean,
{}
>;
// @alpha
export function isOwnerOf(owner: Entity, entity: Entity): boolean;
+24 -24
View File
@@ -33,17 +33,17 @@ export { useEntityPermission } from './hooks/useEntityPermission';
export { isOwnerOf } from './utils';
/** @alpha */
export const entityContentTitleExtensionDataRef =
createExtensionDataRef<string>('plugin.catalog.entity.content.title');
/** @alpha */
export const entityFilterFunctionExtensionDataRef = createExtensionDataRef<
(entity: Entity) => boolean
>('plugin.catalog.entity.filter.fn');
/** @alpha */
export const entityFilterExpressionExtensionDataRef =
createExtensionDataRef<string>('plugin.catalog.entity.filter.expression');
export const catalogExtensionData = {
entityContentTitle: createExtensionDataRef<string>(
'catalog.entity-content-title',
),
entityFilterFunction: createExtensionDataRef<(entity: Entity) => boolean>(
'catalog.entity-filter-function',
),
entityFilterExpression: createExtensionDataRef<string>(
'catalog.entity-filter-expression',
),
};
// TODO: Figure out how to merge with provided config schema
/** @alpha */
@@ -56,8 +56,8 @@ export function createEntityCardExtension<
disabled?: boolean;
inputs?: TInputs;
filter?:
| typeof entityFilterFunctionExtensionDataRef.T
| typeof entityFilterExpressionExtensionDataRef.T;
| typeof catalogExtensionData.entityFilterFunction.T
| typeof catalogExtensionData.entityFilterExpression.T;
loader: (options: {
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
}) => Promise<JSX.Element>;
@@ -73,8 +73,8 @@ export function createEntityCardExtension<
disabled: options.disabled ?? true,
output: {
element: coreExtensionData.reactElement,
filterFunction: entityFilterFunctionExtensionDataRef.optional(),
filterExpression: entityFilterExpressionExtensionDataRef.optional(),
filterFunction: catalogExtensionData.entityFilterFunction.optional(),
filterExpression: catalogExtensionData.entityFilterExpression.optional(),
},
inputs: options.inputs,
configSchema: createSchemaFromZod(z =>
@@ -114,8 +114,8 @@ export function createEntityContentExtension<
defaultPath: string;
defaultTitle: string;
filter?:
| typeof entityFilterFunctionExtensionDataRef.T
| typeof entityFilterExpressionExtensionDataRef.T;
| typeof catalogExtensionData.entityFilterFunction.T
| typeof catalogExtensionData.entityFilterExpression.T;
loader: (options: {
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
}) => Promise<JSX.Element>;
@@ -133,9 +133,9 @@ export function createEntityContentExtension<
element: coreExtensionData.reactElement,
path: coreExtensionData.routePath,
routeRef: coreExtensionData.routeRef.optional(),
title: entityContentTitleExtensionDataRef,
filterFunction: entityFilterFunctionExtensionDataRef.optional(),
filterExpression: entityFilterExpressionExtensionDataRef.optional(),
title: catalogExtensionData.entityContentTitle,
filterFunction: catalogExtensionData.entityFilterFunction.optional(),
filterExpression: catalogExtensionData.entityFilterExpression.optional(),
},
inputs: options.inputs,
configSchema: createSchemaFromZod(z =>
@@ -173,15 +173,15 @@ export function createEntityContentExtension<
function mergeFilters(inputs: {
options: {
filter?:
| typeof entityFilterFunctionExtensionDataRef.T
| typeof entityFilterExpressionExtensionDataRef.T;
| typeof catalogExtensionData.entityFilterFunction.T
| typeof catalogExtensionData.entityFilterExpression.T;
};
config: {
filter?: string;
};
}): {
filterFunction?: typeof entityFilterFunctionExtensionDataRef.T;
filterExpression?: typeof entityFilterExpressionExtensionDataRef.T;
filterFunction?: typeof catalogExtensionData.entityFilterFunction.T;
filterExpression?: typeof catalogExtensionData.entityFilterExpression.T;
} {
const { options, config } = inputs;
if (config.filter) {
+3 -4
View File
@@ -21,8 +21,7 @@ import {
} from '@backstage/frontend-plugin-api';
import {
createEntityContentExtension,
entityFilterFunctionExtensionDataRef,
entityFilterExpressionExtensionDataRef,
catalogExtensionData,
} from '@backstage/plugin-catalog-react/alpha';
export const OverviewEntityContent = createEntityContentExtension({
@@ -33,8 +32,8 @@ export const OverviewEntityContent = createEntityContentExtension({
inputs: {
cards: createExtensionInput({
element: coreExtensionData.reactElement,
filterFunction: entityFilterFunctionExtensionDataRef.optional(),
filterExpression: entityFilterExpressionExtensionDataRef.optional(),
filterFunction: catalogExtensionData.entityFilterFunction.optional(),
filterExpression: catalogExtensionData.entityFilterExpression.optional(),
}),
},
loader: async ({ inputs }) =>
+2 -2
View File
@@ -28,7 +28,7 @@ import {
AsyncEntityProvider,
entityRouteRef,
} from '@backstage/plugin-catalog-react';
import { entityContentTitleExtensionDataRef } from '@backstage/plugin-catalog-react/alpha';
import { catalogExtensionData } from '@backstage/plugin-catalog-react/alpha';
import { rootRouteRef } from '../routes';
import { useEntityFromUrl } from '../components/CatalogEntityPage/useEntityFromUrl';
@@ -56,7 +56,7 @@ export const CatalogEntityPage = createPageExtension({
element: coreExtensionData.reactElement,
path: coreExtensionData.routePath,
routeRef: coreExtensionData.routeRef.optional(),
title: entityContentTitleExtensionDataRef,
title: catalogExtensionData.entityContentTitle,
}),
},
loader: async ({ inputs }) => {