124 lines
2.4 KiB
JavaScript
Raw Normal View History

2020-01-03 10:53:58 +01:00
/**
*
* Inputs
*/
import React from 'react';
import PropTypes from 'prop-types';
import { ErrorMessage, Label } from '@buffetjs/styles';
import { Error, InputText } from '@buffetjs/core';
import Wrapper from './Wrapper';
import HeadersInput from '../HeadersInput';
2020-01-06 01:52:26 +01:00
import EventInput from '../EventInput';
2020-01-03 10:53:58 +01:00
function Inputs({
error: inputError,
label,
name,
onChange,
onClick,
type,
validations,
value,
}) {
2020-01-03 15:54:53 +01:00
const renderInput = ({ hasError, onBlur, handleChange }, type) => {
if (type === 'headers') {
return (
<HeadersInput
value={value}
name={name}
onClick={onClick}
onChange={handleChange}
/>
);
2020-01-06 01:52:26 +01:00
}
if (type === 'events') {
2020-01-03 15:54:53 +01:00
return (
2020-01-06 01:52:26 +01:00
<EventInput
2020-01-03 15:54:53 +01:00
value={value}
name={name}
2020-01-06 01:52:26 +01:00
onClick={onClick}
onChange={handleChange}
2020-01-03 15:54:53 +01:00
/>
);
}
2020-01-06 01:52:26 +01:00
return (
<InputText
error={hasError}
onBlur={onBlur}
onChange={handleChange}
value={value}
name={name}
/>
);
2020-01-03 15:54:53 +01:00
};
2020-01-03 10:53:58 +01:00
return (
<Error
inputError={inputError}
name={name}
type={'text'}
validations={validations}
>
{({ canCheck, onBlur, error, dispatch }) => {
const hasError = error && error !== null;
2020-01-03 15:54:53 +01:00
const handleChange = e => {
if (!canCheck) {
dispatch({
type: 'SET_CHECK',
});
}
2020-01-03 10:53:58 +01:00
2020-01-03 15:54:53 +01:00
dispatch({
type: 'SET_ERROR',
error: null,
});
onChange(e);
};
2020-01-03 10:53:58 +01:00
2020-01-03 15:54:53 +01:00
const inputProps = {
onBlur: onBlur,
handleChange: handleChange,
hasError: hasError,
};
2020-01-03 10:53:58 +01:00
2020-01-03 15:54:53 +01:00
return (
<Wrapper>
<Label htmlFor={name}>{label}</Label>
{renderInput(inputProps, type)}
2020-01-03 10:53:58 +01:00
{hasError && <ErrorMessage>{error}</ErrorMessage>}
</Wrapper>
);
}}
</Error>
);
}
Inputs.defaultProps = {
error: null,
label: '',
onClick: () => {},
type: 'text',
validations: {},
2020-01-03 15:54:53 +01:00
value: null,
2020-01-03 10:53:58 +01:00
};
Inputs.propTypes = {
error: PropTypes.string,
label: PropTypes.oneOfType([PropTypes.string]),
name: PropTypes.string.isRequired,
onChange: PropTypes.func.isRequired,
onClick: PropTypes.func,
type: PropTypes.string,
validations: PropTypes.object,
value: PropTypes.oneOfType([
PropTypes.string,
PropTypes.object,
PropTypes.array,
]),
};
export default Inputs;