From e46abc71cad590c2113247d41feca80d27a557b0 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 21 Sep 2016 22:07:18 +0200 Subject: Fix notifications in UI, added new API for fetching account relationships --- .../components/actions/notifications.jsx | 7 +++++++ .../ui/containers/notifications_container.jsx | 24 +++++++++++----------- .../components/reducers/notifications.jsx | 5 ++++- 3 files changed, 23 insertions(+), 13 deletions(-) (limited to 'app/assets') diff --git a/app/assets/javascripts/components/actions/notifications.jsx b/app/assets/javascripts/components/actions/notifications.jsx index cf1e50a69..f19a356c2 100644 --- a/app/assets/javascripts/components/actions/notifications.jsx +++ b/app/assets/javascripts/components/actions/notifications.jsx @@ -1,4 +1,5 @@ export const NOTIFICATION_DISMISS = 'NOTIFICATION_DISMISS'; +export const NOTIFICATION_CLEAR = 'NOTIFICATION_CLEAR'; export function dismissNotification(notification) { return { @@ -6,3 +7,9 @@ export function dismissNotification(notification) { notification: notification }; }; + +export function clearNotifications() { + return { + type: NOTIFICATION_CLEAR + }; +}; diff --git a/app/assets/javascripts/components/features/ui/containers/notifications_container.jsx b/app/assets/javascripts/components/features/ui/containers/notifications_container.jsx index 2db1603fc..bc339ef28 100644 --- a/app/assets/javascripts/components/features/ui/containers/notifications_container.jsx +++ b/app/assets/javascripts/components/features/ui/containers/notifications_container.jsx @@ -1,18 +1,18 @@ import { connect } from 'react-redux'; import { NotificationStack } from 'react-notification'; -import { dismissNotification } from '../../../actions/notifications'; +import { + dismissNotification, + clearNotifications +} from '../../../actions/notifications'; -const mapStateToProps = (state, props) => { - return { - notifications: state.get('notifications').map((item, i) => ({ - message: item.get('message'), - title: item.get('title'), - key: i, - action: 'Dismiss', - dismissAfter: 5000 - })).toJS() - }; -}; +const mapStateToProps = (state, props) => ({ + notifications: state.get('notifications').map((item, i) => ({ + message: item.get('message'), + title: item.get('title'), + key: item.get('key'), + dismissAfter: 5000 + })).toJS() +}); const mapDispatchToProps = (dispatch) => { return { diff --git a/app/assets/javascripts/components/reducers/notifications.jsx b/app/assets/javascripts/components/reducers/notifications.jsx index 694d9ff4b..a1d99f0e1 100644 --- a/app/assets/javascripts/components/reducers/notifications.jsx +++ b/app/assets/javascripts/components/reducers/notifications.jsx @@ -2,13 +2,14 @@ import { COMPOSE_SUBMIT_FAIL, COMPOSE_UPLOAD_FAIL } from '../actions/compose'; import { FOLLOW_SUBMIT_FAIL } from '../actions/follow'; import { REBLOG_FAIL, FAVOURITE_FAIL } from '../actions/interactions'; import { TIMELINE_REFRESH_FAIL } from '../actions/timelines'; -import { NOTIFICATION_DISMISS } from '../actions/notifications'; +import { NOTIFICATION_DISMISS, NOTIFICATION_CLEAR } from '../actions/notifications'; import Immutable from 'immutable'; const initialState = Immutable.List(); function notificationFromError(state, error) { let n = Immutable.Map({ + key: state.size > 0 ? state.last().get('key') + 1 : 0, message: '' }); @@ -34,6 +35,8 @@ export default function notifications(state = initialState, action) { case TIMELINE_REFRESH_FAIL: return notificationFromError(state, action.error); case NOTIFICATION_DISMISS: + return state.filterNot(item => item.get('key') === action.notification.key); + case NOTIFICATION_CLEAR: return state.clear(); default: return state; -- cgit