/* * Copyright 2014 Mirantis, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may obtain * a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. **/ import _ from 'underscore'; import i18n from 'i18n'; import React from 'react'; import utils from 'utils'; import models from 'models'; import {ShowNodeInfoDialog} from 'views/dialogs'; import {backboneMixin} from 'component_mixins'; var NotificationsPage, Notification; NotificationsPage = React.createClass({ mixins: [backboneMixin('notifications')], statics: { title: i18n('notifications_page.title'), navbarActiveElement: null, breadcrumbsPath: [['home', '#'], 'notifications'], fetchData() { var notifications = app.notifications; return notifications.fetch().then(() => ({notifications: notifications}) ); } }, checkDateIsToday(date) { var today = new Date(); var day = _.padLeft(today.getDate(), 2, '0'); var month = _.padLeft(today.getMonth() + 1, 2, '0'); return [day, month, today.getFullYear()].join('-') === date; }, render() { var notificationGroups = this.props.notifications.groupBy('date'); return (

{i18n('notifications_page.title')}

{_.map(notificationGroups, (notifications, date) => { return (
{this.checkDateIsToday(date) ? i18n('notifications_page.today') : date}
{_.map(notifications, (notification) => { return ; })}
); })}
); } }); Notification = React.createClass({ mixins: [backboneMixin('notification')], showNodeInfo(id) { var node = new models.Node({id: id}); node.fetch(); ShowNodeInfoDialog.show({node: node}); }, markAsRead() { var notification = this.props.notification; notification.toJSON = () => notification.pick('id', 'status'); notification.save({status: 'read'}); }, onNotificationClick() { if (this.props.notification.get('status') == 'unread') { this.markAsRead(); } var nodeId = this.props.notification.get('node_id'); if (nodeId) { this.showNodeInfo(nodeId); } }, render() { var topic = this.props.notification.get('topic'); var notificationClasses = { 'col-xs-12 notification': true, 'text-danger': topic == 'error', 'text-warning': topic == 'warning', unread: this.props.notification.get('status') == 'unread' }; var iconClass = { error: 'glyphicon-exclamation-sign', warning: 'glyphicon-warning-sign', discover: 'glyphicon-bell' }[topic] || 'glyphicon-info-sign'; return (
{this.props.notification.get('time')}
); } }); export default NotificationsPage;