in packages/ui/src/components/FormRenderer/hoc/withDataDrivenFormField/index.tsx [46:116]
function withDataDrivenFormField(
FieldComponent: React.FunctionComponent<any>,
excludeComponentProp = false,
excludedFieldPropKeys: ExcludedFieldPropKey[] = []
) {
return (formFieldProps: UseFieldApiConfig) => {
const props = getProps(formFieldProps, excludeComponentProp);
const useFieldApiProps = useFieldApi(props);
const {
label,
description,
helperText,
info,
i18nStrings,
stretch,
secondaryControl,
isDisabled,
isReadOnly,
isRequired,
input,
validateOnMount,
meta: { error, submitFailed, submitError },
showError,
} = useFieldApiProps;
const controlId = useUniqueId(input.name);
const errorText = getErrorText(validateOnMount, submitFailed, showError, error, submitError);
const onFocus = input.onFocus;
const onBlur = input.onBlur;
const cloudscapeComponentProps = {
disabled: isDisabled,
readOnly: isReadOnly,
ariaRequired: isRequired,
invalid: !!errorText,
controlId,
};
const fieldProps = Object.entries({
controlId,
label,
description,
errorText,
constraintText: helperText,
info,
i18nStrings,
stretch,
secondaryControl,
}).reduce((props, [key, value]) => {
if (!excludedFieldPropKeys.includes(key as ExcludedFieldPropKey)) {
props[key] = value;
}
return props;
}, {});
return (
<FormField {...fieldProps}>
<FieldComponent
{...useFieldApiProps}
{...cloudscapeComponentProps}
controlId={controlId}
onFocus={onFocus}
onBlur={onBlur}
/>
</FormField>
);
};
}