Added buttons and menu items to dismiss individual notifications (#76)
* Added DELETE verb for notifications * Added notification dismiss button to status dropdown * Added reveal-on-hover notif dismiss button, added FollowNotification component
This commit is contained in:
@@ -6,6 +6,8 @@ import { defineMessages } from 'react-intl';
|
||||
|
||||
export const NOTIFICATIONS_UPDATE = 'NOTIFICATIONS_UPDATE';
|
||||
|
||||
export const NOTIFICATION_DELETE_SUCCESS = 'NOTIFICATION_DELETE_SUCCESS';
|
||||
|
||||
export const NOTIFICATIONS_REFRESH_REQUEST = 'NOTIFICATIONS_REFRESH_REQUEST';
|
||||
export const NOTIFICATIONS_REFRESH_SUCCESS = 'NOTIFICATIONS_REFRESH_SUCCESS';
|
||||
export const NOTIFICATIONS_REFRESH_FAIL = 'NOTIFICATIONS_REFRESH_FAIL';
|
||||
@@ -187,3 +189,18 @@ export function scrollTopNotifications(top) {
|
||||
top,
|
||||
};
|
||||
};
|
||||
|
||||
export function deleteNotification(id) {
|
||||
return (dispatch, getState) => {
|
||||
api(getState).delete(`/api/v1/notifications/${id}`).then(() => {
|
||||
dispatch(deleteNotificationSuccess(id));
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
export function deleteNotificationSuccess(id) {
|
||||
return {
|
||||
type: NOTIFICATION_DELETE_SUCCESS,
|
||||
id: id,
|
||||
};
|
||||
};
|
||||
|
@@ -190,6 +190,7 @@
|
||||
"status.show_more": "Show more",
|
||||
"status.uncollapse": "Uncollapse",
|
||||
"status.unmute_conversation": "Unmute conversation",
|
||||
"status.dismiss_notification": "Dismiss notification",
|
||||
"tabs_bar.compose": "Compose",
|
||||
"tabs_bar.federated_timeline": "Federated",
|
||||
"tabs_bar.home": "Home",
|
||||
|
@@ -8,6 +8,7 @@ import {
|
||||
NOTIFICATIONS_EXPAND_FAIL,
|
||||
NOTIFICATIONS_CLEAR,
|
||||
NOTIFICATIONS_SCROLL_TOP,
|
||||
NOTIFICATION_DELETE_SUCCESS,
|
||||
} from '../actions/notifications';
|
||||
import { ACCOUNT_BLOCK_SUCCESS } from '../actions/accounts';
|
||||
import { TIMELINE_DELETE } from '../actions/timelines';
|
||||
@@ -92,6 +93,10 @@ const deleteByStatus = (state, statusId) => {
|
||||
return state.update('items', list => list.filterNot(item => item.get('status') === statusId));
|
||||
};
|
||||
|
||||
const deleteById = (state, notificationId) => {
|
||||
return state.update('items', list => list.filterNot(item => item.get('id') === notificationId));
|
||||
};
|
||||
|
||||
export default function notifications(state = initialState, action) {
|
||||
switch(action.type) {
|
||||
case NOTIFICATIONS_REFRESH_REQUEST:
|
||||
@@ -113,6 +118,8 @@ export default function notifications(state = initialState, action) {
|
||||
return state.set('items', ImmutableList()).set('next', null);
|
||||
case TIMELINE_DELETE:
|
||||
return deleteByStatus(state, action.id);
|
||||
case NOTIFICATION_DELETE_SUCCESS:
|
||||
return deleteById(state, action.id);
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
|
Reference in New Issue
Block a user