You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
971 B
42 lines
971 B
7 years ago
|
import PropTypes from "prop-types";
|
||
|
import React from "react";
|
||
|
import { Message } from "semantic-ui-react";
|
||
|
|
||
|
const propTypes = {
|
||
|
error: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
|
||
|
header: PropTypes.string
|
||
|
};
|
||
|
|
||
|
const defaultProps = {
|
||
|
error: "",
|
||
|
header: ""
|
||
|
};
|
||
|
|
||
|
const Error = ({ error, header }) => {
|
||
|
if (typeof error === "string") {
|
||
|
const hasError = !!error;
|
||
|
if (hasError) {
|
||
|
return <Message error={hasError} header={header} content={error} />;
|
||
|
}
|
||
|
} else if (typeof error === "object" && Object.keys(error).length > 0) {
|
||
|
const hasError = !!Object.keys(error);
|
||
|
if (hasError) {
|
||
|
return (
|
||
|
<Message
|
||
|
error={hasError}
|
||
|
header={header}
|
||
|
list={Object.keys(error).map(p => (
|
||
|
<Message.Item key={p}> {p}: {error[p]}</Message.Item>
|
||
|
))}
|
||
|
/>
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
};
|
||
|
|
||
|
Error.propTypes = propTypes;
|
||
|
Error.defaultProps = defaultProps;
|
||
|
|
||
|
export default Error;
|