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
This commit is contained in:
Paul Frazee 2023-04-27 12:38:23 -05:00 committed by GitHub
parent 51be8474db
commit 1d50ddb378
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
40 changed files with 1195 additions and 763 deletions

View file

@ -47,15 +47,7 @@ export const PostLikedBy = observer(function ({uri}: {uri: string}) {
// loaded
// =
const renderItem = ({item}: {item: LikeItem}) => (
<ProfileCardWithFollowBtn
key={item.actor.did}
did={item.actor.did}
handle={item.actor.handle}
displayName={item.actor.displayName}
avatar={item.actor.avatar}
labels={item.actor.labels}
isFollowedBy={!!item.actor.viewer?.followedBy}
/>
<ProfileCardWithFollowBtn key={item.actor.did} profile={item.actor} />
)
return (
<FlatList

View file

@ -58,15 +58,7 @@ export const PostRepostedBy = observer(function PostRepostedBy({
// loaded
// =
const renderItem = ({item}: {item: RepostedByItem}) => (
<ProfileCardWithFollowBtn
key={item.did}
did={item.did}
handle={item.handle}
displayName={item.displayName}
avatar={item.avatar}
labels={item.labels}
isFollowedBy={!!item.viewer?.followedBy}
/>
<ProfileCardWithFollowBtn key={item.did} profile={item} />
)
return (
<FlatList

View file

@ -145,21 +145,17 @@ export const PostThreadItem = observer(function PostThreadItem({
if (item._isHighlightedPost) {
return (
<View
<PostHider
testID={`postThreadItem-by-${item.post.author.handle}`}
style={[
styles.outer,
styles.outerHighlighted,
{borderTopColor: pal.colors.border},
pal.view,
]}>
style={[styles.outer, styles.outerHighlighted, pal.border, pal.view]}
moderation={item.moderation.thread}>
<View style={styles.layout}>
<View style={styles.layoutAvi}>
<Link href={authorHref} title={authorTitle} asAnchor>
<UserAvatar
size={52}
avatar={item.post.author.avatar}
hasWarning={!!item.post.author.labels?.length}
moderation={item.moderation.avatar}
/>
</Link>
</View>
@ -218,9 +214,7 @@ export const PostThreadItem = observer(function PostThreadItem({
</View>
</View>
<View style={[s.pl10, s.pr10, s.pb10]}>
<ContentHider
isMuted={item.post.author.viewer?.muted === true}
labels={item.post.labels}>
<ContentHider moderation={item.moderation.view}>
{item.richText?.text ? (
<View
style={[
@ -300,7 +294,7 @@ export const PostThreadItem = observer(function PostThreadItem({
/>
</View>
</View>
</View>
</PostHider>
)
} else {
return (
@ -309,8 +303,7 @@ export const PostThreadItem = observer(function PostThreadItem({
testID={`postThreadItem-by-${item.post.author.handle}`}
href={itemHref}
style={[styles.outer, {borderColor: pal.colors.border}, pal.view]}
isMuted={item.post.author.viewer?.muted === true}
labels={item.post.labels}>
moderation={item.moderation.thread}>
{item._showParentReplyLine && (
<View
style={[
@ -333,7 +326,7 @@ export const PostThreadItem = observer(function PostThreadItem({
<UserAvatar
size={52}
avatar={item.post.author.avatar}
hasWarning={!!item.post.author.labels?.length}
moderation={item.moderation.avatar}
/>
</Link>
</View>
@ -347,7 +340,7 @@ export const PostThreadItem = observer(function PostThreadItem({
did={item.post.author.did}
/>
<ContentHider
labels={item.post.labels}
moderation={item.moderation.thread}
containerStyle={styles.contentHider}>
{item.richText?.text ? (
<View style={styles.postTextContainer}>