FeedCard & ListCard cleanups (#4644)

* Extract ListCard from FeedCard

* Export FeedCard.Action and optionally include in ListCard

* Remove list dual usage from most of FeedCard

* Update usages of FeedCard and ListCard

* Add back list purpose logic

* Make Action comp easier to use, clarify list purpose

* Rename Action to SaveButton
This commit is contained in:
Eric Bailey 2024-06-28 08:27:54 -05:00 committed by GitHub
parent 58a97db5b8
commit 1a037d3542
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 198 additions and 97 deletions

View file

@ -163,7 +163,7 @@ export const ProfileFeedgens = React.forwardRef<
a.px_lg,
a.py_lg,
]}>
<FeedCard.Default type="feed" view={item} />
<FeedCard.Default view={item} />
</View>
)
}

View file

@ -18,7 +18,7 @@ import {useAnalytics} from 'lib/analytics/analytics'
import {FeedLoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder'
import {EmptyState} from 'view/com/util/EmptyState'
import {atoms as a, useTheme} from '#/alf'
import * as FeedCard from '#/components/FeedCard'
import * as ListCard from '#/components/ListCard'
import {ErrorMessage} from '../util/error/ErrorMessage'
import {List, ListRef} from '../util/List'
import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
@ -172,7 +172,7 @@ export const ProfileLists = React.forwardRef<SectionRef, ProfileListsProps>(
a.px_lg,
a.py_lg,
]}>
<FeedCard.Default type="list" view={item} />
<ListCard.Default view={item} />
</View>
)
},

View file

@ -41,6 +41,7 @@ import hairlineWidth = StyleSheet.hairlineWidth
import {Divider} from '#/components/Divider'
import * as FeedCard from '#/components/FeedCard'
import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '#/components/icons/Chevron'
import * as ListCard from '#/components/ListCard'
type Props = NativeStackScreenProps<CommonNavigatorParams, 'Feeds'>
@ -495,7 +496,7 @@ export function FeedsScreen(_props: Props) {
} else if (item.type === 'popularFeed') {
return (
<View style={[a.px_lg, a.pt_lg, a.gap_lg]}>
<FeedCard.Default type="feed" view={item.feed} />
<FeedCard.Default view={item.feed} />
<Divider />
</View>
)
@ -627,7 +628,7 @@ function FollowingFeed() {
fill={t.palette.white}
/>
</View>
<FeedCard.TitleAndByline title={_(msg`Following`)} type="feed" />
<FeedCard.TitleAndByline title={_(msg`Following`)} />
</FeedCard.Header>
</View>
)
@ -639,34 +640,45 @@ function SavedFeed({
savedFeed: SavedFeedItem & {type: 'feed' | 'list'}
}) {
const t = useTheme()
const {view: feed} = savedFeed
const displayName =
savedFeed.type === 'feed' ? savedFeed.view.displayName : savedFeed.view.name
return (
<FeedCard.Link testID={`saved-feed-${feed.displayName}`} {...savedFeed}>
const commonStyle = [
a.flex_1,
a.px_lg,
a.py_md,
a.border_b,
t.atoms.border_contrast_low,
]
return savedFeed.type === 'feed' ? (
<FeedCard.Link
testID={`saved-feed-${savedFeed.view.displayName}`}
{...savedFeed}>
{({hovered, pressed}) => (
<View
style={[
a.flex_1,
a.px_lg,
a.py_md,
a.border_b,
t.atoms.border_contrast_low,
(hovered || pressed) && t.atoms.bg_contrast_25,
]}>
style={[commonStyle, (hovered || pressed) && t.atoms.bg_contrast_25]}>
<FeedCard.Header>
<FeedCard.Avatar src={feed.avatar} size={28} />
<FeedCard.TitleAndByline
title={displayName}
type={savedFeed.type}
/>
<FeedCard.Avatar src={savedFeed.view.avatar} size={28} />
<FeedCard.TitleAndByline title={savedFeed.view.displayName} />
<ChevronRight size="sm" fill={t.atoms.text_contrast_low.color} />
</FeedCard.Header>
</View>
)}
</FeedCard.Link>
) : (
<ListCard.Link testID={`saved-feed-${savedFeed.view.name}`} {...savedFeed}>
{({hovered, pressed}) => (
<View
style={[commonStyle, (hovered || pressed) && t.atoms.bg_contrast_25]}>
<ListCard.Header>
<ListCard.Avatar src={savedFeed.view.avatar} size={28} />
<ListCard.TitleAndByline title={savedFeed.view.name} />
<ChevronRight size="sm" fill={t.atoms.text_contrast_low.color} />
</ListCard.Header>
</View>
)}
</ListCard.Link>
)
}

View file

@ -505,7 +505,7 @@ export function Explore() {
a.px_lg,
a.py_lg,
]}>
<FeedCard.Default type="feed" view={item.feed} />
<FeedCard.Default view={item.feed} />
</View>
)
}

View file

@ -306,7 +306,7 @@ let SearchScreenFeedsResults = ({
a.px_lg,
a.py_lg,
]}>
<FeedCard.Default type="feed" view={item} />
<FeedCard.Default view={item} />
</View>
)}
keyExtractor={item => item.uri}