From cfa7d685660f5c44dc65100bc674cc31b7ae780f Mon Sep 17 00:00:00 2001 From: Tim Hansen Date: Wed, 18 Dec 2024 15:40:25 -0700 Subject: [PATCH] Add ApiBlueprint for form-decorators Signed-off-by: Tim Hansen --- .../src/alpha/api/FormDecoratorsApi.ts | 31 +++++++++++++++++++ plugins/scaffolder/src/alpha/api/index.ts | 2 +- plugins/scaffolder/src/alpha/plugin.tsx | 2 ++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder/src/alpha/api/FormDecoratorsApi.ts b/plugins/scaffolder/src/alpha/api/FormDecoratorsApi.ts index 13c4b6d1a2..bc48ee3436 100644 --- a/plugins/scaffolder/src/alpha/api/FormDecoratorsApi.ts +++ b/plugins/scaffolder/src/alpha/api/FormDecoratorsApi.ts @@ -14,8 +14,14 @@ * limitations under the License. */ +import { + ApiBlueprint, + createApiFactory, + createExtensionInput, +} from '@backstage/frontend-plugin-api'; import { ScaffolderFormDecoratorsApi } from './types'; import { ScaffolderFormDecorator } from '@backstage/plugin-scaffolder-react/alpha'; +import { formDecoratorsApiRef } from './ref'; /** @alpha */ export class DefaultScaffolderFormDecoratorsApi @@ -37,3 +43,28 @@ export class DefaultScaffolderFormDecoratorsApi return this.options.decorators; } } + +/** @alpha */ +export const formDecoratorsApi = ApiBlueprint.makeWithOverrides({ + name: 'form-decorators', + inputs: { + // TODO: this should come from the inputs that the form decorators use + formDecorators: createExtensionInput([]), + }, + factory(originalFactory, { inputs }) { + // TODO: this should come from the inputs that the form decorators use + const formDecorators = + inputs.formDecorators as unknown as ScaffolderFormDecorator[]; + + return originalFactory({ + factory: createApiFactory({ + api: formDecoratorsApiRef, + deps: {}, + factory: () => + DefaultScaffolderFormDecoratorsApi.create({ + decorators: formDecorators, + }), + }), + }); + }, +}); diff --git a/plugins/scaffolder/src/alpha/api/index.ts b/plugins/scaffolder/src/alpha/api/index.ts index 07d4b65a3b..b6161dd252 100644 --- a/plugins/scaffolder/src/alpha/api/index.ts +++ b/plugins/scaffolder/src/alpha/api/index.ts @@ -16,4 +16,4 @@ export { formDecoratorsApiRef } from './ref'; export type { ScaffolderFormDecoratorsApi } from './types'; -export { DefaultScaffolderFormDecoratorsApi } from './FormDecoratorsApi'; +export * from './FormDecoratorsApi'; diff --git a/plugins/scaffolder/src/alpha/plugin.tsx b/plugins/scaffolder/src/alpha/plugin.tsx index 44ec1f5d4c..e281f51b0f 100644 --- a/plugins/scaffolder/src/alpha/plugin.tsx +++ b/plugins/scaffolder/src/alpha/plugin.tsx @@ -33,6 +33,7 @@ import { scaffolderApi, } from './extensions'; import { formFieldsApi } from '@backstage/plugin-scaffolder-react/alpha'; +import { formDecoratorsApi } from './api'; /** @alpha */ export default createFrontendPlugin({ @@ -53,6 +54,7 @@ export default createFrontendPlugin({ scaffolderApi, scaffolderPage, scaffolderNavItem, + formDecoratorsApi, formFieldsApi, repoUrlPickerFormField, ],