scaffolder-react: refactor for cleaner separation between stable and next

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2023-01-29 14:35:34 +01:00
parent ea11642d89
commit acd4f9b20b
12 changed files with 63 additions and 32 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-react': patch
---
The `FormProps` type is now correctly only available as an `/alpha` export.
+1 -1
View File
@@ -121,7 +121,7 @@ export type FieldExtensionOptions<
schema?: CustomFieldExtensionSchema;
};
// @public
// @alpha
export type FormProps = Pick<
FormProps_2,
'transformErrors' | 'noHtml5Validate'
@@ -14,8 +14,8 @@
* limitations under the License.
*/
import { useElementFilter } from '@backstage/core-plugin-api';
import { LAYOUTS_KEY, LAYOUTS_WRAPPER_KEY } from '../next/layouts/keys';
import { type LayoutOptions } from '../next/types';
import { LAYOUTS_KEY, LAYOUTS_WRAPPER_KEY } from '../layouts/keys';
import { LayoutOptions } from '../layouts';
/**
* Hook that returns all custom field extensions from the current outlet.
+1 -1
View File
@@ -19,6 +19,6 @@ export * from './types';
export * from './secrets';
export * from './api';
export * from './hooks';
export * from './layouts';
export * from './next';
export type { FormProps } from './next';
@@ -1,6 +1,3 @@
import { LayoutOptions } from '../types';
import { LAYOUTS_KEY, LAYOUTS_WRAPPER_KEY } from './keys';
/*
* Copyright 2023 The Backstage Authors
*
@@ -16,7 +13,29 @@ import { LAYOUTS_KEY, LAYOUTS_WRAPPER_KEY } from './keys';
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { LAYOUTS_KEY, LAYOUTS_WRAPPER_KEY } from './keys';
import { attachComponentData, Extension } from '@backstage/core-plugin-api';
import type { FormProps as SchemaFormProps } from '@rjsf/core-v5';
/**
* The field template from `@rjsf/core` which is a react component that gets passed `@rjsf/core` field related props.
*
* @public
*/
export type LayoutTemplate<T = any> = NonNullable<
SchemaFormProps<T>['uiSchema']
>['ui:ObjectFieldTemplate'];
/**
* The type of layouts that is passed to the TemplateForms
*
* @public
*/
export interface LayoutOptions<P = any> {
name: string;
component: LayoutTemplate<P>;
}
/**
* A type used to wrap up the FieldExtension to embed the ReturnValue and the InputProps
@@ -0,0 +1,25 @@
/*
* Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export {
ScaffolderLayouts,
createScaffolderLayout,
} from './createScaffolderLayout';
export type {
LayoutComponent,
LayoutTemplate,
LayoutOptions,
} from './createScaffolderLayout';
@@ -21,7 +21,7 @@ import { act, fireEvent } from '@testing-library/react';
import type { RJSFValidationError } from '@rjsf/utils';
import { JsonValue } from '@backstage/types';
import { NextFieldExtensionComponentProps } from '../../extensions';
import { LayoutTemplate } from '../../types';
import { LayoutTemplate } from '../../../layouts';
describe('Stepper', () => {
it('should render the step titles for each step of the manifest', async () => {
@@ -32,7 +32,8 @@ import { ReviewState, type ReviewStateProps } from '../ReviewState';
import { useTemplateSchema } from '../../hooks/useTemplateSchema';
import validator from '@rjsf/validator-ajv8';
import { useFormDataFromQuery } from '../../hooks';
import type { FormProps, LayoutOptions } from '../../types';
import { FormProps } from '../../types';
import { LayoutOptions } from '../../../layouts';
import { useTransformSchemaToProps } from '../../hooks/useTransformSchemaToProps';
const useStyles = makeStyles(theme => ({
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { type ParsedTemplateSchema } from './useTemplateSchema';
import { type LayoutOptions } from '../types';
import { type LayoutOptions } from '../../layouts';
interface Options {
layouts?: LayoutOptions[];
@@ -15,8 +15,6 @@
*/
export * from './components';
export * from './extensions';
export * from './layouts';
export * from './types';
export * from './lib';
export * from './hooks';
export * from './layouts';
+3 -20
View File
@@ -13,32 +13,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import type { FormProps as SchemaFormProps } from '@rjsf/core-v5';
/**
* Any `@rjsf/core` form properties that are publicly exposed to the `NextScaffolderpage`
*
* @public
* @alpha
*/
export type FormProps = Pick<
SchemaFormProps,
'transformErrors' | 'noHtml5Validate'
>;
/**
* The field template from `@rjsf/core` which is a react component that gets passed `@rjsf/core` field related props.
*
* @public
*/
export type LayoutTemplate<T = any> = NonNullable<
SchemaFormProps<T>['uiSchema']
>['ui:ObjectFieldTemplate'];
/**
* The type of layouts that is passed to the TemplateForms
*
* @public
*/
export interface LayoutOptions<P = any> {
name: string;
component: LayoutTemplate<P>;
}