@douyinfe/semi-ui
Version:
A modern, comprehensive, flexible design system and UI library. Connect DesignOps & DevOps. Quickly build beautiful React apps. Maintained by Douyin-fe team.
84 lines • 2.6 kB
JavaScript
import React, { PureComponent } from 'react';
import classNames from 'classnames';
import PropTypes from 'prop-types';
import { cssClasses } from '@douyinfe/semi-foundation/lib/es/form/constants';
import { IconAlertTriangle, IconAlertCircle } from '@douyinfe/semi-icons';
const prefix = cssClasses.PREFIX;
export default class ErrorMessage extends PureComponent {
generatorText(error) {
const {
helpTextId,
errorMessageId
} = this.props;
const propsError = this.props.error;
let id = errorMessageId;
if (!propsError) {
id = helpTextId;
}
if (typeof error === 'string') {
return /*#__PURE__*/React.createElement("span", {
id: id
}, error);
} else if (Array.isArray(error)) {
const err = error.filter(e => e);
return err.length ? /*#__PURE__*/React.createElement("span", {
id: id
}, err.join(', ')) : null;
} else if (/*#__PURE__*/React.isValidElement(error)) {
return error;
}
return null;
}
render() {
const {
error,
className,
style,
validateStatus,
helpText,
showValidateIcon,
isInInputGroup
} = this.props;
const cls = classNames({
[prefix + '-field-error-message']: Boolean(error),
[prefix + '-field-help-text']: Boolean(helpText)
}, className);
if (!error && !helpText) {
return null;
}
const iconMap = {
warning: /*#__PURE__*/React.createElement(IconAlertTriangle, null),
error: /*#__PURE__*/React.createElement(IconAlertCircle, null)
};
const text = error ? this.generatorText(error) : this.generatorText(helpText);
const iconCls = `${prefix}-field-validate-status-icon`;
let icon = null;
if (isInInputGroup) {
icon = /*#__PURE__*/React.createElement(IconAlertCircle, {
className: iconCls
});
} else {
if (iconMap[validateStatus]) {
icon = /*#__PURE__*/React.cloneElement(iconMap[validateStatus], {
className: iconCls
});
}
}
return /*#__PURE__*/React.createElement("div", {
className: cls,
style: style
}, showValidateIcon && text ? icon : null, text);
}
}
ErrorMessage.propTypes = {
error: PropTypes.oneOfType([PropTypes.bool, PropTypes.string, PropTypes.array, PropTypes.node]),
className: PropTypes.string,
style: PropTypes.object,
validateStatus: PropTypes.string,
showValidateIcon: PropTypes.bool,
helpText: PropTypes.node,
isInInputGroup: PropTypes.bool,
// internal props
errorMessageId: PropTypes.string,
helpTextId: PropTypes.string
};