New onboarding (#241)
* delete old onboarding files and code * add custom FollowButton component to Post, FeedItem, & ProfileCard * move building suggested feed into helper lib * show suggested posts/feed if follower list is empty * Update tsconfig.json * add pagination to getting new onboarding * remove unnecessary console log * fix naming, add better null check for combinedCursor * In locally-combined feeds, correctly produce an undefined cursor when out of data * Minor refactors of the suggested posts lib functions * Show 'follow button' style of post meta in certain conditions only * Only show follow btn in posts on the main feed and the discovery feed * Add a welcome notice to the home feed * Tune the timing of when the welcome banner shows or hides * Make the follow button an observer (closes #244) * Update postmeta to keep the follow btn after press until next render * A couple of fixes that ensure consistent welcome screen * Fix lint * Rework the welcome banner * Fix cache invalidation of follows model on user switch * Show welcome banner while loading * Update the home onboarding feed to get top posts from hardcode recommends * Drop unused helper function * Update happy path tests --------- Co-authored-by: Paul Frazee <pfrazee@gmail.com>
This commit is contained in:
parent
9b46b2e6a9
commit
bd9386d81c
31 changed files with 426 additions and 866 deletions
|
@ -15,6 +15,12 @@ import {RootStoreModel} from './root-store'
|
|||
import * as apilib from 'lib/api/index'
|
||||
import {cleanError} from 'lib/strings/errors'
|
||||
import {RichText} from 'lib/strings/rich-text'
|
||||
import {SUGGESTED_FOLLOWS} from 'lib/constants'
|
||||
import {
|
||||
getCombinedCursors,
|
||||
getMultipleAuthorsPosts,
|
||||
mergePosts,
|
||||
} from 'lib/api/build-suggested-posts'
|
||||
|
||||
const PAGE_SIZE = 30
|
||||
|
||||
|
@ -535,11 +541,31 @@ export class FeedModel {
|
|||
}
|
||||
}
|
||||
|
||||
protected _getFeed(
|
||||
protected async _getFeed(
|
||||
params: GetTimeline.QueryParams | GetAuthorFeed.QueryParams = {},
|
||||
): Promise<GetTimeline.Response | GetAuthorFeed.Response> {
|
||||
params = Object.assign({}, this.params, params)
|
||||
if (this.feedType === 'home') {
|
||||
await this.rootStore.me.follows.fetchIfNeeded()
|
||||
if (this.rootStore.me.follows.isEmpty) {
|
||||
const responses = await getMultipleAuthorsPosts(
|
||||
this.rootStore,
|
||||
SUGGESTED_FOLLOWS(String(this.rootStore.agent.service)),
|
||||
params.before,
|
||||
20,
|
||||
)
|
||||
const combinedCursor = getCombinedCursors(responses)
|
||||
const finalData = mergePosts(responses, {bestOfOnly: true})
|
||||
const lastHeaders = responses[responses.length - 1].headers
|
||||
return {
|
||||
success: true,
|
||||
data: {
|
||||
feed: finalData,
|
||||
cursor: combinedCursor,
|
||||
},
|
||||
headers: lastHeaders,
|
||||
}
|
||||
}
|
||||
return this.rootStore.api.app.bsky.feed.getTimeline(
|
||||
params as GetTimeline.QueryParams,
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue