Decrease count of filtered notifications when notification requests are accepted or dismissed (#31149)
This commit is contained in:
parent
c091fa7105
commit
dfd43869c9
3 changed files with 34 additions and 9 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
import { createAction } from '@reduxjs/toolkit';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
apiGetNotificationPolicy,
|
apiGetNotificationPolicy,
|
||||||
apiUpdateNotificationsPolicy,
|
apiUpdateNotificationsPolicy,
|
||||||
|
@ -14,3 +16,7 @@ export const updateNotificationsPolicy = createDataLoadingThunk(
|
||||||
'notificationPolicy/update',
|
'notificationPolicy/update',
|
||||||
(policy: Partial<NotificationPolicy>) => apiUpdateNotificationsPolicy(policy),
|
(policy: Partial<NotificationPolicy>) => apiUpdateNotificationsPolicy(policy),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
export const decreasePendingNotificationsCount = createAction<number>(
|
||||||
|
'notificationPolicy/decreasePendingNotificationCount',
|
||||||
|
);
|
||||||
|
|
|
@ -18,6 +18,7 @@ import {
|
||||||
importFetchedStatuses,
|
importFetchedStatuses,
|
||||||
} from './importer';
|
} from './importer';
|
||||||
import { submitMarkers } from './markers';
|
import { submitMarkers } from './markers';
|
||||||
|
import { decreasePendingNotificationsCount } from './notification_policies';
|
||||||
import { notificationsUpdate } from "./notifications_typed";
|
import { notificationsUpdate } from "./notifications_typed";
|
||||||
import { register as registerPushNotifications } from './push_notifications';
|
import { register as registerPushNotifications } from './push_notifications';
|
||||||
import { saveSettings } from './settings';
|
import { saveSettings } from './settings';
|
||||||
|
@ -84,6 +85,12 @@ const fetchRelatedRelationships = (dispatch, notifications) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const selectNotificationCountForRequest = (state, id) => {
|
||||||
|
const requests = state.getIn(['notificationRequests', 'items']);
|
||||||
|
const thisRequest = requests.find(request => request.get('id') === id);
|
||||||
|
return thisRequest ? thisRequest.get('notifications_count') : 0;
|
||||||
|
};
|
||||||
|
|
||||||
export const loadPending = () => ({
|
export const loadPending = () => ({
|
||||||
type: NOTIFICATIONS_LOAD_PENDING,
|
type: NOTIFICATIONS_LOAD_PENDING,
|
||||||
});
|
});
|
||||||
|
@ -433,11 +440,13 @@ export const fetchNotificationRequestFail = (id, error) => ({
|
||||||
error,
|
error,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const acceptNotificationRequest = id => (dispatch) => {
|
export const acceptNotificationRequest = (id) => (dispatch, getState) => {
|
||||||
|
const count = selectNotificationCountForRequest(getState(), id);
|
||||||
dispatch(acceptNotificationRequestRequest(id));
|
dispatch(acceptNotificationRequestRequest(id));
|
||||||
|
|
||||||
api().post(`/api/v1/notifications/requests/${id}/accept`).then(() => {
|
api().post(`/api/v1/notifications/requests/${id}/accept`).then(() => {
|
||||||
dispatch(acceptNotificationRequestSuccess(id));
|
dispatch(acceptNotificationRequestSuccess(id));
|
||||||
|
dispatch(decreasePendingNotificationsCount(count));
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
dispatch(acceptNotificationRequestFail(id, err));
|
dispatch(acceptNotificationRequestFail(id, err));
|
||||||
});
|
});
|
||||||
|
@ -459,11 +468,13 @@ export const acceptNotificationRequestFail = (id, error) => ({
|
||||||
error,
|
error,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const dismissNotificationRequest = id => (dispatch) => {
|
export const dismissNotificationRequest = (id) => (dispatch, getState) => {
|
||||||
|
const count = selectNotificationCountForRequest(getState(), id);
|
||||||
dispatch(dismissNotificationRequestRequest(id));
|
dispatch(dismissNotificationRequestRequest(id));
|
||||||
|
|
||||||
api().post(`/api/v1/notifications/requests/${id}/dismiss`).then(() =>{
|
api().post(`/api/v1/notifications/requests/${id}/dismiss`).then(() =>{
|
||||||
dispatch(dismissNotificationRequestSuccess(id));
|
dispatch(dismissNotificationRequestSuccess(id));
|
||||||
|
dispatch(decreasePendingNotificationsCount(count));
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
dispatch(dismissNotificationRequestFail(id, err));
|
dispatch(dismissNotificationRequestFail(id, err));
|
||||||
});
|
});
|
||||||
|
|
|
@ -2,17 +2,25 @@ import { createReducer, isAnyOf } from '@reduxjs/toolkit';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
fetchNotificationPolicy,
|
fetchNotificationPolicy,
|
||||||
|
decreasePendingNotificationsCount,
|
||||||
updateNotificationsPolicy,
|
updateNotificationsPolicy,
|
||||||
} from 'mastodon/actions/notification_policies';
|
} from 'mastodon/actions/notification_policies';
|
||||||
import type { NotificationPolicy } from 'mastodon/models/notification_policy';
|
import type { NotificationPolicy } from 'mastodon/models/notification_policy';
|
||||||
|
|
||||||
export const notificationPolicyReducer =
|
export const notificationPolicyReducer =
|
||||||
createReducer<NotificationPolicy | null>(null, (builder) => {
|
createReducer<NotificationPolicy | null>(null, (builder) => {
|
||||||
builder.addMatcher(
|
builder
|
||||||
isAnyOf(
|
.addCase(decreasePendingNotificationsCount, (state, action) => {
|
||||||
fetchNotificationPolicy.fulfilled,
|
if (state) {
|
||||||
updateNotificationsPolicy.fulfilled,
|
state.summary.pending_notifications_count -= action.payload;
|
||||||
),
|
state.summary.pending_requests_count -= 1;
|
||||||
(_state, action) => action.payload,
|
}
|
||||||
);
|
})
|
||||||
|
.addMatcher(
|
||||||
|
isAnyOf(
|
||||||
|
fetchNotificationPolicy.fulfilled,
|
||||||
|
updateNotificationsPolicy.fulfilled,
|
||||||
|
),
|
||||||
|
(_state, action) => action.payload,
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue