From 6e69c11a35356c5257f8669ac5c285478b8bb308 Mon Sep 17 00:00:00 2001 From: Devon Paluso Date: Sat, 9 Sep 2023 12:38:57 -0400 Subject: [PATCH 1/3] Restore functionality to OwnedEntityPicker Signed-off-by: Devon Paluso --- .changeset/grumpy-bikes-beg.md | 5 ++ .../OwnedEntityPicker/OwnedEntityPicker.tsx | 63 ++++++++++++------- .../fields/OwnedEntityPicker/schema.ts | 10 ++- 3 files changed, 56 insertions(+), 22 deletions(-) create mode 100644 .changeset/grumpy-bikes-beg.md diff --git a/.changeset/grumpy-bikes-beg.md b/.changeset/grumpy-bikes-beg.md new file mode 100644 index 0000000000..f150b3d733 --- /dev/null +++ b/.changeset/grumpy-bikes-beg.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Restored functionality to OwnedEntityPicker by converting deprecated ui:options input to catalogFilter diff --git a/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx b/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx index 0122f015a3..d7999c8c0c 100644 --- a/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx @@ -22,6 +22,7 @@ import useAsync from 'react-use/lib/useAsync'; import { EntityPicker } from '../EntityPicker/EntityPicker'; import { OwnedEntityPickerProps } from './schema'; +import { EntityPickerProps } from '../EntityPicker/schema'; export { OwnedEntityPickerSchema } from './schema'; @@ -44,7 +45,6 @@ export const OwnedEntityPicker = (props: OwnedEntityPickerProps) => { return identity.ownershipEntityRefs; }); - const allowedKinds = uiSchema['ui:options']?.allowedKinds; if (loading) return ( { /> ); - return ( - + const entityPickerUISchema = buildEntityPickerUISchema( + uiSchema, + identityRefs, ); + + return ; }; + +/** + * Builds a `uiSchema` for an `EntityPicker` from a parent `OwnedEntityPicker`. + * Migrates deprecated parameters such as `allowedKinds` to `catalogFilter` structure. + * + * @param uiSchema The `uiSchema` of an `OwnedEntityPicker` component. + * @param identityRefs The user and group entities that the user claims ownership through. + * @returns The `uiSchema` for an `EntityPicker` component. + */ +function buildEntityPickerUISchema( + uiSchema: OwnedEntityPickerProps['uiSchema'], + identityRefs: string[] | undefined, +): EntityPickerProps['uiSchema'] { + // Note: This is typed to avoid es-lint rule TS2698 + const uiOptions: EntityPickerProps['uiSchema']['ui:options'] = + uiSchema?.['ui:options'] || {}; + const allowedKinds = uiOptions.allowedKinds; + + const catalogFilter = { + ...uiOptions.catalogFilter, + ...(allowedKinds + ? { + kind: allowedKinds, + [`relations.${RELATION_OWNED_BY}`]: identityRefs || [], + } + : { + [`relations.${RELATION_OWNED_BY}`]: identityRefs || [], + }), + }; + + return { + 'ui:options': { + catalogFilter, + }, + }; +} diff --git a/plugins/scaffolder/src/components/fields/OwnedEntityPicker/schema.ts b/plugins/scaffolder/src/components/fields/OwnedEntityPicker/schema.ts index 4190b89f95..2bb75db263 100644 --- a/plugins/scaffolder/src/components/fields/OwnedEntityPicker/schema.ts +++ b/plugins/scaffolder/src/components/fields/OwnedEntityPicker/schema.ts @@ -15,6 +15,7 @@ */ import { z } from 'zod'; import { makeFieldSchemaFromZod } from '../utils'; +import { entityQueryFilterExpressionSchema } from '../EntityPicker/schema'; /** * @public @@ -25,7 +26,9 @@ export const OwnedEntityPickerFieldSchema = makeFieldSchemaFromZod( allowedKinds: z .array(z.string()) .optional() - .describe('List of kinds of entities to derive options from'), + .describe( + 'DEPRECATED: Use `catalogFilter` instead. List of kinds of entities to derive options from', + ), defaultKind: z .string() .optional() @@ -42,6 +45,11 @@ export const OwnedEntityPickerFieldSchema = makeFieldSchemaFromZod( .describe( 'The default namespace. Options with this namespace will not be prefixed.', ), + catalogFilter: z + .array(entityQueryFilterExpressionSchema) + .or(entityQueryFilterExpressionSchema) + .optional() + .describe('List of key-value filter expression for entities'), }), ); From 1bc96634b5f253646289bff08ad6f1e173969cca Mon Sep 17 00:00:00 2001 From: Devon Paluso Date: Sat, 9 Sep 2023 13:36:19 -0400 Subject: [PATCH 2/3] Include build:api-reports Signed-off-by: Devon Paluso --- plugins/scaffolder/api-report.md | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 59d2d54fcc..a776628da5 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -241,6 +241,24 @@ export const OwnedEntityPickerFieldExtension: FieldExtensionComponent_2< defaultKind?: string | undefined; allowArbitraryValues?: boolean | undefined; defaultNamespace?: string | false | undefined; + catalogFilter?: + | Record< + string, + | string + | string[] + | { + exists?: boolean | undefined; + } + > + | Record< + string, + | string + | string[] + | { + exists?: boolean | undefined; + } + >[] + | undefined; } >; @@ -252,6 +270,24 @@ export const OwnedEntityPickerFieldSchema: FieldSchema< defaultKind?: string | undefined; allowArbitraryValues?: boolean | undefined; defaultNamespace?: string | false | undefined; + catalogFilter?: + | Record< + string, + | string + | string[] + | { + exists?: boolean | undefined; + } + > + | Record< + string, + | string + | string[] + | { + exists?: boolean | undefined; + } + >[] + | undefined; } >; From 84c4cc32e1ce9d25920f19abd7dd492befc88a6c Mon Sep 17 00:00:00 2001 From: Devon Paluso Date: Sat, 9 Sep 2023 13:44:52 -0400 Subject: [PATCH 3/3] Update changelog spelling {"message": "[Vale.Spelling] Did you really mean 'catalogFilter'?", "location": {"path": ".changeset/grumpy-bikes-beg.md", "range": {"start": {"line": 5, "column": 90}}}, "severity": "ERROR"} Signed-off-by: Devon Paluso --- .changeset/grumpy-bikes-beg.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/grumpy-bikes-beg.md b/.changeset/grumpy-bikes-beg.md index f150b3d733..6fe44ee748 100644 --- a/.changeset/grumpy-bikes-beg.md +++ b/.changeset/grumpy-bikes-beg.md @@ -2,4 +2,4 @@ '@backstage/plugin-scaffolder': patch --- -Restored functionality to OwnedEntityPicker by converting deprecated ui:options input to catalogFilter +Restored functionality to `OwnedEntityPicker` by converting deprecated `ui:options` input to `catalogFilter`.