diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-04-27 12:38:23 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-27 12:38:23 -0500 |
commit | 1d50ddb378d5c6954d4cf8a6145b4486b9497107 (patch) | |
tree | 85a55e9aef6692c304cc31d7c3bb239c186f7951 /src/state/models/feeds/notifications.ts | |
parent | 51be8474db5e8074b1af233609b5eb455af31692 (diff) | |
download | voidsky-1d50ddb378d5c6954d4cf8a6145b4486b9497107.tar.zst |
Refactor moderation to apply to accounts, profiles, and posts correctly (#548)
* Add ScreenHider component * Add blur attribute to UserAvatar and UserBanner * Remove dead suggested posts component and model * Bump @atproto/api@0.2.10 * Rework moderation tooling to give a more precise DSL * Add label mocks * Apply finer grained moderation controls * Refactor ProfileCard to just take the profile object * Apply moderation to user listings and banner * Apply moderation to notifications * Fix lint * Tune avatar & banner blur settings per platform * 1.24
Diffstat (limited to 'src/state/models/feeds/notifications.ts')
-rw-r--r-- | src/state/models/feeds/notifications.ts | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/src/state/models/feeds/notifications.ts b/src/state/models/feeds/notifications.ts index 220e04bce..02f58819f 100644 --- a/src/state/models/feeds/notifications.ts +++ b/src/state/models/feeds/notifications.ts @@ -15,6 +15,16 @@ import {bundleAsync} from 'lib/async/bundle' import {RootStoreModel} from '../root-store' import {PostThreadModel} from '../content/post-thread' import {cleanError} from 'lib/strings/errors' +import { + PostLabelInfo, + PostModeration, + ModerationBehaviorCode, +} from 'lib/labeling/types' +import { + getPostModeration, + filterAccountLabels, + filterProfileLabels, +} from 'lib/labeling/helpers' const GROUPABLE_REASONS = ['like', 'repost', 'follow'] const PAGE_SIZE = 30 @@ -90,6 +100,24 @@ export class NotificationsFeedItemModel { } } + get labelInfo(): PostLabelInfo { + const addedInfo = this.additionalPost?.thread?.labelInfo + return { + postLabels: (this.labels || []).concat(addedInfo?.postLabels || []), + accountLabels: filterAccountLabels(this.author.labels).concat( + addedInfo?.accountLabels || [], + ), + profileLabels: filterProfileLabels(this.author.labels).concat( + addedInfo?.profileLabels || [], + ), + isMuted: this.author.viewer?.muted || addedInfo?.isMuted || false, + } + } + + get moderation(): PostModeration { + return getPostModeration(this.rootStore, this.labelInfo) + } + get numUnreadInGroup(): number { if (this.additional?.length) { return ( @@ -520,16 +548,22 @@ export class NotificationsFeedModel { _filterNotifications( items: NotificationsFeedItemModel[], ): NotificationsFeedItemModel[] { - return items.filter(item => { - const hideByLabel = - this.rootStore.preferences.getLabelPreference(item.labels).pref === - 'hide' - let mutedThread = !!( - item.reasonSubjectRootUri && - this.rootStore.mutedThreads.uris.has(item.reasonSubjectRootUri) - ) - return !hideByLabel && !mutedThread - }) + return items + .filter(item => { + const hideByLabel = + item.moderation.list.behavior === ModerationBehaviorCode.Hide + let mutedThread = !!( + item.reasonSubjectRootUri && + this.rootStore.mutedThreads.uris.has(item.reasonSubjectRootUri) + ) + return !hideByLabel && !mutedThread + }) + .map(item => { + if (item.additional?.length) { + item.additional = this._filterNotifications(item.additional) + } + return item + }) } async _fetchItemModels( |