You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.5 KiB
50 lines
1.5 KiB
import { createSelector } from '@reduxjs/toolkit'; |
|
|
|
import { compareId } from 'mastodon/compare_id'; |
|
import type { RootState } from 'mastodon/store'; |
|
|
|
export const selectUnreadNotificationGroupsCount = createSelector( |
|
[ |
|
(s: RootState) => s.notificationGroups.lastReadId, |
|
(s: RootState) => s.notificationGroups.pendingGroups, |
|
(s: RootState) => s.notificationGroups.groups, |
|
], |
|
(notificationMarker, pendingGroups, groups) => { |
|
return ( |
|
groups.filter( |
|
(group) => |
|
group.type !== 'gap' && |
|
group.page_max_id && |
|
compareId(group.page_max_id, notificationMarker) > 0, |
|
).length + |
|
pendingGroups.filter( |
|
(group) => |
|
group.type !== 'gap' && |
|
group.page_max_id && |
|
compareId(group.page_max_id, notificationMarker) > 0, |
|
).length |
|
); |
|
}, |
|
); |
|
|
|
// Whether there is any unread notification according to the user-facing state |
|
export const selectAnyPendingNotification = createSelector( |
|
[ |
|
(s: RootState) => s.notificationGroups.readMarkerId, |
|
(s: RootState) => s.notificationGroups.groups, |
|
], |
|
(notificationMarker, groups) => { |
|
return groups.some( |
|
(group) => |
|
group.type !== 'gap' && |
|
group.page_max_id && |
|
compareId(group.page_max_id, notificationMarker) > 0, |
|
); |
|
}, |
|
); |
|
|
|
export const selectPendingNotificationGroupsCount = createSelector( |
|
[(s: RootState) => s.notificationGroups.pendingGroups], |
|
(pendingGroups) => |
|
pendingGroups.filter((group) => group.type !== 'gap').length, |
|
);
|
|
|