/*
* This file is part of caronte (https://github.com/eciavatta/caronte).
* Copyright (c) 2020 Emiliano Ciavatta.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
import React, {Component} from 'react';
import './Notifications.scss';
import dispatcher from "../dispatcher";
const _ = require('lodash');
const classNames = require('classnames');
class Notifications extends Component {
state = {
notifications: [],
closedNotifications: [],
};
componentDidMount() {
dispatcher.register("notifications", notification => {
const notifications = this.state.notifications;
notifications.push(notification);
this.setState({notifications});
setTimeout(() => {
const notifications = this.state.notifications;
notification.open = true;
this.setState({notifications});
}, 100);
const hideHandle = setTimeout(() => {
const notifications = _.without(this.state.notifications, notification);
const closedNotifications = this.state.closedNotifications.concat([notification]);
notification.closed = true;
this.setState({notifications, closedNotifications});
}, 5000);
const removeHandle = setTimeout(() => {
const closedNotifications = _.without(this.state.closedNotifications, notification);
this.setState({closedNotifications});
}, 6000);
notification.onClick = () => {
clearTimeout(hideHandle);
clearTimeout(removeHandle);
const notifications = _.without(this.state.notifications, notification);
this.setState({notifications});
};
});
}
render() {
return (
{
this.state.closedNotifications.concat(this.state.notifications).map(n =>
{n.event}
{JSON.stringify(n.message)}
)
}
);
}
}
export default Notifications;