Skip to content

Commit 73ae59f

Browse files
committed
refactor: enhance FieldRenderer to support options as both array and object formats
1 parent 6cf3099 commit 73ae59f

1 file changed

Lines changed: 32 additions & 25 deletions

File tree

src/field-renderer/FieldRenderer.jsx

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ const FormFieldRenderer = (props) => {
4242
if (!fieldData.options) {
4343
return null;
4444
}
45+
const optionsArray = Array.isArray(fieldData.options)
46+
? fieldData.options
47+
: Object.entries(fieldData.options);
48+
4549
formField = (
4650
<Form.Group controlId={fieldData.name} isInvalid={!!(isRequired && errorMessage)}>
4751
<Form.Control
@@ -56,14 +60,14 @@ const FormFieldRenderer = (props) => {
5660
onBlur={handleOnBlur}
5761
onFocus={handleFocus}
5862
>
59-
<option key="default" value="">{fieldData.label}</option>
60-
{fieldData.options.map(option => (
61-
<option className="data-hj-suppress" key={option[0]} value={option[0]}>{option[1]}</option>
62-
))}
63-
</Form.Control>
64-
{helpTextFeedback}
65-
{errorFeedback}
66-
</Form.Group>
63+
<option key="default" value="">{fieldData.label}</option>
64+
{optionsArray.map(option => (
65+
<option className="data-hj-suppress" key={option[0]} value={option[0]}>{option[1]}</option>
66+
))}
67+
</Form.Control>
68+
{helpTextFeedback}
69+
{errorFeedback}
70+
</Form.Group>
6771
);
6872
break;
6973
}
@@ -113,22 +117,22 @@ const FormFieldRenderer = (props) => {
113117
case 'checkbox': {
114118
formField = (
115119
<Form.Group isInvalid={!!(isRequired && errorMessage)}>
116-
<Form.Checkbox
117-
className={className}
118-
id={fieldData.name}
119-
checked={!!value}
120-
name={fieldData.name}
121-
value={value}
122-
aria-invalid={isRequired && Boolean(errorMessage)}
123-
onChange={(e) => onChangeHandler(e)}
124-
onBlur={handleOnBlur}
125-
onFocus={handleFocus}
126-
>
127-
{fieldData.label}
128-
</Form.Checkbox>
129-
{helpTextFeedback}
130-
{errorFeedback}
131-
</Form.Group>
120+
<Form.Checkbox
121+
className={className}
122+
id={fieldData.name}
123+
checked={!!value}
124+
name={fieldData.name}
125+
value={value}
126+
aria-invalid={isRequired && Boolean(errorMessage)}
127+
onChange={(e) => onChangeHandler(e)}
128+
onBlur={handleOnBlur}
129+
onFocus={handleFocus}
130+
>
131+
{fieldData.label}
132+
</Form.Checkbox>
133+
{helpTextFeedback}
134+
{errorFeedback}
135+
</Form.Group>
132136
);
133137
break;
134138
}
@@ -159,7 +163,10 @@ FormFieldRenderer.propTypes = {
159163
max_length: PropTypes.number,
160164
min_length: PropTypes.number,
161165
}),
162-
options: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),
166+
options: PropTypes.oneOfType([
167+
PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),
168+
PropTypes.objectOf(PropTypes.string),
169+
]),
163170
}).isRequired,
164171
onChangeHandler: PropTypes.func.isRequired,
165172
handleBlur: PropTypes.func,

0 commit comments

Comments
 (0)