function withDataDrivenFormField()

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>
        );
    };
}