chore: don't have a type for TemplateFilter
Signed-off-by: blam <ben@blam.sh>
This commit is contained in:
@@ -5,7 +5,6 @@
|
||||
```ts
|
||||
/// <reference types="react" />
|
||||
|
||||
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<NextRouterProps>,
|
||||
) => 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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
export { NextScaffolderPage } from './plugin';
|
||||
export {
|
||||
type TemplateGroupFilter,
|
||||
type TemplateFilter,
|
||||
type NextRouterProps,
|
||||
type FormProps,
|
||||
} from './next';
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
},
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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?: {
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -14,4 +14,4 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
export { TemplateListPage } from './TemplateListPage';
|
||||
export type { TemplateGroupFilter, TemplateFilter } from './TemplateGroups';
|
||||
export type { TemplateGroupFilter } from './TemplateGroups';
|
||||
|
||||
Reference in New Issue
Block a user