/*! * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * * 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 React from 'react'; import PropTypes from 'prop-types'; import ReactDOM from 'react-dom'; import classnames from 'classnames'; import i18n from 'nfvo-utils/i18n/i18n.js'; import {notificationType} from './UserNotificationsConstants.js'; import ShowMore from 'react-show-more'; const Notification = ({notification, users, onActionClicked, getNotificationTypeDesc}) => { const {eventType, read, eventAttributes, dateTime} = notification; const {itemName, userId, description, versionName, permission, granted} = eventAttributes; const {fullName: userName} = users.find(user => user.userId === userId); return (
{itemName} {versionName &&    v{versionName}} {!read &&
}
{getNotificationTypeDesc(eventType, permission, granted)}
{`${i18n('By')} ${userName}`}
{(description || versionName) &&
{description && {description} } {eventType === notificationType.ITEM_CHANGED.SUBMIT &&
{i18n('Version {versionName} was submitted.', {versionName: versionName})}
}
}
{dateTime}
onActionClicked(notification)}> {eventType === notificationType.PERMISSION_CHANGED || eventType === notificationType.ITEM_DELETED || eventType === notificationType.ITEM_ARCHIVED || eventType === notificationType.ITEM_RESTORED ? i18n('OK') : i18n('Sync')}
); }; function getNotificationTypeDesc(eventType, permission, granted) { switch (eventType) { case notificationType.PERMISSION_CHANGED: const grantedStr = granted ? i18n('Granted') : i18n('Taken'); return `${i18n('Permission')} ${grantedStr}: ${permission}`; case notificationType.ITEM_CHANGED.COMMIT: return i18n('Your Copy Is Out Of Sync'); case notificationType.ITEM_CHANGED.SUBMIT: return i18n('Version Submitted'); case notificationType.ITEM_DELETED: return i18n('Item was deleted'); case notificationType.ITEM_ARCHIVED: return i18n('Item was archived'); case notificationType.ITEM_RESTORED: return i18n('Item was restored from archive'); } } class UserNotifications extends React.Component { static propTypes = { currentScreen: PropTypes.object, notificationsList: PropTypes.array, usersList: PropTypes.array, lastScanned: PropTypes.string, endOfPage:PropTypes.string, onLoadPrevNotifications: PropTypes.func, onSync: PropTypes.func, updateNotification: PropTypes.func, onLoadItemsLists: PropTypes.func }; render() { const {notificationsList = [], usersList, lastScanned, endOfPage} = this.props; return (
{i18n('Notifications')}
this.loadPrevNotifications(lastScanned, endOfPage)}> { notificationsList.map(notification => ( this.onActionClicked(notification)} getNotificationTypeDesc={getNotificationTypeDesc}/>)) }
); } onActionClicked(notification) { const {onSync, updateNotification, currentScreen, onLoadItemsLists} = this.props; const {eventType, eventAttributes: {itemId, itemName, versionId, versionName}} = notification; if(eventType !== notificationType.PERMISSION_CHANGED && eventType !== notificationType.ITEM_DELETED && eventType !== notificationType.ITEM_ARCHIVED && eventType !== notificationType.ITEM_RESTORED) { onSync({itemId, itemName, versionId, versionName, currentScreen}); } else { onLoadItemsLists(); } updateNotification(notification); } loadPrevNotifications(lastScanned, endOfPage) { if(endOfPage && lastScanned) { let element = ReactDOM.findDOMNode(this.refs['notificationList']); const {onLoadPrevNotifications} = this.props; if (element && element.clientHeight + element.scrollTop === element.scrollHeight) { onLoadPrevNotifications(lastScanned, endOfPage); } } } } export default UserNotifications;