diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-08-22 10:50:45 -0700 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2023-08-22 10:50:45 -0700 |
commit | fb1199e21dc90755e16cd4e31a95e63356ecf6f6 (patch) | |
tree | 7efcedd04c8559f5a7b127a108db582574ff53b8 /src | |
parent | 0a50df1cce35939426de4d20eff49b1ccaca0a6e (diff) | |
parent | 13c11801b90b3241eb1244badedf7c510578d6f0 (diff) | |
download | voidsky-fb1199e21dc90755e16cd4e31a95e63356ecf6f6.tar.zst |
Merge branch 'main' of github.com:bluesky-social/social-app into main
Diffstat (limited to 'src')
-rw-r--r-- | src/state/models/feeds/posts.ts | 16 | ||||
-rw-r--r-- | src/state/models/ui/profile.ts | 17 | ||||
-rw-r--r-- | src/view/com/post-thread/PostThread.tsx | 15 | ||||
-rw-r--r-- | src/view/com/post-thread/PostThreadItem.tsx | 9 |
4 files changed, 44 insertions, 13 deletions
diff --git a/src/state/models/feeds/posts.ts b/src/state/models/feeds/posts.ts index 6facc27ad..93add8102 100644 --- a/src/state/models/feeds/posts.ts +++ b/src/state/models/feeds/posts.ts @@ -11,9 +11,18 @@ import {cleanError} from 'lib/strings/errors' import {FeedTuner} from 'lib/api/feed-manip' import {PostsFeedSliceModel} from './posts-slice' import {track} from 'lib/analytics/analytics' +import {FeedViewPostsSlice} from 'lib/api/feed-manip' const PAGE_SIZE = 30 +type Options = { + /** + * Formats the feed in a flat array with no threading of replies, just + * top-level posts. + */ + isSimpleFeed?: boolean +} + type QueryParams = | GetTimeline.QueryParams | GetAuthorFeed.QueryParams @@ -35,6 +44,7 @@ export class PostsFeedModel { pollCursor: string | undefined tuner = new FeedTuner() pageSize = PAGE_SIZE + options: Options = {} // used to linearize async modifications to state lock = new AwaitLock() @@ -49,6 +59,7 @@ export class PostsFeedModel { public rootStore: RootStoreModel, public feedType: 'home' | 'author' | 'custom', params: QueryParams, + options?: Options, ) { makeAutoObservable( this, @@ -60,6 +71,7 @@ export class PostsFeedModel { {autoBind: true}, ) this.params = params + this.options = options || {} } get hasContent() { @@ -354,7 +366,9 @@ export class PostsFeedModel { this.rootStore.posts.fromFeedItem(item) } - const slices = this.tuner.tune(res.data.feed, this.feedTuners) + const slices = this.options.isSimpleFeed + ? res.data.feed.map(item => new FeedViewPostsSlice([item])) + : this.tuner.tune(res.data.feed, this.feedTuners) const toAppend: PostsFeedSliceModel[] = [] for (const slice of slices) { diff --git a/src/state/models/ui/profile.ts b/src/state/models/ui/profile.ts index 9dae09ec5..e026a27fc 100644 --- a/src/state/models/ui/profile.ts +++ b/src/state/models/ui/profile.ts @@ -176,11 +176,18 @@ export class ProfileUiModel { filter = 'posts_with_media' } - this.feed = new PostsFeedModel(this.rootStore, 'author', { - actor: this.params.user, - limit: 10, - filter, - }) + this.feed = new PostsFeedModel( + this.rootStore, + 'author', + { + actor: this.params.user, + limit: 10, + filter, + }, + { + isSimpleFeed: ['posts_with_media'].includes(filter), + }, + ) if (this.currentView instanceof PostsFeedModel) { this.feed.setup() diff --git a/src/view/com/post-thread/PostThread.tsx b/src/view/com/post-thread/PostThread.tsx index 399e47006..e3dd2cf1d 100644 --- a/src/view/com/post-thread/PostThread.tsx +++ b/src/view/com/post-thread/PostThread.tsx @@ -156,7 +156,7 @@ export const PostThread = observer(function PostThread({ }, [navigation]) const renderItem = React.useCallback( - ({item}: {item: YieldedItem}) => { + ({item, index}: {item: YieldedItem; index: number}) => { if (item === PARENT_SPINNER) { return ( <View style={styles.parentSpinner}> @@ -205,11 +205,20 @@ export const PostThread = observer(function PostThread({ </View> ) } else if (item instanceof PostThreadItemModel) { - return <PostThreadItem item={item} onPostReply={onRefresh} /> + const prev = ( + index - 1 >= 0 ? posts[index - 1] : undefined + ) as PostThreadItemModel + return ( + <PostThreadItem + item={item} + onPostReply={onRefresh} + hasPrecedingItem={prev?._showChildReplyLine} + /> + ) } return <></> }, - [onRefresh, onPressReply, pal], + [onRefresh, onPressReply, pal, posts], ) // loading diff --git a/src/view/com/post-thread/PostThreadItem.tsx b/src/view/com/post-thread/PostThreadItem.tsx index 8a56012f0..e44151ac5 100644 --- a/src/view/com/post-thread/PostThreadItem.tsx +++ b/src/view/com/post-thread/PostThreadItem.tsx @@ -38,9 +38,11 @@ import {isDesktopWeb} from 'platform/detection' export const PostThreadItem = observer(function PostThreadItem({ item, onPostReply, + hasPrecedingItem, }: { item: PostThreadItemModel onPostReply: () => void + hasPrecedingItem: boolean }) { const pal = usePalette('default') const store = useStores() @@ -359,8 +361,7 @@ export const PostThreadItem = observer(function PostThreadItem({ styles.outer, pal.border, pal.view, - item._showParentReplyLine && styles.noTopBorder, - !item._showChildReplyLine && {borderBottomWidth: 1}, + item._showParentReplyLine && hasPrecedingItem && styles.noTopBorder, ]} moderation={item.moderation.content}> <PostSandboxWarning /> @@ -483,7 +484,7 @@ export const PostThreadItem = observer(function PostThreadItem({ <Link style={[ styles.loadMore, - {borderBottomColor: pal.colors.border}, + {borderTopColor: pal.colors.border}, pal.view, ]} href={itemHref} @@ -600,7 +601,7 @@ const styles = StyleSheet.create({ loadMore: { flexDirection: 'row', justifyContent: 'space-between', - borderBottomWidth: 1, + borderTopWidth: 1, paddingLeft: 80, paddingRight: 20, paddingVertical: 12, |