/*! * 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-text'; 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;