diff --git a/plugins/scaffolder/alpha-api-report.md b/plugins/scaffolder/alpha-api-report.md
index 58d70e3c71..abb0dc9e03 100644
--- a/plugins/scaffolder/alpha-api-report.md
+++ b/plugins/scaffolder/alpha-api-report.md
@@ -5,7 +5,6 @@
```ts
///
-import { Entity } from '@backstage/catalog-model';
import { FormProps as FormProps_2 } from '@backstage/plugin-scaffolder-react/alpha';
import type { FormProps as FormProps_3 } from '@rjsf/core-v5';
import { PropsWithChildren } from 'react';
@@ -31,7 +30,7 @@ export type NextRouterProps = {
}>;
};
groups?: TemplateGroupFilter[];
- templateFilter?: TemplateFilter;
+ templateFilter?: (entity: TemplateEntityV1beta3) => boolean;
FormProps?: FormProps_2;
contextMenu?: {
editor?: boolean;
@@ -45,13 +44,10 @@ export const NextScaffolderPage: (
props: PropsWithChildren,
) => JSX.Element;
-// @alpha (undocumented)
-export type TemplateFilter = (entity: Entity) => boolean;
-
// @alpha (undocumented)
export type TemplateGroupFilter = {
title?: React_2.ReactNode;
- filter: (entity: Entity) => boolean;
+ filter: (entity: TemplateEntityV1beta3) => boolean;
};
// (No @packageDocumentation comment for this package)
diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md
index 3865a2517d..7173bbd3e6 100644
--- a/plugins/scaffolder/api-report.md
+++ b/plugins/scaffolder/api-report.md
@@ -332,7 +332,7 @@ export type RouterProps = {
title?: React_2.ReactNode;
filter: (entity: Entity) => boolean;
}>;
- templateFilter?: (entity: Entity) => boolean;
+ templateFilter?: (entity: TemplateEntityV1beta3) => boolean;
defaultPreviewTemplate?: string;
headerOptions?: {
pageTitleOverride?: string;
diff --git a/plugins/scaffolder/src/alpha.ts b/plugins/scaffolder/src/alpha.ts
index e1c2260acb..72eb073fba 100644
--- a/plugins/scaffolder/src/alpha.ts
+++ b/plugins/scaffolder/src/alpha.ts
@@ -17,7 +17,6 @@
export { NextScaffolderPage } from './plugin';
export {
type TemplateGroupFilter,
- type TemplateFilter,
type NextRouterProps,
type FormProps,
} from './next';
diff --git a/plugins/scaffolder/src/components/Router.tsx b/plugins/scaffolder/src/components/Router.tsx
index b84fb664bc..05d5cc9f0a 100644
--- a/plugins/scaffolder/src/components/Router.tsx
+++ b/plugins/scaffolder/src/components/Router.tsx
@@ -58,7 +58,7 @@ export type RouterProps = {
title?: React.ReactNode;
filter: (entity: Entity) => boolean;
}>;
- templateFilter?: (entity: Entity) => boolean;
+ templateFilter?: (entity: TemplateEntityV1beta3) => boolean;
defaultPreviewTemplate?: string;
headerOptions?: {
pageTitleOverride?: string;
diff --git a/plugins/scaffolder/src/components/ScaffolderPage/ScaffolderPage.tsx b/plugins/scaffolder/src/components/ScaffolderPage/ScaffolderPage.tsx
index b56ebd83af..40435573e9 100644
--- a/plugins/scaffolder/src/components/ScaffolderPage/ScaffolderPage.tsx
+++ b/plugins/scaffolder/src/components/ScaffolderPage/ScaffolderPage.tsx
@@ -22,7 +22,6 @@ import {
Page,
SupportButton,
} from '@backstage/core-components';
-import { Entity } from '@backstage/catalog-model';
import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';
import { useRouteRef } from '@backstage/core-plugin-api';
import {
@@ -47,9 +46,9 @@ export type ScaffolderPageProps = {
| undefined;
groups?: Array<{
title?: React.ReactNode;
- filter: (entity: Entity) => boolean;
+ filter: (entity: TemplateEntityV1beta3) => boolean;
}>;
- templateFilter?: (entity: Entity) => boolean;
+ templateFilter?: (entity: TemplateEntityV1beta3) => boolean;
contextMenu?: {
editor?: boolean;
actions?: boolean;
@@ -72,7 +71,7 @@ export const ScaffolderPageContents = ({
const registerComponentLink = useRouteRef(registerComponentRouteRef);
const otherTemplatesGroup = {
title: groups ? 'Other Templates' : 'Templates',
- filter: (entity: Entity) => {
+ filter: (entity: TemplateEntityV1beta3) => {
const filtered = (groups ?? []).map(group => group.filter(entity));
return !filtered.some(result => result === true);
},
diff --git a/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx b/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx
index 190c0cd0ac..cf1ee66810 100644
--- a/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx
+++ b/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx
@@ -38,9 +38,9 @@ export type TemplateListProps = {
| undefined;
group?: {
title?: React.ReactNode;
- filter: (entity: Entity) => boolean;
+ filter: (entity: TemplateEntityV1beta3) => boolean;
};
- templateFilter?: (entity: Entity) => boolean;
+ templateFilter?: (entity: TemplateEntityV1beta3) => boolean;
};
/**
@@ -54,8 +54,22 @@ export const TemplateList = ({
const { loading, error, entities } = useEntityList();
const Card = TemplateCardComponent || TemplateCard;
const maybeFilteredEntities = (
- group ? entities.filter(e => group.filter(e)) : entities
- ).filter(e => (templateFilter ? !templateFilter(e) : true));
+ group
+ ? entities
+ .filter(
+ (e): e is TemplateEntityV1beta3 =>
+ e.kind === 'Template' &&
+ e.apiVersion === 'scaffolder.backstage.io/v1beta3',
+ )
+ .filter(group.filter)
+ : entities
+ )
+ .filter(
+ (e): e is TemplateEntityV1beta3 =>
+ e.kind === 'Template' &&
+ e.apiVersion === 'scaffolder.backstage.io/v1beta3',
+ )
+ .filter(e => (templateFilter ? !templateFilter(e) : true));
const titleComponent: React.ReactNode = (() => {
if (group && group.title) {
diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx
index 167801c255..75d87602e4 100644
--- a/plugins/scaffolder/src/next/Router/Router.tsx
+++ b/plugins/scaffolder/src/next/Router/Router.tsx
@@ -29,7 +29,7 @@ import {
} from '@backstage/plugin-scaffolder-react';
import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';
-import { TemplateGroupFilter, TemplateFilter } from '../TemplateListPage';
+import { TemplateGroupFilter } from '../TemplateListPage';
import { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default';
import {
@@ -61,7 +61,7 @@ export type NextRouterProps = {
}>;
};
groups?: TemplateGroupFilter[];
- templateFilter?: TemplateFilter;
+ templateFilter?: (entity: TemplateEntityV1beta3) => boolean;
// todo(blam): rename this to formProps
FormProps?: FormProps;
contextMenu?: {
diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx
index decfeee470..1096553352 100644
--- a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx
+++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx
@@ -15,11 +15,7 @@
*/
import React, { useCallback } from 'react';
-import {
- Entity,
- parseEntityRef,
- stringifyEntityRef,
-} from '@backstage/catalog-model';
+import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';
import { useEntityList } from '@backstage/plugin-catalog-react';
import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';
import { Progress, Link, DocsIcon } from '@backstage/core-components';
@@ -34,22 +30,17 @@ import { TemplateGroup } from '@backstage/plugin-scaffolder-react/alpha';
import { viewTechDocRouteRef, selectedTemplateRouteRef } from '../../routes';
import { useNavigate } from 'react-router-dom';
-/**
- * @alpha
- */
-export type TemplateFilter = (entity: Entity) => boolean;
-
/**
* @alpha
*/
export type TemplateGroupFilter = {
title?: React.ReactNode;
- filter: (entity: Entity) => boolean;
+ filter: (entity: TemplateEntityV1beta3) => boolean;
};
export interface TemplateGroupsProps {
groups: TemplateGroupFilter[];
- templateFilter?: TemplateFilter;
+ templateFilter?: (entity: TemplateEntityV1beta3) => boolean;
TemplateCardComponent?: React.ComponentType<{
template: TemplateEntityV1beta3;
}>;
@@ -96,8 +87,13 @@ export const TemplateGroups = (props: TemplateGroupsProps) => {
<>
{groups.map(({ title, filter }, index) => {
const templates = entities
+ .filter(
+ (e): e is TemplateEntityV1beta3 =>
+ e.kind === 'Template' &&
+ e.apiVersion === 'scaffolder.backstage.io/v1beta3',
+ )
.filter(e => (templateFilter ? !templateFilter(e) : true))
- .filter((e): e is TemplateEntityV1beta3 => filter(e))
+ .filter(filter)
.map(template => {
const { kind, namespace, name } = parseEntityRef(
stringifyEntityRef(template),
diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx
index 3f81188e06..0af20db6c9 100644
--- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx
+++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx
@@ -35,11 +35,7 @@ import {
import { CategoryPicker } from './CategoryPicker';
import { RegisterExistingButton } from './RegisterExistingButton';
import { useRouteRef } from '@backstage/core-plugin-api';
-import {
- TemplateGroupFilter,
- TemplateGroups,
- TemplateFilter,
-} from './TemplateGroups';
+import { TemplateGroupFilter, TemplateGroups } from './TemplateGroups';
import { registerComponentRouteRef } from '../../routes';
import { ContextMenu } from './ContextMenu';
@@ -48,7 +44,7 @@ export type TemplateListPageProps = {
template: TemplateEntityV1beta3;
}>;
groups?: TemplateGroupFilter[];
- templateFilter?: TemplateFilter;
+ templateFilter?: (entity: TemplateEntityV1beta3) => boolean;
contextMenu?: {
editor?: boolean;
actions?: boolean;
diff --git a/plugins/scaffolder/src/next/TemplateListPage/index.ts b/plugins/scaffolder/src/next/TemplateListPage/index.ts
index a974052730..0436cfeeeb 100644
--- a/plugins/scaffolder/src/next/TemplateListPage/index.ts
+++ b/plugins/scaffolder/src/next/TemplateListPage/index.ts
@@ -14,4 +14,4 @@
* limitations under the License.
*/
export { TemplateListPage } from './TemplateListPage';
-export type { TemplateGroupFilter, TemplateFilter } from './TemplateGroups';
+export type { TemplateGroupFilter } from './TemplateGroups';