|
Packit Service |
0246ed |
import React from "react";
|
|
Packit Service |
0246ed |
import { FormattedMessage } from "react-intl";
|
|
Packit Service |
0246ed |
import PropTypes from "prop-types";
|
|
Packit Service |
0246ed |
import NotificationsApi from "../../data/NotificationsApi";
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
class Notification extends React.PureComponent {
|
|
Packit Service |
0246ed |
constructor() {
|
|
Packit Service |
0246ed |
super();
|
|
Packit Service |
0246ed |
this.timeouts = [];
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
componentDidMount() {
|
|
Packit Service |
0246ed |
this.setFade(this.props.notification.fade);
|
|
Packit Service |
0246ed |
if (this.props.notification.type === "process") {
|
|
Packit Service |
0246ed |
this.timeouts.push(
|
|
Packit Service |
0246ed |
setTimeout(() => {
|
|
Packit Service |
0246ed |
this.props.setNotifications();
|
|
Packit Service |
0246ed |
}, 2600)
|
|
Packit Service |
0246ed |
);
|
|
Packit Service |
0246ed |
// setTimeout is only temporary, and included to simulate what will happen
|
|
Packit Service |
0246ed |
// when the user creates an image (i.e. display process message
|
|
Packit Service |
0246ed |
// then success notification); this should be updated
|
|
Packit Service |
0246ed |
// when image creation is fully implemented
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
componentDidUpdate() {
|
|
Packit Service |
0246ed |
this.setFade(this.props.notification.fade);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
componentWillUnmount() {
|
|
Packit Service |
0246ed |
this.clearTimeouts();
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
setFade(fade) {
|
|
Packit Service |
0246ed |
if (fade === true) {
|
|
Packit Service |
0246ed |
this.timeouts.push(
|
|
Packit Service |
0246ed |
setTimeout(() => {
|
|
Packit Service |
0246ed |
NotificationsApi.closeNotification(this.props.id);
|
|
Packit Service |
0246ed |
this.props.setNotifications();
|
|
Packit Service |
0246ed |
}, 8000)
|
|
Packit Service |
0246ed |
);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
clearTimeouts() {
|
|
Packit Service |
0246ed |
this.timeouts.forEach(clearTimeout);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
stopFade() {
|
|
Packit Service |
0246ed |
this.clearTimeouts();
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
handleClose(e, id) {
|
|
Packit Service |
0246ed |
e.preventDefault();
|
|
Packit Service |
0246ed |
e.stopPropagation();
|
|
Packit Service |
0246ed |
NotificationsApi.closeNotification(id);
|
|
Packit Service |
0246ed |
this.props.setNotifications();
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
render() {
|
|
Packit Service |
0246ed |
const { notification } = this.props;
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
let icon = null;
|
|
Packit Service |
0246ed |
let modifier = "alert-info";
|
|
Packit Service |
0246ed |
if (notification.type === "success") {
|
|
Packit Service |
0246ed |
icon = ;
|
|
Packit Service |
0246ed |
modifier = "alert-success";
|
|
Packit Service |
0246ed |
} else if (notification.type === "process") {
|
|
Packit Service |
0246ed |
icon = (
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
);
|
|
Packit Service |
0246ed |
modifier = "alert-info";
|
|
Packit Service |
0246ed |
} else if (notification.type === "info") {
|
|
Packit Service |
0246ed |
icon = ;
|
|
Packit Service |
0246ed |
modifier = "alert-info";
|
|
Packit Service |
0246ed |
} else if (notification.type === "warning") {
|
|
Packit Service |
0246ed |
icon = ;
|
|
Packit Service |
0246ed |
modifier = "alert-warning";
|
|
Packit Service |
0246ed |
} else if (notification.type === "error") {
|
|
Packit Service |
0246ed |
icon = ;
|
|
Packit Service |
0246ed |
modifier = "alert-danger";
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
return (
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
className={`toast-pf alert ${modifier} ${notification.dismiss && "alert-dismissable"}`}
|
|
Packit Service |
0246ed |
id={`cmpsr-toast-${this.props.id}`}
|
|
Packit Service |
0246ed |
onMouseOver={() => this.stopFade()}
|
|
Packit Service |
0246ed |
onFocus={() => this.stopFade()}
|
|
Packit Service |
0246ed |
onMouseOut={() => this.setFade(notification.fade)}
|
|
Packit Service |
0246ed |
onBlur={() => this.setFade(notification.fade)}
|
|
Packit Service |
0246ed |
>
|
|
Packit Service |
0246ed |
{notification.dismiss && (
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
type="button"
|
|
Packit Service |
0246ed |
className="close"
|
|
Packit Service |
0246ed |
aria-hidden="true"
|
|
Packit Service |
0246ed |
onClick={(e) => this.handleClose(e, this.props.id)}
|
|
Packit Service |
0246ed |
>
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
</button>
|
|
Packit Service |
0246ed |
)}
|
|
Packit Service |
0246ed |
{notification.kebab && (
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
className="btn btn-link dropdown-toggle"
|
|
Packit Service |
0246ed |
type="button"
|
|
Packit Service |
0246ed |
id="dropdownKebabRight"
|
|
Packit Service |
0246ed |
data-toggle="dropdown"
|
|
Packit Service |
0246ed |
aria-haspopup="true"
|
|
Packit Service |
0246ed |
aria-expanded="false"
|
|
Packit Service |
0246ed |
>
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
</button>
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
{notification.kebab.map((action) => (
|
|
Packit Service |
0246ed |
{action}
|
|
Packit Service |
0246ed |
))}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
this.handleClose(e, this.props.id)}>
|
|
Packit Service |
0246ed |
<FormattedMessage defaultMessage="Close" />
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
)}
|
|
Packit Service |
0246ed |
{notification.action && {notification.action} }
|
|
Packit Service |
0246ed |
{icon}
|
|
Packit Service |
0246ed |
{notification.message}
|
|
Packit Service |
0246ed |
{notification.input}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
Notification.propTypes = {
|
|
Packit Service |
0246ed |
notification: PropTypes.shape({
|
|
Packit Service |
0246ed |
kebab: PropTypes.arrayOf(PropTypes.string),
|
|
Packit Service |
0246ed |
dismiss: PropTypes.bool,
|
|
Packit Service |
0246ed |
fade: PropTypes.bool,
|
|
Packit Service |
0246ed |
id: PropTypes.string,
|
|
Packit Service |
0246ed |
label: PropTypes.string,
|
|
Packit Service |
0246ed |
message: PropTypes.object,
|
|
Packit Service |
0246ed |
type: PropTypes.string,
|
|
Packit Service |
0246ed |
action: PropTypes.object,
|
|
Packit Service |
0246ed |
input: PropTypes.object,
|
|
Packit Service |
0246ed |
}),
|
|
Packit Service |
0246ed |
setNotifications: PropTypes.func,
|
|
Packit Service |
0246ed |
id: PropTypes.string,
|
|
Packit Service |
0246ed |
};
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
Notification.defaultProps = {
|
|
Packit Service |
0246ed |
notification: {},
|
|
Packit Service |
0246ed |
setNotifications() {},
|
|
Packit Service |
0246ed |
id: "",
|
|
Packit Service |
0246ed |
};
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export default Notification;
|