-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feed UI update working branch [WIP] (#1420)
* Feeds navigation on right side of desktop (#1403) * Remove home feed header on desktop * Add feeds to right sidebar * Add simple non-moving header to desktop * Improve loading state of custom feed header * Remove log Co-authored-by: Eric Bailey <[email protected]> * Remove dead comment --------- Co-authored-by: Eric Bailey <[email protected]> * Redesign feeds tab (#1439) * consolidate saved feeds and discover into one screen * Add hoverStyle behavior to <Link> * More UI work on SavedFeeds * Replace satellite icon with a hashtag * Tune My Feeds mobile ui * Handle no results in my feeds * Remove old DiscoverFeeds screen * Remove multifeed * Remove DiscoverFeeds from router * Improve loading placeholders * Small fixes * Fix types * Fix overflow issue on firefox * Add icons prompting to open feeds --------- Co-authored-by: Paul Frazee <[email protected]> * Merge feed prototype [WIP] (#1398) * POC WIP for the mergefeed * Add feed API wrapper and move mergefeed into it * Show feed source in mergefeed * Add lodash.random dep * Improve mergefeed sampling and reliability * Tune source ui element * Improve mergefeed edge condition handling * Remove in-place update of feeds for performance * Fix link on native * Fix bad ref * Improve variety in mergefeed sampling * Fix types * Fix rebase error * Add missing source field (got dropped in merge) * Update find more link * Simplify the right hand feeds nav * Bring back load latest button on desktop & unify impl * Add 'From' to source * Add simple headers to desktop home & notifications * Fix thread view jumping around horizontally * Add unread indicators to desktop headers * Add home feed preference for enabling the mergefeed * Add a preference for showing replies among followed users only (#1448) * Add a preference for showing replies among followed users only * Simplify the reply filter UI * Fix typo * Simplified custom feed header * Add soft reset to custom feed screen * Drop all the in-post translate links except when expanded (#1455) * Update mobile feed settings links to match desktop * Fixes to feeds screen loading states * Bolder active state of feeds tab on mobile web * Fix dark mode issue --------- Co-authored-by: Eric Bailey <[email protected]> Co-authored-by: Ansh <[email protected]>
- Loading branch information
1 parent
3118e3e
commit ea88533
Showing
57 changed files
with
1,884 additions
and
1,497 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
import { | ||
AppBskyFeedDefs, | ||
AppBskyFeedGetAuthorFeed as GetAuthorFeed, | ||
} from '@atproto/api' | ||
import {RootStoreModel} from 'state/index' | ||
import {FeedAPI, FeedAPIResponse} from './types' | ||
|
||
export class AuthorFeedAPI implements FeedAPI { | ||
cursor: string | undefined | ||
|
||
constructor( | ||
public rootStore: RootStoreModel, | ||
public params: GetAuthorFeed.QueryParams, | ||
) {} | ||
|
||
reset() { | ||
this.cursor = undefined | ||
} | ||
|
||
async peekLatest(): Promise<AppBskyFeedDefs.FeedViewPost> { | ||
const res = await this.rootStore.agent.getAuthorFeed({ | ||
...this.params, | ||
limit: 1, | ||
}) | ||
return res.data.feed[0] | ||
} | ||
|
||
async fetchNext({limit}: {limit: number}): Promise<FeedAPIResponse> { | ||
const res = await this.rootStore.agent.getAuthorFeed({ | ||
...this.params, | ||
cursor: this.cursor, | ||
limit, | ||
}) | ||
if (res.success) { | ||
this.cursor = res.data.cursor | ||
return { | ||
cursor: res.data.cursor, | ||
feed: res.data.feed, | ||
} | ||
} | ||
return { | ||
feed: [], | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import { | ||
AppBskyFeedDefs, | ||
AppBskyFeedGetFeed as GetCustomFeed, | ||
} from '@atproto/api' | ||
import {RootStoreModel} from 'state/index' | ||
import {FeedAPI, FeedAPIResponse} from './types' | ||
|
||
export class CustomFeedAPI implements FeedAPI { | ||
cursor: string | undefined | ||
|
||
constructor( | ||
public rootStore: RootStoreModel, | ||
public params: GetCustomFeed.QueryParams, | ||
) {} | ||
|
||
reset() { | ||
this.cursor = undefined | ||
} | ||
|
||
async peekLatest(): Promise<AppBskyFeedDefs.FeedViewPost> { | ||
const res = await this.rootStore.agent.app.bsky.feed.getFeed({ | ||
...this.params, | ||
limit: 1, | ||
}) | ||
return res.data.feed[0] | ||
} | ||
|
||
async fetchNext({limit}: {limit: number}): Promise<FeedAPIResponse> { | ||
const res = await this.rootStore.agent.app.bsky.feed.getFeed({ | ||
...this.params, | ||
cursor: this.cursor, | ||
limit, | ||
}) | ||
if (res.success) { | ||
this.cursor = res.data.cursor | ||
// NOTE | ||
// some custom feeds fail to enforce the pagination limit | ||
// so we manually truncate here | ||
// -prf | ||
if (res.data.feed.length > limit) { | ||
res.data.feed = res.data.feed.slice(0, limit) | ||
} | ||
return { | ||
cursor: res.data.cursor, | ||
feed: res.data.feed, | ||
} | ||
} | ||
return { | ||
feed: [], | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
import {AppBskyFeedDefs} from '@atproto/api' | ||
import {RootStoreModel} from 'state/index' | ||
import {FeedAPI, FeedAPIResponse} from './types' | ||
|
||
export class FollowingFeedAPI implements FeedAPI { | ||
cursor: string | undefined | ||
|
||
constructor(public rootStore: RootStoreModel) {} | ||
|
||
reset() { | ||
this.cursor = undefined | ||
} | ||
|
||
async peekLatest(): Promise<AppBskyFeedDefs.FeedViewPost> { | ||
const res = await this.rootStore.agent.getTimeline({ | ||
limit: 1, | ||
}) | ||
return res.data.feed[0] | ||
} | ||
|
||
async fetchNext({limit}: {limit: number}): Promise<FeedAPIResponse> { | ||
const res = await this.rootStore.agent.getTimeline({ | ||
cursor: this.cursor, | ||
limit, | ||
}) | ||
if (res.success) { | ||
this.cursor = res.data.cursor | ||
return { | ||
cursor: res.data.cursor, | ||
feed: res.data.feed, | ||
} | ||
} | ||
return { | ||
feed: [], | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
import { | ||
AppBskyFeedDefs, | ||
AppBskyFeedGetActorLikes as GetActorLikes, | ||
} from '@atproto/api' | ||
import {RootStoreModel} from 'state/index' | ||
import {FeedAPI, FeedAPIResponse} from './types' | ||
|
||
export class LikesFeedAPI implements FeedAPI { | ||
cursor: string | undefined | ||
|
||
constructor( | ||
public rootStore: RootStoreModel, | ||
public params: GetActorLikes.QueryParams, | ||
) {} | ||
|
||
reset() { | ||
this.cursor = undefined | ||
} | ||
|
||
async peekLatest(): Promise<AppBskyFeedDefs.FeedViewPost> { | ||
const res = await this.rootStore.agent.getActorLikes({ | ||
...this.params, | ||
limit: 1, | ||
}) | ||
return res.data.feed[0] | ||
} | ||
|
||
async fetchNext({limit}: {limit: number}): Promise<FeedAPIResponse> { | ||
const res = await this.rootStore.agent.getActorLikes({ | ||
...this.params, | ||
cursor: this.cursor, | ||
limit, | ||
}) | ||
if (res.success) { | ||
this.cursor = res.data.cursor | ||
return { | ||
cursor: res.data.cursor, | ||
feed: res.data.feed, | ||
} | ||
} | ||
return { | ||
feed: [], | ||
} | ||
} | ||
} |
Oops, something went wrong.