Project

General

Profile

Download (1.89 KB) Statistics
| Branch: | Tag: | Revision:
import React from 'react';
import PropTypes from 'prop-types';
import { FormControl } from 'patternfly-react';

import { noop } from '../../../common/helpers';
import AutoComplete from '../../AutoComplete';
import DateTimePicker from '../DateTimePicker/DateTimePicker';
import DatePicker from '../DateTimePicker/DatePicker';
import OrderableSelect from './OrderableSelect';
import MemoryAllocationInput from '../../MemoryAllocationInput/MemoryAllocationInput';
import TimePicker from '../DateTimePicker/TimePicker';
import Select from './Select';

const inputComponents = {
autocomplete: AutoComplete,
select: Select,
date: DatePicker,
dateTime: DateTimePicker,
orderableSelect: OrderableSelect,
time: TimePicker,
memory: MemoryAllocationInput,
};

export const registerInputComponent = (name, Component) => {
inputComponents[name] = Component;
};

export const getComponentClass = name => inputComponents[name] || 'input';

const InputFactory = ({ type, setError, setWarning, ...controlProps }) => {
const componentClass = getComponentClass(type);
let validations = {};
if (componentClass !== 'input') validations = { setError, setWarning };
return (
<FormControl
componentClass={componentClass}
type={type}
{...validations}
{...controlProps}
/>
);
};

InputFactory.propTypes = {
type: PropTypes.string,
value: PropTypes.oneOfType([
PropTypes.string,
PropTypes.number,
PropTypes.bool,
PropTypes.instanceOf(Date),
]),
name: PropTypes.string,
disabled: PropTypes.bool,
required: PropTypes.bool,
className: PropTypes.string,
onChange: PropTypes.func,
setError: PropTypes.func,
setWarning: PropTypes.func,
};

InputFactory.defaultProps = {
type: undefined,
name: undefined,
value: undefined,
className: '',
required: false,
disabled: false,
onChange: noop,
setError: noop,
setWarning: noop,
};

export default InputFactory;
(11-11/18)