Make it possible to define control buttons text (Back, Create, Review) per template

Signed-off-by: Bogdan Nechyporenko <bnechyporenko@bol.com>
This commit is contained in:
Bogdan Nechyporenko
2023-10-16 14:18:37 +02:00
parent 2ae383d372
commit b5dcf6b120
3 changed files with 21 additions and 10 deletions
@@ -32,9 +32,8 @@ import {
type FormValidation,
} from './createAsyncValidators';
import { ReviewState, type ReviewStateProps } from '../ReviewState';
import { useTemplateSchema } from '../../hooks/useTemplateSchema';
import { useTemplateSchema, useFormDataFromQuery } from '../../hooks';
import validator from '@rjsf/validator-ajv8';
import { useFormDataFromQuery } from '../../hooks';
import { FormProps } from '../../types';
import { useTransformSchemaToProps } from '../../hooks/useTransformSchemaToProps';
import { hasErrors } from './utils';
@@ -73,6 +72,7 @@ export type StepperProps = {
onCreate: (values: Record<string, JsonValue>) => Promise<void>;
components?: {
ReviewStateComponent?: (props: ReviewStateProps) => JSX.Element;
backButtonText?: ReactNode;
createButtonText?: ReactNode;
reviewButtonText?: ReactNode;
};
@@ -87,6 +87,7 @@ export const Stepper = (stepperProps: StepperProps) => {
const { layouts = [], components = {}, ...props } = stepperProps;
const {
ReviewStateComponent = ReviewState,
backButtonText = 'Back',
createButtonText = 'Create',
reviewButtonText = 'Review',
} = components;
@@ -157,6 +158,13 @@ export const Stepper = (stepperProps: StepperProps) => {
setFormState(current => ({ ...current, ...formData }));
};
const backLabel =
configurations?.buttonLabels?.backButtonText ?? backButtonText;
const createLabel =
configurations?.buttonLabels?.createButtonText ?? createButtonText;
const reviewLabel =
configurations?.buttonLabels?.reviewButtonText ?? reviewButtonText;
return (
<>
{isValidating && <LinearProgress variant="indeterminate" />}
@@ -167,7 +175,7 @@ export const Stepper = (stepperProps: StepperProps) => {
</MuiStep>
))}
<MuiStep>
<MuiStepLabel>Review</MuiStepLabel>
<MuiStepLabel>${reviewLabel}</MuiStepLabel>
</MuiStep>
</MuiStepper>
<div className={styles.formWrapper}>
@@ -191,7 +199,7 @@ export const Stepper = (stepperProps: StepperProps) => {
className={styles.backButton}
disabled={activeStep < 1 || isValidating}
>
Back
{backLabel}
</Button>
<Button
variant="contained"
@@ -199,7 +207,7 @@ export const Stepper = (stepperProps: StepperProps) => {
type="submit"
disabled={isValidating}
>
{activeStep === steps.length - 1 ? reviewButtonText : 'Next'}
{activeStep === steps.length - 1 ? reviewLabel : 'Next'}
</Button>
</div>
</Form>
@@ -212,7 +220,7 @@ export const Stepper = (stepperProps: StepperProps) => {
className={styles.backButton}
disabled={activeStep < 1}
>
Back
{configurations?.buttonLabels?.backButtonText ?? backButtonText}
</Button>
<Button
variant="contained"
@@ -229,7 +237,7 @@ export const Stepper = (stepperProps: StepperProps) => {
);
}}
>
{configurations.kickOffButtonText ?? createButtonText}
{createLabel}
</Button>
</div>
</>
@@ -42,7 +42,7 @@ export const useTemplateSchema = (
manifest: TemplateParameterSchema,
): {
steps: ParsedTemplateSchema[];
configurations: TemplateConfigurationsV1beta3;
configurations?: TemplateConfigurationsV1beta3;
} => {
const featureFlags = useApi(featureFlagsApiRef);
const steps = manifest.steps.map(({ title, description, schema }) => ({