diff options
author | Eric Bailey <git@esb.lol> | 2025-04-15 08:13:20 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-15 06:13:20 -0700 |
commit | f46336e34142e7f46bb1395f727e303e37b15d41 (patch) | |
tree | dac04a4abd8d100dc9c0d5c65ab7f75f1d3280eb /src/view/com/lists/ListMembers.tsx | |
parent | 32c2b69b848050975b698067383dd24f2754cab2 (diff) | |
download | voidsky-f46336e34142e7f46bb1395f727e303e37b15d41.tar.zst |
Replace old ProfileCard with new (#8195)
* Replace usages of old ProfileCard * Replace Pills with Labels component * Replace impl of ProfileCardWithFollowButton * Remove never-used LikesDialog * Handle missing mod opts * Add missing profile hover * use modern button in listmembers * remove follow button from muted accounts list --------- Co-authored-by: Samuel Newman <mozzius@protonmail.com>
Diffstat (limited to 'src/view/com/lists/ListMembers.tsx')
-rw-r--r-- | src/view/com/lists/ListMembers.tsx | 85 |
1 files changed, 52 insertions, 33 deletions
diff --git a/src/view/com/lists/ListMembers.tsx b/src/view/com/lists/ListMembers.tsx index da32c2d48..dc18cbe5d 100644 --- a/src/view/com/lists/ListMembers.tsx +++ b/src/view/com/lists/ListMembers.tsx @@ -1,22 +1,23 @@ import React, {useCallback} from 'react' import {Dimensions, type StyleProp, View, type ViewStyle} from 'react-native' import {type AppBskyGraphDefs} from '@atproto/api' -import {msg} from '@lingui/macro' +import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' -import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' import {cleanError} from '#/lib/strings/errors' import {logger} from '#/logger' import {useModalControls} from '#/state/modals' +import {useModerationOpts} from '#/state/preferences/moderation-opts' import {useListMembersQuery} from '#/state/queries/list-members' import {useSession} from '#/state/session' -import {ProfileCard} from '#/view/com/profile/ProfileCard' import {ErrorMessage} from '#/view/com/util/error/ErrorMessage' -import {Button} from '#/view/com/util/forms/Button' import {List, type ListRef} from '#/view/com/util/List' import {ProfileCardFeedLoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder' import {LoadMoreRetryBtn} from '#/view/com/util/LoadMoreRetryBtn' +import {atoms as a, useTheme} from '#/alf' +import {Button, ButtonText} from '#/components/Button' import {ListFooter} from '#/components/Lists' +import * as ProfileCard from '#/components/ProfileCard' import type * as bsky from '#/types/bsky' const LOADING_ITEM = {_reactKey: '__loading__'} @@ -47,11 +48,12 @@ export function ListMembers({ headerOffset?: number desktopFixedHeightOffset?: number }) { + const t = useTheme() const {_} = useLingui() const [isRefreshing, setIsRefreshing] = React.useState(false) - const {isMobile} = useWebMediaQueries() const {openModal} = useModalControls() const {currentAccount} = useSession() + const moderationOpts = useModerationOpts() const { data, @@ -131,23 +133,6 @@ export function ListMembers({ // rendering // = - const renderMemberButton = React.useCallback( - (profile: bsky.profile.AnyProfileView) => { - if (!isOwner) { - return null - } - return ( - <Button - testID={`user-${profile.handle}-editBtn`} - type="default" - label={_(msg({message: 'Edit', context: 'action'}))} - onPress={() => onPressEditMembership(profile)} - /> - ) - }, - [isOwner, onPressEditMembership, _], - ) - const renderItem = React.useCallback( ({item}: {item: any}) => { if (item === EMPTY_ITEM) { @@ -171,26 +156,60 @@ export function ListMembers({ } else if (item === LOADING_ITEM) { return <ProfileCardFeedLoadingPlaceholder /> } + + const profile = (item as AppBskyGraphDefs.ListItemView).subject + if (!moderationOpts) return null + return ( - <ProfileCard - testID={`user-${ - (item as AppBskyGraphDefs.ListItemView).subject.handle - }`} - profile={(item as AppBskyGraphDefs.ListItemView).subject} - renderButton={renderMemberButton} - style={{paddingHorizontal: isMobile ? 8 : 14, paddingVertical: 4}} - noModFilter - /> + <View + style={[a.py_md, a.px_xl, a.border_t, t.atoms.border_contrast_low]}> + <ProfileCard.Link profile={profile}> + <ProfileCard.Outer> + <ProfileCard.Header> + <ProfileCard.Avatar + profile={profile} + moderationOpts={moderationOpts} + /> + <ProfileCard.NameAndHandle + profile={profile} + moderationOpts={moderationOpts} + /> + {isOwner && ( + <Button + testID={`user-${profile.handle}-editBtn`} + label={_(msg({message: 'Edit', context: 'action'}))} + onPress={() => onPressEditMembership(profile)} + size="small" + variant="solid" + color="secondary"> + <ButtonText> + <Trans context="action">Edit</Trans> + </ButtonText> + </Button> + )} + </ProfileCard.Header> + + <ProfileCard.Labels + profile={profile} + moderationOpts={moderationOpts} + /> + + <ProfileCard.Description profile={profile} /> + </ProfileCard.Outer> + </ProfileCard.Link> + </View> ) }, [ - renderMemberButton, renderEmptyState, error, onPressTryAgain, onPressRetryLoadMore, - isMobile, + moderationOpts, + isOwner, + onPressEditMembership, _, + t, ], ) |