Move formFieldsApiRef and ScaffolderFormFieldsApi to scaffolder-react

The formFieldsApiRef and ScaffolderFormFieldsApi type are now defined and
exported from @backstage/plugin-scaffolder-react/alpha, and re-exported
from @backstage/plugin-scaffolder/alpha for backwards compatibility.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2026-02-26 18:06:57 +01:00
parent c472a693b6
commit 004b5c1208
8 changed files with 47 additions and 23 deletions
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-react': minor
---
Added `formFieldsApiRef` and `ScaffolderFormFieldsApi` as alpha exports.
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
The `formFieldsApiRef` and `ScaffolderFormFieldsApi` alpha exports are now re-exported from `@backstage/plugin-scaffolder-react`.
@@ -5,6 +5,7 @@
```ts
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';
@@ -198,6 +199,9 @@ export type FormFieldExtensionData<
schema?: FieldSchema<z.output<TReturnValue>, z.output<TUiOptions>>;
};
// @alpha (undocumented)
export const formFieldsApiRef: ApiRef<ScaffolderFormFieldsApi>;
// @alpha (undocumented)
export type FormValidation = {
[name: string]: FieldValidation | FormValidation;
@@ -272,6 +276,12 @@ export type ScaffolderFormDecoratorContext<
) => void;
};
// @alpha (undocumented)
export interface ScaffolderFormFieldsApi {
// (undocumented)
loadFormFields(): Promise<FormField[]>;
}
// @alpha (undocumented)
export function ScaffolderPageContextMenu(
props: ScaffolderPageContextMenuProps,
@@ -14,4 +14,12 @@
* limitations under the License.
*/
export { type FormField } from './types';
import { createApiRef } from '@backstage/frontend-plugin-api';
import { ScaffolderFormFieldsApi } from './types';
export { type FormField, type ScaffolderFormFieldsApi } from './types';
/** @alpha */
export const formFieldsApiRef = createApiRef<ScaffolderFormFieldsApi>({
id: 'plugin.scaffolder.form-fields-loader',
});
@@ -18,3 +18,8 @@
export interface FormField {
readonly $$type: '@backstage/scaffolder/FormField';
}
/** @alpha */
export interface ScaffolderFormFieldsApi {
loadFormFields(): Promise<FormField[]>;
}
+4 -7
View File
@@ -17,6 +17,7 @@ import { ExternalRouteRef } from '@backstage/core-plugin-api';
import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react';
import { FilterPredicate } from '@backstage/filter-predicates';
import { FormField } from '@backstage/plugin-scaffolder-react/alpha';
import { formFieldsApiRef } 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 { IconComponent } from '@backstage/frontend-plugin-api';
@@ -31,6 +32,7 @@ import { ReviewStepProps } from '@backstage/plugin-scaffolder-react';
import { RouteRef } from '@backstage/core-plugin-api';
import { RouteRef as RouteRef_2 } from '@backstage/frontend-plugin-api';
import { ScaffolderFormDecorator } from '@backstage/plugin-scaffolder-react/alpha';
import { ScaffolderFormFieldsApi } from '@backstage/plugin-scaffolder-react/alpha';
import { SubRouteRef } from '@backstage/core-plugin-api';
import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';
import { TemplateGroupFilter } from '@backstage/plugin-scaffolder-react';
@@ -480,8 +482,7 @@ export const formDecoratorsApi: OverridableExtensionDefinition<{
// @alpha (undocumented)
export const formDecoratorsApiRef: ApiRef<ScaffolderFormDecoratorsApi>;
// @alpha (undocumented)
export const formFieldsApiRef: ApiRef<ScaffolderFormFieldsApi>;
export { formFieldsApiRef };
// @alpha @deprecated
export type FormProps = Pick<
@@ -502,11 +503,7 @@ export interface ScaffolderFormDecoratorsApi {
getFormDecorators(): Promise<ScaffolderFormDecorator[]>;
}
// @alpha (undocumented)
export interface ScaffolderFormFieldsApi {
// (undocumented)
loadFormFields(): Promise<FormField[]>;
}
export { ScaffolderFormFieldsApi };
// @public (undocumented)
export type ScaffolderTemplateEditorClassKey =
+4 -2
View File
@@ -25,11 +25,13 @@ import {
} from '@backstage/frontend-plugin-api';
import { rootRouteRef } from '../routes';
import CreateComponentIcon from '@material-ui/icons/AddCircleOutline';
import { FormFieldBlueprint } from '@backstage/plugin-scaffolder-react/alpha';
import {
FormFieldBlueprint,
formFieldsApiRef,
} from '@backstage/plugin-scaffolder-react/alpha';
import { scmIntegrationsApiRef } from '@backstage/integration-react';
import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';
import { ScaffolderClient } from '../api';
import { formFieldsApiRef } from './formFieldsApi';
export const scaffolderPage = PageBlueprint.makeWithOverrides({
inputs: {
+5 -13
View File
@@ -16,25 +16,14 @@
import {
ApiBlueprint,
createApiRef,
createExtensionInput,
} from '@backstage/frontend-plugin-api';
import {
FormFieldBlueprint,
type FormField,
formFieldsApiRef,
} from '@backstage/plugin-scaffolder-react/alpha';
import { OpaqueFormField } from '@internal/scaffolder';
/** @alpha */
export interface ScaffolderFormFieldsApi {
loadFormFields(): Promise<FormField[]>;
}
/** @alpha */
const formFieldsApiRef = createApiRef<ScaffolderFormFieldsApi>({
id: 'plugin.scaffolder.form-fields-loader',
});
export const formFieldsApi = ApiBlueprint.makeWithOverrides({
name: 'form-fields',
inputs: {
@@ -69,4 +58,7 @@ export const formFieldsApi = ApiBlueprint.makeWithOverrides({
},
});
export { formFieldsApiRef };
export {
formFieldsApiRef,
type ScaffolderFormFieldsApi,
} from '@backstage/plugin-scaffolder-react/alpha';