diff --git a/plugins/scaffolder-react/api-report.md b/plugins/scaffolder-react/api-report.md
index 85ba2c937a..cc6a725012 100644
--- a/plugins/scaffolder-react/api-report.md
+++ b/plugins/scaffolder-react/api-report.md
@@ -116,12 +116,25 @@ export type FieldExtensionOptions<
schema?: CustomFieldExtensionSchema;
};
-// @alpha
+// @public
export type FormProps = Pick<
FormProps_2,
'transformErrors' | 'noHtml5Validate'
>;
+// @public
+export interface LayoutOptions
{
+ // (undocumented)
+ component: LayoutTemplate
;
+ // (undocumented)
+ name: string;
+}
+
+// @public
+export type LayoutTemplate = NonNullable<
+ FormProps_2['uiSchema']
+>['ui:ObjectFieldTemplate'];
+
// @public
export type ListActionsResponse = Array;
@@ -346,21 +359,30 @@ export const SecretsContextProvider: ({
}: PropsWithChildren<{}>) => JSX.Element;
// @alpha
+<<<<<<< HEAD
export const Stepper: (stepperProps: StepperProps) => JSX.Element;
+=======
+export const Stepper: ({ layouts, ...props }: StepperProps) => JSX.Element;
+>>>>>>> be504a73cc (run api-report)
// @alpha
export type StepperProps = {
manifest: TemplateParameterSchema;
extensions: NextFieldExtensionOptions[];
templateName?: string;
- FormProps?: FormProps;
initialState?: Record;
+<<<<<<< HEAD
onCreate: (values: Record) => Promise;
components?: {
ReviewStateComponent?: (props: ReviewStateProps) => JSX.Element;
createButtonText?: ReactNode;
reviewButtonText?: ReactNode;
};
+=======
+ onComplete: (values: Record) => Promise;
+ FormProps?: FormProps;
+ layouts?: LayoutOptions[];
+>>>>>>> be504a73cc (run api-report)
};
// @alpha
@@ -422,6 +444,11 @@ export const useCustomFieldExtensions: <
outlet: React.ReactNode,
) => TComponentDataType[];
+// @public
+export const useCustomLayouts: >(
+ outlet: React.ReactNode,
+) => TComponentDataType[];
+
// @alpha
export const useFormDataFromQuery: (
initialState?: Record,
diff --git a/plugins/scaffolder-react/src/hooks/useCustomLayouts.ts b/plugins/scaffolder-react/src/hooks/useCustomLayouts.ts
index f1511cebdb..afcc45cd48 100644
--- a/plugins/scaffolder-react/src/hooks/useCustomLayouts.ts
+++ b/plugins/scaffolder-react/src/hooks/useCustomLayouts.ts
@@ -15,13 +15,13 @@
*/
import { useElementFilter } from '@backstage/core-plugin-api';
import { LAYOUTS_KEY, LAYOUTS_WRAPPER_KEY } from '../next/layouts/keys';
-import { type NextLayoutOptions } from '../next/types';
+import { type LayoutOptions } from '../next/types';
/**
* Hook that returns all custom field extensions from the current outlet.
* @public
*/
-export const useCustomLayouts = (
+export const useCustomLayouts = (
outlet: React.ReactNode,
) => {
return useElementFilter(outlet, elements =>
diff --git a/plugins/scaffolder-react/src/next/components/Stepper/Stepper.tsx b/plugins/scaffolder-react/src/next/components/Stepper/Stepper.tsx
index 5b7c92ea62..362545e8fa 100644
--- a/plugins/scaffolder-react/src/next/components/Stepper/Stepper.tsx
+++ b/plugins/scaffolder-react/src/next/components/Stepper/Stepper.tsx
@@ -28,11 +28,11 @@ import React, { useCallback, useMemo, useState, type ReactNode } from 'react';
import { NextFieldExtensionOptions } from '../../extensions';
import { TemplateParameterSchema } from '../../../types';
import { createAsyncValidators } from './createAsyncValidators';
-import type { FormProps, LayoutOptions } from '../../types';
import { ReviewState, type ReviewStateProps } from '../ReviewState';
import { useTemplateSchema } from '../../hooks/useTemplateSchema';
import validator from '@rjsf/validator-ajv6';
import { useFormDataFromQuery } from '../../hooks';
+import type { FormProps, LayoutOptions } from '../../types';
import { useTransformSchemaToProps } from '../../hooks/useTransformSchemaToProps';
const useStyles = makeStyles(theme => ({
diff --git a/plugins/scaffolder-react/src/next/hooks/useTransformSchemaToProps.ts b/plugins/scaffolder-react/src/next/hooks/useTransformSchemaToProps.ts
index 8ba48a8803..b7810fb9ca 100644
--- a/plugins/scaffolder-react/src/next/hooks/useTransformSchemaToProps.ts
+++ b/plugins/scaffolder-react/src/next/hooks/useTransformSchemaToProps.ts
@@ -14,11 +14,11 @@
* limitations under the License.
*/
import { type ParsedTemplateSchema } from './useTemplateSchema';
-import { type NextLayoutOptions } from '../types';
+import { type LayoutOptions } from '../types';
export const useTransformSchemaToProps = (
step: ParsedTemplateSchema,
- layouts: NextLayoutOptions[] = [],
+ layouts: LayoutOptions[] = [],
): ParsedTemplateSchema => {
const objectFieldTemplate = step?.uiSchema['ui:ObjectFieldTemplate'] as
| string
diff --git a/plugins/scaffolder-react/src/next/index.ts b/plugins/scaffolder-react/src/next/index.ts
index ea009ea556..a75aa812d3 100644
--- a/plugins/scaffolder-react/src/next/index.ts
+++ b/plugins/scaffolder-react/src/next/index.ts
@@ -15,6 +15,7 @@
*/
export * from './components';
export * from './extensions';
-export type { FormProps } from './types';
+export * from './types';
export * from './lib';
export * from './hooks';
+export * from './layouts';
diff --git a/plugins/scaffolder-react/src/next/layouts/index.tsx b/plugins/scaffolder-react/src/next/layouts/index.tsx
index c0db1256f4..560748af59 100644
--- a/plugins/scaffolder-react/src/next/layouts/index.tsx
+++ b/plugins/scaffolder-react/src/next/layouts/index.tsx
@@ -1,4 +1,4 @@
-import { NextLayoutOptions } from '../types';
+import { LayoutOptions } from '../types';
import { LAYOUTS_KEY, LAYOUTS_WRAPPER_KEY } from './keys';
/*
@@ -26,7 +26,7 @@ export type LayoutComponent<_TInputProps> = () => null;
* @public
*/
export function createScaffolderLayout(
- options: NextLayoutOptions,
+ options: LayoutOptions,
): Extension> {
return {
expose() {
diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md
index c1eb86d186..a67ce10dec 100644
--- a/plugins/scaffolder/api-report.md
+++ b/plugins/scaffolder/api-report.md
@@ -22,7 +22,8 @@ import { FieldExtensionComponentProps as FieldExtensionComponentProps_2 } from '
import { FieldExtensionOptions as FieldExtensionOptions_2 } from '@backstage/plugin-scaffolder-react';
import { FieldValidation } from '@rjsf/core';
import type { FormProps as FormProps_2 } from '@rjsf/core';
-import type { FormProps as FormProps_3 } from '@rjsf/core-v5';
+import { FormProps as FormProps_3 } from '@backstage/plugin-scaffolder-react';
+import type { FormProps as FormProps_4 } from '@rjsf/core-v5';
import { IdentityApi } from '@backstage/core-plugin-api';
import { JsonObject } from '@backstage/types';
import { ListActionsResponse as ListActionsResponse_2 } from '@backstage/plugin-scaffolder-react';
@@ -157,7 +158,7 @@ export interface FieldSchema {
// @alpha @deprecated
export type FormProps = Pick<
- FormProps_3,
+ FormProps_4,
'transformErrors' | 'noHtml5Validate'
>;
@@ -195,56 +196,6 @@ export function makeFieldSchemaFromZod<
: never
>;
-<<<<<<< HEAD
-=======
-// @alpha
-export type NextCustomFieldValidator = (
- data: TFieldReturnValue,
- field: FieldValidation_2,
- context: {
- apiHolder: ApiHolder;
- formData: JsonObject;
- },
-) => void | Promise;
-
-// @alpha
-export interface NextFieldExtensionComponentProps<
- TFieldReturnValue,
- TUiOptions = {},
-> extends PropsWithChildren> {
- // (undocumented)
- uiSchema?: UiSchema & {
- 'ui:options'?: TUiOptions & UIOptionsType;
- };
-}
-
-// @alpha
-export type NextFieldExtensionOptions<
- TFieldReturnValue = unknown,
- TInputProps = unknown,
-> = {
- name: string;
- component: (
- props: NextFieldExtensionComponentProps,
- ) => JSX.Element | null;
- validation?: NextCustomFieldValidator;
- schema?: CustomFieldExtensionSchema;
-};
-
-// @alpha
-export interface NextLayoutOptions {
- // (undocumented)
- component: NextLayoutTemplate
;
- // (undocumented)
- name: string;
-}
-
-// @alpha
-export type NextLayoutTemplate = NonNullable<
- FormProps_3['uiSchema']
->['ui:ObjectFieldTemplate'];
-
->>>>>>> a3e361fbb8 (run api-report)
// @alpha (undocumented)
export const nextRouteRef: RouteRef;
@@ -257,7 +208,7 @@ export type NextRouterProps = {
TaskPageComponent?: React_2.ComponentType<{}>;
};
groups?: TemplateGroupFilter[];
- FormProps?: FormProps;
+ FormProps?: FormProps_3;
};
// @alpha
@@ -576,18 +527,6 @@ export type TemplateParameterSchema = TemplateParameterSchema_2;
// @public
export const TemplateTypePicker: () => JSX.Element | null;
-<<<<<<< HEAD
// @public @deprecated (undocumented)
export const useTemplateSecrets: () => ScaffolderUseTemplateSecrets_2;
-=======
-// @public
-export const useTemplateSecrets: () => ScaffolderUseTemplateSecrets;
-<<<<<<< HEAD
-
-// Warnings were encountered during analysis:
-//
-// src/next/types.d.ts:23:5 - (ae-forgotten-export) The symbol "NextLayoutOptions" needs to be exported by the entry point index.d.ts
->>>>>>> 55041019c8 (export NextLayoutOptions)
-=======
->>>>>>> a3e361fbb8 (run api-report)
```
diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx
index d11ada45b5..56fbbe7132 100644
--- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx
+++ b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx
@@ -25,15 +25,10 @@ import {
import {
scaffolderApiRef,
useTemplateSecrets,
- type NextFieldExtensionOptions,
- Workflow
- type NextLayoutOptions,
+ Workflow,
+ type LayoutOptions
} from '@backstage/plugin-scaffolder-react';
-import useAsync from 'react-use/lib/useAsync';
-import { makeStyles } from '@material-ui/core';
-import { BackstageTheme } from '@backstage/theme';
import {
- Stepper,
NextFieldExtensionOptions,
} from '@backstage/plugin-scaffolder-react';
import { JsonValue } from '@backstage/types';
@@ -41,7 +36,6 @@ import { type FormProps } from '../types';
import { nextRouteRef } from '../routes';
import { scaffolderTaskRouteRef, selectedTemplateRouteRef } from '../../routes';
import { Header, Page } from '@backstage/core-components';
-import type { LayoutOptions } from '../../layouts/types';
export type TemplateWizardPageProps = {
customFieldExtensions: NextFieldExtensionOptions[];
@@ -92,6 +86,7 @@ export const TemplateWizardPage = (props: TemplateWizardPageProps) => {
onError={onError}
extensions={props.customFieldExtensions}
FormProps={props.FormProps}
+ layouts={props.layouts}
/>