b445c15cc9
* Move broadcast channel to lib * Refactor view/com/post/Post and remove temporary 2 components * Add useModerationOpts hook * Refactor notifications to use react-query * Fix: only trigger updates in useModerationOpts when the values have changed * Implement unread notification tracking * Add moderation filtering to notifications * Handle native/push notifications * Remove dead code --------- Co-authored-by: Eric Bailey <git@esb.lol>
39 lines
964 B
TypeScript
39 lines
964 B
TypeScript
import {
|
|
AppBskyNotificationListNotifications,
|
|
ModerationOpts,
|
|
moderateProfile,
|
|
moderatePost,
|
|
} from '@atproto/api'
|
|
|
|
// TODO this should be in the sdk as moderateNotification -prf
|
|
export function shouldFilterNotif(
|
|
notif: AppBskyNotificationListNotifications.Notification,
|
|
moderationOpts: ModerationOpts | undefined,
|
|
): boolean {
|
|
if (!moderationOpts) {
|
|
return false
|
|
}
|
|
const profile = moderateProfile(notif.author, moderationOpts)
|
|
if (
|
|
profile.account.filter ||
|
|
profile.profile.filter ||
|
|
notif.author.viewer?.muted
|
|
) {
|
|
return true
|
|
}
|
|
if (
|
|
notif.type === 'reply' ||
|
|
notif.type === 'quote' ||
|
|
notif.type === 'mention'
|
|
) {
|
|
// NOTE: the notification overlaps the post enough for this to work
|
|
const post = moderatePost(notif, moderationOpts)
|
|
if (post.content.filter) {
|
|
return true
|
|
}
|
|
}
|
|
// TODO: thread muting is not being applied
|
|
// (this requires fetching the post)
|
|
return false
|
|
}
|