diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-05-17 14:55:04 -0500 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2023-05-17 14:55:04 -0500 |
commit | 2fd3b4ca04622836ad2a65ec8992fd429ecd9fed (patch) | |
tree | e7e7aa1b8f16e0e35fb52df6a3f907d443efc123 /src | |
parent | 9c02fbb925290b9f147e1622f4f41f5a956dce5c (diff) | |
download | voidsky-2fd3b4ca04622836ad2a65ec8992fd429ecd9fed.tar.zst |
Clean up the custom-feed model
Diffstat (limited to 'src')
-rw-r--r-- | src/state/models/feeds/custom-feed.ts | 115 | ||||
-rw-r--r-- | src/state/models/ui/saved-feeds.ts | 14 | ||||
-rw-r--r-- | src/view/com/util/UserAvatar.tsx | 2 | ||||
-rw-r--r-- | src/view/com/util/post-embeds/index.tsx | 1 | ||||
-rw-r--r-- | src/view/screens/Home.tsx | 2 |
5 files changed, 45 insertions, 89 deletions
diff --git a/src/state/models/feeds/custom-feed.ts b/src/state/models/feeds/custom-feed.ts index e60ac2740..5e550ec69 100644 --- a/src/state/models/feeds/custom-feed.ts +++ b/src/state/models/feeds/custom-feed.ts @@ -1,5 +1,5 @@ -import {AppBskyFeedDefs, AtUri} from '@atproto/api' -import {makeAutoObservable} from 'mobx' +import {AppBskyFeedDefs} from '@atproto/api' +import {makeAutoObservable, runInAction} from 'mobx' import {RootStoreModel} from 'state/models/root-store' import {sanitizeDisplayName} from 'lib/strings/display-names' @@ -25,13 +25,8 @@ export class CustomFeedModel { // local actions // = - set toggleSaved(value: boolean) { - if (this.data.viewer) { - this.data.viewer.saved = value - } - } - get getUri() { + get uri() { return this.data.uri } @@ -50,99 +45,65 @@ export class CustomFeedModel { return this.data.viewer?.like } - private toggleLiked(s?: string) { - if (this.data.viewer) { - if (this.data.viewer.like) { - this.data.viewer.like = undefined - } else { - this.data.viewer.like = s - } - } - } - - private incrementLike() { - if (this.data.likeCount) { - this.data.likeCount += 1 - } else { - this.data.likeCount = 1 - } - } + // public apis + // = - private decrementLike() { - if (this.data.likeCount) { - this.data.likeCount -= 1 - } else { - this.data.likeCount = 0 - } + async save() { + await this.rootStore.agent.app.bsky.feed.saveFeed({ + feed: this.uri, + }) + runInAction(() => { + this.data.viewer = this.data.viewer || {} + this.data.viewer.saved = true + }) } - private rewriteData(data: AppBskyFeedDefs.GeneratorView) { - this.data = data + async unsave() { + await this.rootStore.agent.app.bsky.feed.unsaveFeed({ + feed: this.uri, + }) + runInAction(() => { + this.data.viewer = this.data.viewer || {} + this.data.viewer.saved = false + }) } - // public apis - // = async like() { try { - const res = await this.rootStore.agent.app.bsky.feed.like.create( - { - repo: this.rootStore.me.did, - }, - { - subject: { - uri: this.data.uri, - cid: this.data.cid, - }, - createdAt: new Date().toISOString(), - }, - ) - this.toggleLiked(res.uri) - this.incrementLike() + const res = await this.rootStore.agent.like(this.data.uri, this.data.cid) + runInAction(() => { + this.data.viewer = this.data.viewer || {} + this.data.viewer.like = res.uri + this.data.likeCount = (this.data.likeCount || 0) + 1 + }) } catch (e: any) { this.rootStore.log.error('Failed to like feed', e) } } async unlike() { + if (!this.data.viewer.like) { + return + } try { - await this.rootStore.agent.app.bsky.feed.like.delete({ - repo: this.rootStore.me.did, - rkey: new AtUri(this.data.viewer?.like!).rkey, + await this.rootStore.agent.deleteLike(this.data.viewer.like!) + runInAction(() => { + this.data.viewer = this.data.viewer || {} + this.data.viewer.like = undefined + this.data.likeCount = (this.data.likeCount || 1) - 1 }) - this.toggleLiked() - this.decrementLike() } catch (e: any) { this.rootStore.log.error('Failed to unlike feed', e) } } - static async getView(store: RootStoreModel, uri: string) { - const res = await store.agent.app.bsky.feed.getFeedGenerator({ - feed: uri, - }) - const view = res.data.view - return view - } - - async checkIsValid() { - const res = await this.rootStore.agent.app.bsky.feed.getFeedGenerator({ - feed: this.data.uri, - }) - return res.data.isValid - } - - async checkIsOnline() { - const res = await this.rootStore.agent.app.bsky.feed.getFeedGenerator({ - feed: this.data.uri, - }) - return res.data.isOnline - } - async reload() { const res = await this.rootStore.agent.app.bsky.feed.getFeedGenerator({ feed: this.data.uri, }) - this.rewriteData(res.data.view) + runInAction(() => { + this.data = res.data.view + }) } serialize() { diff --git a/src/state/models/ui/saved-feeds.ts b/src/state/models/ui/saved-feeds.ts index 85e77cae5..dca079b72 100644 --- a/src/state/models/ui/saved-feeds.ts +++ b/src/state/models/ui/saved-feeds.ts @@ -184,10 +184,7 @@ export class SavedFeedsModel { async save(algoItem: CustomFeedModel) { try { - await this.rootStore.agent.app.bsky.feed.saveFeed({ - feed: algoItem.getUri, - }) - algoItem.toggleSaved = true + await algoItem.save() this.addFeed(algoItem) } catch (e: any) { this.rootStore.log.error('Failed to save feed', e) @@ -195,16 +192,13 @@ export class SavedFeedsModel { } async unsave(algoItem: CustomFeedModel) { - const uri = algoItem.getUri + const uri = algoItem.uri try { - await this.rootStore.agent.app.bsky.feed.unsaveFeed({ - feed: uri, - }) - algoItem.toggleSaved = false + await algoItem.unsave() this.removeFeed(uri) this.removePinnedFeed(uri) } catch (e: any) { - this.rootStore.log.error('Failed to unsanve feed', e) + this.rootStore.log.error('Failed to unsave feed', e) } } diff --git a/src/view/com/util/UserAvatar.tsx b/src/view/com/util/UserAvatar.tsx index 10a605b25..1e3690fbd 100644 --- a/src/view/com/util/UserAvatar.tsx +++ b/src/view/com/util/UserAvatar.tsx @@ -188,7 +188,7 @@ export function UserAvatar({ accessibilityRole="image" /> ) : ( - <DefaultAvatar size={size} /> + <DefaultAvatar type={type} size={size} /> )} <View style={[styles.editButtonContainer, pal.btn]}> <FontAwesomeIcon diff --git a/src/view/com/util/post-embeds/index.tsx b/src/view/com/util/post-embeds/index.tsx index ed2f8feba..01d26db91 100644 --- a/src/view/com/util/post-embeds/index.tsx +++ b/src/view/com/util/post-embeds/index.tsx @@ -170,6 +170,7 @@ export function PostEmbeds({ AppBskyEmbedRecord.isView(embed) && AppBskyFeedDefs.isGeneratorView(embed.record) ) { + // TODO memoize this? return ( <CustomFeed item={new CustomFeedModel(store, embed.record)} diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index 1457478d5..70816a306 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -118,7 +118,7 @@ export const HomeScreen = withAuthRequired( key={String(2 + index + 1)} testID="customFeed" isPageFocused={selectedPage === 2 + index} - feed={new PostsFeedModel(store, 'custom', {feed: f.getUri})} + feed={new PostsFeedModel(store, 'custom', {feed: f.uri})} renderEmptyState={renderFollowingEmptyState} /> ) |