diff --git a/plugins/scaffolder-react/report-alpha.api.md b/plugins/scaffolder-react/report-alpha.api.md
index 2cc8416b3c..4f9f86d1ac 100644
--- a/plugins/scaffolder-react/report-alpha.api.md
+++ b/plugins/scaffolder-react/report-alpha.api.md
@@ -5,13 +5,17 @@
```ts
///
+import { AnyApiFactory } from '@backstage/frontend-plugin-api';
import { AnyApiRef } from '@backstage/core-plugin-api';
import { ApiHolder } from '@backstage/core-plugin-api';
+import { ApiRef } from '@backstage/frontend-plugin-api';
import { ComponentType } from 'react';
import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api';
import { CustomFieldValidator } from '@backstage/plugin-scaffolder-react';
import { Dispatch } from 'react';
import { ExtensionBlueprint } from '@backstage/frontend-plugin-api';
+import { ExtensionDefinition } from '@backstage/frontend-plugin-api';
+import { ExtensionInput } from '@backstage/frontend-plugin-api';
import { FieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react';
import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react';
import { FieldSchema } from '@backstage/plugin-scaffolder-react';
@@ -171,6 +175,34 @@ export type FormFieldExtensionData<
schema?: FieldSchema, z.output>;
};
+// @alpha (undocumented)
+export const formFieldsApi: ExtensionDefinition<{
+ config: {};
+ configInput: {};
+ output: ConfigurableExtensionDataRef;
+ inputs: {
+ formFields: ExtensionInput<
+ ConfigurableExtensionDataRef<
+ () => Promise,
+ 'scaffolder.form-field-loader',
+ {}
+ >,
+ {
+ singleton: false;
+ optional: false;
+ }
+ >;
+ };
+ kind: 'api';
+ name: 'form-fields';
+ params: {
+ factory: AnyApiFactory;
+ };
+}>;
+
+// @alpha (undocumented)
+export const formFieldsApiRef: ApiRef;
+
// @alpha (undocumented)
export type FormValidation = {
[name: string]: FieldValidation | FormValidation;
@@ -245,6 +277,12 @@ export type ScaffolderFormDecoratorContext<
) => void;
};
+// @alpha (undocumented)
+export interface ScaffolderFormFieldsApi {
+ // (undocumented)
+ getFormFields(): Promise;
+}
+
// @alpha (undocumented)
export function ScaffolderPageContextMenu(
props: ScaffolderPageContextMenuProps,
diff --git a/plugins/scaffolder-react/report.api.md b/plugins/scaffolder-react/report.api.md
index 8a6b4739a4..12626580bf 100644
--- a/plugins/scaffolder-react/report.api.md
+++ b/plugins/scaffolder-react/report.api.md
@@ -550,7 +550,7 @@ export const useCustomFieldExtensions: <
TComponentDataType = FieldExtensionOptions,
>(
outlet: React.ReactNode,
-) => TComponentDataType[];
+) => (TComponentDataType | FieldExtensionOptions)[];
// @public
export const useCustomLayouts: >(
diff --git a/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.ts b/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.ts
index e100e147ab..44b0a568e3 100644
--- a/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.ts
+++ b/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.ts
@@ -50,5 +50,17 @@ export const useCustomFieldExtensions = <
}),
);
- return [...blueprintFields, ...outletFields];
+ // This should really be a different type moving foward, but we do this to keep type compatibility.
+ // should probably also move the defaults into the API eventually too, but that will come with the move
+ // to the new frontend system.
+ const blueprintsToLegacy: FieldExtensionOptions[] = blueprintFields?.map(
+ field => ({
+ component: field.component,
+ name: field.name,
+ validation: field.validation,
+ schema: field.schema?.schema,
+ }),
+ );
+
+ return [...blueprintsToLegacy, ...outletFields];
};
diff --git a/plugins/scaffolder-react/src/next/api/FormFieldsApi.ts b/plugins/scaffolder-react/src/next/api/FormFieldsApi.ts
index e921856369..7712b91a18 100644
--- a/plugins/scaffolder-react/src/next/api/FormFieldsApi.ts
+++ b/plugins/scaffolder-react/src/next/api/FormFieldsApi.ts
@@ -40,6 +40,7 @@ class DefaultScaffolderFormFieldsApi implements ScaffolderFormFieldsApi {
}
}
+/** @alpha */
export const formFieldsApi = ApiBlueprint.makeWithOverrides({
name: 'form-fields',
inputs: {
diff --git a/plugins/scaffolder/report-alpha.api.md b/plugins/scaffolder/report-alpha.api.md
index 15ec32fa49..5f9472486f 100644
--- a/plugins/scaffolder/report-alpha.api.md
+++ b/plugins/scaffolder/report-alpha.api.md
@@ -14,7 +14,6 @@ import { ExtensionInput } from '@backstage/frontend-plugin-api';
import { ExternalRouteRef } from '@backstage/frontend-plugin-api';
import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react';
import { FormField } from '@internal/scaffolder';
-import { FormFieldExtensionData } from '@backstage/plugin-scaffolder-react/alpha';
import type { FormProps as FormProps_2 } from '@rjsf/core';
import { FormProps as FormProps_3 } from '@backstage/plugin-scaffolder-react';
import { FrontendPlugin } from '@backstage/frontend-plugin-api';
@@ -52,6 +51,33 @@ const _default: FrontendPlugin<
}>;
},
{
+ 'api:scaffolder/form-fields': ExtensionDefinition<{
+ config: {};
+ configInput: {};
+ output: ConfigurableExtensionDataRef<
+ AnyApiFactory,
+ 'core.api.factory',
+ {}
+ >;
+ inputs: {
+ formFields: ExtensionInput<
+ ConfigurableExtensionDataRef<
+ () => Promise,
+ 'scaffolder.form-field-loader',
+ {}
+ >,
+ {
+ singleton: false;
+ optional: false;
+ }
+ >;
+ };
+ kind: 'api';
+ name: 'form-fields';
+ params: {
+ factory: AnyApiFactory;
+ };
+ }>;
'page:scaffolder': ExtensionDefinition<{
kind: 'page';
name: undefined;
@@ -129,33 +155,6 @@ const _default: FrontendPlugin<
factory: AnyApiFactory;
};
}>;
- 'api:scaffolder/form-fields': ExtensionDefinition<{
- config: {};
- configInput: {};
- output: ConfigurableExtensionDataRef<
- AnyApiFactory,
- 'core.api.factory',
- {}
- >;
- inputs: {
- formFields: ExtensionInput<
- ConfigurableExtensionDataRef<
- () => Promise,
- 'scaffolder.form-field-loader',
- {}
- >,
- {
- singleton: false;
- optional: false;
- }
- >;
- };
- kind: 'api';
- name: 'form-fields';
- params: {
- factory: AnyApiFactory;
- };
- }>;
}
>;
export default _default;
@@ -175,9 +174,6 @@ export class DefaultScaffolderFormDecoratorsApi
// @alpha (undocumented)
export const formDecoratorsApiRef: ApiRef;
-// @alpha (undocumented)
-export const formFieldsApiRef: ApiRef;
-
// @alpha @deprecated
export type FormProps = Pick<
FormProps_2,
@@ -197,12 +193,6 @@ export interface ScaffolderFormDecoratorsApi {
getFormDecorators(): Promise;
}
-// @alpha (undocumented)
-export interface ScaffolderFormFieldsApi {
- // (undocumented)
- getFormFields(): Promise;
-}
-
// @public (undocumented)
export type ScaffolderTemplateEditorClassKey =
| 'root'