@plone/volto
Version:
Volto
97 lines (90 loc) • 2.11 kB
JSX
/**
* EmailWidget component.
* @module components/manage/Widgets/EmailWidget
*/
import FormFieldWrapper from '@plone/volto/components/manage/Widgets/FormFieldWrapper';
import PropTypes from 'prop-types';
import React from 'react';
import { Input } from 'semantic-ui-react';
/** EmailWidget, a widget for email addresses
*
* To use it, in schema properties, declare a field like:
*
* ```jsx
* {
* title: "Email",
* widget: 'email',
* }
* ```
*/
const EmailWidget = (props) => {
const {
id,
value,
onChange,
onBlur,
onClick,
minLength,
maxLength,
placeholder,
isDisabled,
} = props;
const inputId = `field-${id}`;
return (
<FormFieldWrapper {...props} className="email">
<Input
id={inputId}
name={id}
type="email"
value={value || ''}
disabled={isDisabled}
placeholder={placeholder}
onChange={({ target }) =>
onChange(id, target.value === '' ? undefined : target.value)
}
onBlur={({ target }) =>
onBlur(id, target.value === '' ? undefined : target.value)
}
onClick={() => onClick()}
minLength={minLength || null}
maxLength={maxLength || null}
/>
</FormFieldWrapper>
);
};
/**
* Property types
* @property {Object} propTypes Property types.
* @static
*/
EmailWidget.propTypes = {
id: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
description: PropTypes.string,
required: PropTypes.bool,
error: PropTypes.arrayOf(PropTypes.string),
value: PropTypes.string,
onChange: PropTypes.func.isRequired,
onBlur: PropTypes.func,
onClick: PropTypes.func,
minLength: PropTypes.number,
maxLength: PropTypes.number,
placeholder: PropTypes.string,
};
/**
* Default properties.
* @property {Object} defaultProps Default properties.
* @static
*/
EmailWidget.defaultProps = {
description: null,
required: false,
error: [],
value: null,
onChange: () => {},
onBlur: () => {},
onClick: () => {},
minLength: null,
maxLength: null,
};
export default EmailWidget;