Fix all notification types being stored without filtering when polling (#31745)
parent
1fcffa573c
commit
fab29ebbe8
|
@ -18,7 +18,7 @@ import {
|
||||||
selectSettingsNotificationsQuickFilterActive,
|
selectSettingsNotificationsQuickFilterActive,
|
||||||
selectSettingsNotificationsShows,
|
selectSettingsNotificationsShows,
|
||||||
} from 'mastodon/selectors/settings';
|
} from 'mastodon/selectors/settings';
|
||||||
import type { AppDispatch } from 'mastodon/store';
|
import type { AppDispatch, RootState } from 'mastodon/store';
|
||||||
import {
|
import {
|
||||||
createAppAsyncThunk,
|
createAppAsyncThunk,
|
||||||
createDataLoadingThunk,
|
createDataLoadingThunk,
|
||||||
|
@ -32,6 +32,14 @@ function excludeAllTypesExcept(filter: string) {
|
||||||
return allNotificationTypes.filter((item) => item !== filter);
|
return allNotificationTypes.filter((item) => item !== filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getExcludedTypes(state: RootState) {
|
||||||
|
const activeFilter = selectSettingsNotificationsQuickFilterActive(state);
|
||||||
|
|
||||||
|
return activeFilter === 'all'
|
||||||
|
? selectSettingsNotificationsExcludedTypes(state)
|
||||||
|
: excludeAllTypesExcept(activeFilter);
|
||||||
|
}
|
||||||
|
|
||||||
function dispatchAssociatedRecords(
|
function dispatchAssociatedRecords(
|
||||||
dispatch: AppDispatch,
|
dispatch: AppDispatch,
|
||||||
notifications: ApiNotificationGroupJSON[] | ApiNotificationJSON[],
|
notifications: ApiNotificationGroupJSON[] | ApiNotificationJSON[],
|
||||||
|
@ -62,17 +70,8 @@ function dispatchAssociatedRecords(
|
||||||
|
|
||||||
export const fetchNotifications = createDataLoadingThunk(
|
export const fetchNotifications = createDataLoadingThunk(
|
||||||
'notificationGroups/fetch',
|
'notificationGroups/fetch',
|
||||||
async (_params, { getState }) => {
|
async (_params, { getState }) =>
|
||||||
const activeFilter =
|
apiFetchNotifications({ exclude_types: getExcludedTypes(getState()) }),
|
||||||
selectSettingsNotificationsQuickFilterActive(getState());
|
|
||||||
|
|
||||||
return apiFetchNotifications({
|
|
||||||
exclude_types:
|
|
||||||
activeFilter === 'all'
|
|
||||||
? selectSettingsNotificationsExcludedTypes(getState())
|
|
||||||
: excludeAllTypesExcept(activeFilter),
|
|
||||||
});
|
|
||||||
},
|
|
||||||
({ notifications, accounts, statuses }, { dispatch }) => {
|
({ notifications, accounts, statuses }, { dispatch }) => {
|
||||||
dispatch(importFetchedAccounts(accounts));
|
dispatch(importFetchedAccounts(accounts));
|
||||||
dispatch(importFetchedStatuses(statuses));
|
dispatch(importFetchedStatuses(statuses));
|
||||||
|
@ -92,9 +91,11 @@ export const fetchNotifications = createDataLoadingThunk(
|
||||||
|
|
||||||
export const fetchNotificationsGap = createDataLoadingThunk(
|
export const fetchNotificationsGap = createDataLoadingThunk(
|
||||||
'notificationGroups/fetchGap',
|
'notificationGroups/fetchGap',
|
||||||
async (params: { gap: NotificationGap }) =>
|
async (params: { gap: NotificationGap }, { getState }) =>
|
||||||
apiFetchNotifications({ max_id: params.gap.maxId }),
|
apiFetchNotifications({
|
||||||
|
max_id: params.gap.maxId,
|
||||||
|
exclude_types: getExcludedTypes(getState()),
|
||||||
|
}),
|
||||||
({ notifications, accounts, statuses }, { dispatch }) => {
|
({ notifications, accounts, statuses }, { dispatch }) => {
|
||||||
dispatch(importFetchedAccounts(accounts));
|
dispatch(importFetchedAccounts(accounts));
|
||||||
dispatch(importFetchedStatuses(statuses));
|
dispatch(importFetchedStatuses(statuses));
|
||||||
|
@ -109,6 +110,7 @@ export const pollRecentNotifications = createDataLoadingThunk(
|
||||||
async (_params, { getState }) => {
|
async (_params, { getState }) => {
|
||||||
return apiFetchNotifications({
|
return apiFetchNotifications({
|
||||||
max_id: undefined,
|
max_id: undefined,
|
||||||
|
exclude_types: getExcludedTypes(getState()),
|
||||||
// In slow mode, we don't want to include notifications that duplicate the already-displayed ones
|
// In slow mode, we don't want to include notifications that duplicate the already-displayed ones
|
||||||
since_id: usePendingItems
|
since_id: usePendingItems
|
||||||
? getState().notificationGroups.groups.find(
|
? getState().notificationGroups.groups.find(
|
||||||
|
@ -183,7 +185,6 @@ export const setNotificationsFilter = createAppAsyncThunk(
|
||||||
path: ['notifications', 'quickFilter', 'active'],
|
path: ['notifications', 'quickFilter', 'active'],
|
||||||
value: filterType,
|
value: filterType,
|
||||||
});
|
});
|
||||||
// dispatch(expandNotifications({ forceLoad: true }));
|
|
||||||
void dispatch(fetchNotifications());
|
void dispatch(fetchNotifications());
|
||||||
dispatch(saveSettings());
|
dispatch(saveSettings());
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue