Skip to content

Commit 652fac0

Browse files
fix(orchestrator-form): Review step with empty form data (#2834)
Empty pruned form data (e.g. display-only ActiveText) made generateReviewTableData return undefined and NestedReviewTable throw. Return {} from generateReviewTableData and guard NestedReviewTable. Add regression test and changeset. Made-with: Cursor
1 parent 69ca919 commit 652fac0

4 files changed

Lines changed: 26 additions & 2 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@red-hat-developer-hub/backstage-plugin-orchestrator-form-react': patch
3+
---
4+
5+
fix: avoid Review step crash when form data is empty (for example display-only `ActiveText` with no submitted values). `generateReviewTableData` returns `{}` instead of undefined, and `NestedReviewTable` handles missing data.

workspaces/orchestrator/plugins/orchestrator-form-react/src/components/NestedReviewTable.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,10 @@ export const NestedReviewTable: React.FC<NestedReviewTableProps> = ({
123123
data,
124124
}) => {
125125
const { classes } = useStyles();
126+
const safeData = data ?? {};
126127

127128
// Group top-level sections
128-
const sections: [string, JsonValue][] = Object.entries(data).filter(
129+
const sections: [string, JsonValue][] = Object.entries(safeData).filter(
129130
([_, value]) => value !== undefined,
130131
) as [string, JsonValue][];
131132

workspaces/orchestrator/plugins/orchestrator-form-react/src/utils/generateReviewTableData.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,4 +351,21 @@ describe('mapSchemaToData', () => {
351351
const result = generateReviewTableData(schema, data);
352352
expect(result).toEqual(expectedResult);
353353
});
354+
355+
it('returns an empty object when form data is empty (e.g. display-only ActiveText)', () => {
356+
const schema: JSONSchema7 = {
357+
type: 'object',
358+
title: 'Access request',
359+
properties: {
360+
infoMessage: {
361+
type: 'string',
362+
title: 'Info',
363+
'ui:widget': 'ActiveText',
364+
} as JSONSchema7,
365+
},
366+
};
367+
368+
const result = generateReviewTableData(schema, {});
369+
expect(result).toEqual({});
370+
});
354371
});

workspaces/orchestrator/plugins/orchestrator-form-react/src/utils/generateReviewTableData.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ function generateReviewTableData(
107107
data,
108108
options?.includeHiddenFields ?? false,
109109
);
110-
return result[''] as JsonObject;
110+
const root = result[''] as JsonObject | undefined;
111+
return root ?? {};
111112
}
112113

113114
export default generateReviewTableData;

0 commit comments

Comments
 (0)