fix api-reports

Signed-off-by: Paul Cowan <paul.cowan@cutting.scot>
This commit is contained in:
Paul Cowan
2022-12-12 10:02:24 +00:00
parent b4dc27c42c
commit 809c4c0686
11 changed files with 74 additions and 33 deletions
@@ -43,7 +43,7 @@ export function SecurityTab(): JSX.Element | null {
description={`
## This is markdown
- overriding the template description
`}
`}
onComplete={onComplete}
onError={onError}
namespace="default"
@@ -20,16 +20,19 @@ import {
FIELD_EXTENSION_WRAPPER_KEY,
} from '../extensions/keys';
type Extension = Omit<FieldExtensionOptions, 'validation'> & { validation?: unknown }
/**
* Hook that returns all custom field extensions from the current outlet.
* @public
*/
export const useCustomFieldExtensions = <
TComponentDataType = FieldExtensionOptions,
TComponentDataType = FieldExtensionOptions
>(
outlet: React.ReactNode,
defaultScaffolderFieldExtensions: Extension[] = []
) => {
return useElementFilter(outlet, elements =>
const customFieldExtensions = useElementFilter(outlet, elements =>
elements
.selectByComponentData({
key: FIELD_EXTENSION_WRAPPER_KEY,
@@ -37,5 +40,15 @@ export const useCustomFieldExtensions = <
.findComponentData<TComponentDataType>({
key: FIELD_EXTENSION_KEY,
}),
);
) as FieldExtensionOptions[];
return [
...customFieldExtensions,
...defaultScaffolderFieldExtensions.filter(
({ name }) =>
!customFieldExtensions.some(
customFieldExtension => customFieldExtension.name === name,
),
),
];
};
+33 -5
View File
@@ -31,7 +31,11 @@ import { Observable } from '@backstage/types';
import { PathParams } from '@backstage/core-plugin-api';
import { PropsWithChildren } from 'react';
import { default as React_2 } from 'react';
<<<<<<< HEAD
import { ReactNode } from 'react';
=======
import type { ReactNode } from 'react';
>>>>>>> 1a12ad8e8d (fix api-reports)
import { RouteRef } from '@backstage/core-plugin-api';
import { ScaffolderApi as ScaffolderApi_2 } from '@backstage/plugin-scaffolder-react';
import { ScaffolderDryRunOptions as ScaffolderDryRunOptions_2 } from '@backstage/plugin-scaffolder-react';
@@ -80,8 +84,29 @@ export type CustomFieldValidator<TFieldReturnValue> = (
},
) => void | Promise<void>;
// @alpha
export function EmbeddedScaffolderWorkflow({
namespace,
templateName,
customExtensionsElement,
frontPage,
finishPage,
onComplete,
onError,
title,
description,
ReviewStateWrapper,
}: EmbeddedScaffolderWorkflowProps): JSX.Element;
// @alpha (undocumented)
export const EmbeddableWorkflow: (props: WorkflowProps) => JSX.Element;
export type EmbeddedScaffolderWorkflowProps = Omit<
WorkflowProps,
'customFieldExtensions' | 'onComplete'
> & {
customExtensionsElement?: React_2.ReactNode;
frontPage: ReactNode;
finishPage: ReactNode;
} & Partial<Pick<WorkflowProps, 'onComplete'>>;
// @public
export const EntityNamePickerFieldExtension: FieldExtensionComponent<
@@ -128,9 +153,9 @@ export type EntityPickerUiOptions =
export const EntityTagsPickerFieldExtension: FieldExtensionComponent_2<
string[],
{
showCounts?: boolean | undefined;
kinds?: string[] | undefined;
helperText?: string | undefined;
kinds?: string[] | undefined;
showCounts?: boolean | undefined;
}
>;
@@ -138,9 +163,9 @@ export const EntityTagsPickerFieldExtension: FieldExtensionComponent_2<
export const EntityTagsPickerFieldSchema: FieldSchema<
string[],
{
showCounts?: boolean | undefined;
kinds?: string[] | undefined;
helperText?: string | undefined;
kinds?: string[] | undefined;
showCounts?: boolean | undefined;
}
>;
@@ -564,6 +589,7 @@ export type TemplateParameterSchema = TemplateParameterSchema_2;
// @public
export const TemplateTypePicker: () => JSX.Element | null;
<<<<<<< HEAD
<<<<<<< HEAD
// @public @deprecated (undocumented)
export const useTemplateSecrets: () => ScaffolderUseTemplateSecrets_2;
@@ -573,6 +599,8 @@ export const useGetCustomFields: (
element: React_2.ReactNode,
) => NextFieldExtensionOptions<unknown, unknown>[];
=======
>>>>>>> 1a12ad8e8d (fix api-reports)
// @public
export const useTemplateSecrets: () => ScaffolderUseTemplateSecrets;
+1 -10
View File
@@ -93,16 +93,7 @@ export const Router = (props: RouterProps) => {
const outlet = useOutlet();
const TaskPageElement = TaskPageComponent ?? TaskPage;
const customFieldExtensions = useCustomFieldExtensions(outlet);
const fieldExtensions = [
...customFieldExtensions,
...DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS.filter(
({ name }) =>
!customFieldExtensions.some(
customFieldExtension => customFieldExtension.name === name,
),
),
] as FieldExtensionOptions[];
const fieldExtensions = useCustomFieldExtensions(outlet, DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS);
// todo(blam): this should also be moved to a hook in -react
const customLayouts = useElementFilter(outlet, elements =>
+1 -2
View File
@@ -46,9 +46,8 @@ export * from './deprecated';
/** next exports */
export { NextScaffolderPage } from './plugin';
export {
EmbeddableWorkflow,
useGetCustomFields,
EmbeddedScaffolderWorkflow,
type EmbeddedScaffolderWorkflowProps,
type WorkflowProps,
type ReviewStateProps,
type ParsedTemplateSchema,
@@ -17,12 +17,15 @@
import React, { useState, useCallback } from 'react';
import type { ReactNode } from 'react';
import type { JsonValue } from '@backstage/types';
import { EmbeddableWorkflow, WorkflowProps } from '../Workflow/Workflow';
import { FormProps } from '@backstage/plugin-scaffolder-react';
import { useGetCustomFields } from '../Router';
import { EmbeddableWorkflow, type WorkflowProps } from '../Workflow/Workflow';
import { FormProps, useCustomFieldExtensions } from '@backstage/plugin-scaffolder-react';
import { Box, Button } from '@material-ui/core';
import { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default';
type EmbeddedWorkflowProps = Omit<
/**
* @alpha
*/
export type EmbeddedScaffolderWorkflowProps = Omit<
WorkflowProps,
'customFieldExtensions' | 'onComplete'
> & {
@@ -41,6 +44,10 @@ type DisplayComponents = Record<Display, JSX.Element>;
type OnCompleteArgs = Parameters<WorkflowProps['onComplete']>[0];
/**
* Allows the EmbeddableWorkflow to be called from outside of a normal scaffolder workflow
* @alpha
*/
export function EmbeddedScaffolderWorkflow({
namespace,
templateName,
@@ -52,9 +59,9 @@ export function EmbeddedScaffolderWorkflow({
title,
description,
ReviewStateWrapper,
}: EmbeddedWorkflowProps): JSX.Element {
}: EmbeddedScaffolderWorkflowProps): JSX.Element {
const [display, setDisplay] = useState<Display>('front');
const fieldExtensions = useGetCustomFields(customExtensionsElement);
const fieldExtensions = useCustomFieldExtensions(customExtensionsElement, DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS);
const startTemplate = useCallback(() => setDisplay('workflow'), []);
@@ -13,4 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export { EmbeddedScaffolderWorkflow } from './EmbeddedScaffolderWorkflow';
export {
EmbeddedScaffolderWorkflow,
type EmbeddedScaffolderWorkflowProps,
} from './EmbeddedScaffolderWorkflow';
+1 -1
View File
@@ -13,5 +13,5 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export { Router, useGetCustomFields } from './Router';
export { Router } from './Router';
export type { NextRouterProps } from './Router';
@@ -121,9 +121,6 @@ export const Workflow = ({
);
};
/**
* @alpha
*/
export const EmbeddableWorkflow = (props: WorkflowProps) => (
<SecretsContextProvider>
<Workflow {...props} />
@@ -13,4 +13,4 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export { type WorkflowProps, Workflow, EmbeddableWorkflow } from './Workflow';
export { EmbeddableWorkflow, type WorkflowProps } from './Workflow';
+3
View File
@@ -19,3 +19,6 @@ export * from './TemplateWizardPage';
export * from './types';
export * from './routes';
export * from './Workflow';
export * from './EmbeddedScaffolderWorkflow';
export type { WorkflowProps } from './Workflow';