Sha256: 4e2405ea1144215257cd4b8cd66c00a1a9659c3b6db8f3d4d8853eee2f5f89f6

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

import React from 'react';
import PropTypes from 'prop-types';

import { FormGroup, TextInput } from '@patternfly/react-core';
import { ExclamationCircleIcon } from '@patternfly/react-icons';

const wrapFieldProps = fieldProps => {
  const { onChange } = fieldProps;
  // modify onChange args to correctly wire formik with pf4 input handlers
  const wrappedOnChange = (value, event) => {
    onChange(event);
  };

  return { ...fieldProps, onChange: wrappedOnChange };
};

const shouldValidate = (form, fieldName) => {
  if (form.touched[fieldName]) {
    return form.errors[fieldName] ? 'error' : 'success';
  }

  return 'noval';
};

const fieldWithHandlers = Component => {
  const Subcomponent = ({ label, form, field, isRequired, ...rest }) => {
    const fieldProps = wrapFieldProps(field);
    const valid = shouldValidate(form, field.name);

    return (
      <FormGroup
        label={label}
        isRequired={isRequired}
        helperTextInvalid={form.errors[field.name]}
        helperTextInvalidIcon={<ExclamationCircleIcon />}
        validated={valid}
      >
        <Component
          aria-label={fieldProps.name}
          {...fieldProps}
          {...rest}
          validated={valid}
          isDisabled={form.isSubmitting}
        />
      </FormGroup>
    );
  };

  Subcomponent.propTypes = {
    form: PropTypes.object.isRequired,
    field: PropTypes.object.isRequired,
    label: PropTypes.string.isRequired,
    isRequired: PropTypes.bool,
  };

  Subcomponent.defaultProps = {
    isRequired: false,
  };

  return Subcomponent;
};

export const TextField = fieldWithHandlers(TextInput);

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
foreman_openscap-5.1.0 webpack/helpers/formFieldsHelper.js