Signed-off-by: bnechyporenko <bnechyporenko@bol.com>
This commit is contained in:
bnechyporenko
2022-10-27 09:34:31 +02:00
parent 4713e9dd06
commit d4af3731fb
3 changed files with 27 additions and 10 deletions
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { getReviewData } from './ReviewStep';
import { getReviewData, getUiSchemasFromSteps } from './ReviewStep';
describe('MultistepJsonForm', () => {
const formDataMock = {
@@ -76,7 +76,8 @@ describe('MultistepJsonForm', () => {
];
test('Fields are defined to be hidden or masked', () => {
const reviewData = getReviewData(formDataMock, stepsMock);
const schemas = getUiSchemasFromSteps(stepsMock);
const reviewData = getReviewData(formDataMock, schemas);
expect(reviewData.password).toBe('******');
expect(reviewData.masked).toBe('******');
@@ -67,7 +67,7 @@ export type MultistepJsonFormProps = {
ReviewStepComponent?: ComponentType<ReviewStepProps>;
};
function getUiSchemasFromSteps(steps: Step[]): {
export function getSchemasFromSteps(steps: Step[]): {
uiSchema: UiSchema;
mergedSchema: JsonObject;
schema: JsonObject;
@@ -218,7 +218,7 @@ export const MultistepJsonForm = (props: MultistepJsonFormProps) => {
handleCreate={handleCreate}
handleReset={handleReset}
formData={formData}
steps={getUiSchemasFromSteps(steps)}
steps={getSchemasFromSteps(steps)}
/>
)}
</>
@@ -22,12 +22,12 @@ import { ReviewStepProps } from '../types';
export function getReviewData(
formData: Record<string, any>,
steps: UiSchema[],
uiSchemas: UiSchema[],
) {
const reviewData: Record<string, any> = {};
for (const key in formData) {
if (formData.hasOwnProperty(key)) {
const uiSchema = steps.find(us => us.name === key);
const uiSchema = uiSchemas.find(us => us.name === key);
if (!uiSchema) {
reviewData[key] = formData[key];
@@ -60,6 +60,25 @@ export function getReviewData(
return reviewData;
}
export function getUiSchemasFromSteps(
steps: {
schema: JsonObject;
}[],
): UiSchema[] {
const uiSchemas: Array<UiSchema> = [];
steps.forEach(step => {
const schemaProps = step.schema.properties as JsonObject;
for (const key in schemaProps) {
if (schemaProps.hasOwnProperty(key)) {
const uiSchema = schemaProps[key] as UiSchema;
uiSchema.name = key;
uiSchemas.push(uiSchema);
}
}
});
return uiSchemas;
}
/**
* The component displaying the Last Step in scaffolder template form.
* Which represents the summary of the input provided by the end user.
@@ -79,10 +98,7 @@ export const ReviewStep = (props: ReviewStepProps) => {
<Typography variant="h6">Review and create</Typography>
<StructuredMetadataTable
dense
metadata={getReviewData(
formData,
steps.map(step => ({ uiSchema: step.uiSchema })),
)}
metadata={getReviewData(formData, getUiSchemasFromSteps(steps))}
/>
<Box mb={4} />
<Button onClick={handleBack} disabled={disableButtons}>