about summary refs log tree commit diff
path: root/src/state/models/feeds
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/models/feeds')
-rw-r--r--src/state/models/feeds/algo/actor.ts (renamed from src/state/models/feeds/actor.ts)14
-rw-r--r--src/state/models/feeds/algo/algo-item.ts56
-rw-r--r--src/state/models/feeds/algo/saved.ts (renamed from src/state/models/feeds/bookmarked.ts)40
3 files changed, 74 insertions, 36 deletions
diff --git a/src/state/models/feeds/actor.ts b/src/state/models/feeds/algo/actor.ts
index 08b7c2a74..e42df8495 100644
--- a/src/state/models/feeds/actor.ts
+++ b/src/state/models/feeds/algo/actor.ts
@@ -1,11 +1,9 @@
 import {makeAutoObservable} from 'mobx'
-import {
-  AppBskyFeedDefs as FeedDefs,
-  AppBskyFeedGetActorFeeds as GetActorFeeds,
-} from '@atproto/api'
-import {RootStoreModel} from '../root-store'
+import {AppBskyFeedGetActorFeeds as GetActorFeeds} from '@atproto/api'
+import {RootStoreModel} from '../../root-store'
 import {bundleAsync} from 'lib/async/bundle'
 import {cleanError} from 'lib/strings/errors'
+import {AlgoItemModel} from './algo-item'
 
 const PAGE_SIZE = 30
 
@@ -19,7 +17,7 @@ export class ActorFeedsModel {
   loadMoreCursor?: string
 
   // data
-  feeds: FeedDefs.GeneratorView[] = []
+  feeds: AlgoItemModel[] = []
 
   constructor(
     public rootStore: RootStoreModel,
@@ -116,6 +114,8 @@ export class ActorFeedsModel {
   _appendAll(res: GetActorFeeds.Response) {
     this.loadMoreCursor = res.data.cursor
     this.hasMore = !!this.loadMoreCursor
-    this.feeds = this.feeds.concat(res.data.feeds)
+    for (const f of res.data.feeds) {
+      this.feeds.push(new AlgoItemModel(this.rootStore, f))
+    }
   }
 }
diff --git a/src/state/models/feeds/algo/algo-item.ts b/src/state/models/feeds/algo/algo-item.ts
new file mode 100644
index 000000000..555d1d56d
--- /dev/null
+++ b/src/state/models/feeds/algo/algo-item.ts
@@ -0,0 +1,56 @@
+import {AppBskyFeedDefs} from '@atproto/api'
+import {makeAutoObservable, makeObservable} from 'mobx'
+import {RootStoreModel} from 'state/models/root-store'
+
+// algoitemmodel implemented in mobx
+export class AlgoItemModel {
+  // data
+  data: AppBskyFeedDefs.GeneratorView
+
+  constructor(
+    public rootStore: RootStoreModel,
+    view: AppBskyFeedDefs.GeneratorView,
+  ) {
+    this.data = view
+    makeAutoObservable(
+      this,
+      {
+        rootStore: false,
+      },
+      {autoBind: true},
+    )
+  }
+
+  set toggleSaved(value: boolean) {
+    console.log('toggleSaved', this.data.viewer)
+    if (this.data.viewer) {
+      this.data.viewer.saved = value
+    }
+  }
+
+  async save() {
+    try {
+      // runInAction(() => {
+      this.toggleSaved = true
+      // })
+      const res = await this.rootStore.agent.app.bsky.feed.saveFeed({
+        feed: this.data.uri,
+      })
+    } catch (e: any) {
+      this.rootStore.log.error('Failed to save feed', e)
+    }
+  }
+
+  async unsave() {
+    try {
+      // runInAction(() => {
+      this.toggleSaved = false
+      // })
+      const res = await this.rootStore.agent.app.bsky.feed.unsaveFeed({
+        feed: this.data.uri,
+      })
+    } catch (e: any) {
+      this.rootStore.log.error('Failed to unsanve feed', e)
+    }
+  }
+}
diff --git a/src/state/models/feeds/bookmarked.ts b/src/state/models/feeds/algo/saved.ts
index d472f0480..fabb75ae0 100644
--- a/src/state/models/feeds/bookmarked.ts
+++ b/src/state/models/feeds/algo/saved.ts
@@ -1,17 +1,13 @@
 import {makeAutoObservable} from 'mobx'
-import {
-  AppBskyFeedGetBookmarkedFeeds as GetBookmarkedFeeds,
-  // AppBskyFeedBookmarkFeed as bookmarkedFeed,
-  // AppBskyFeedUnbookmarkFeed as unbookmarkFeed,
-  AppBskyFeedDefs as FeedDefs,
-} from '@atproto/api'
-import {RootStoreModel} from '../root-store'
+import {AppBskyFeedGetSavedFeeds as GetSavedFeeds} from '@atproto/api'
+import {RootStoreModel} from '../../root-store'
 import {bundleAsync} from 'lib/async/bundle'
 import {cleanError} from 'lib/strings/errors'
+import {AlgoItemModel} from './algo-item'
 
 const PAGE_SIZE = 30
 
-export class BookmarkedFeedsModel {
+export class SavedFeedsModel {
   // state
   isLoading = false
   isRefreshing = false
@@ -21,7 +17,7 @@ export class BookmarkedFeedsModel {
   loadMoreCursor?: string
 
   // data
-  feeds: FeedDefs.GeneratorView[] = []
+  feeds: AlgoItemModel[] = []
 
   constructor(public rootStore: RootStoreModel) {
     makeAutoObservable(
@@ -68,7 +64,7 @@ export class BookmarkedFeedsModel {
     }
     this._xLoading(replace)
     try {
-      const res = await this.rootStore.agent.app.bsky.feed.getBookmarkedFeeds({
+      const res = await this.rootStore.agent.app.bsky.feed.getSavedFeeds({
         limit: PAGE_SIZE,
         cursor: replace ? undefined : this.loadMoreCursor,
       })
@@ -83,22 +79,6 @@ export class BookmarkedFeedsModel {
     }
   })
 
-  async bookmark(feed: FeedDefs.GeneratorView) {
-    try {
-      await this.rootStore.agent.app.bsky.feed.bookmarkFeed({feed: feed.uri})
-    } catch (e: any) {
-      this.rootStore.log.error('Failed to bookmark feed', e)
-    }
-  }
-
-  async unbookmark(feed: FeedDefs.GeneratorView) {
-    try {
-      await this.rootStore.agent.app.bsky.feed.unbookmarkFeed({feed: feed.uri})
-    } catch (e: any) {
-      this.rootStore.log.error('Failed to unbookmark feed', e)
-    }
-  }
-
   // state transitions
   // =
 
@@ -121,14 +101,16 @@ export class BookmarkedFeedsModel {
   // helper functions
   // =
 
-  _replaceAll(res: GetBookmarkedFeeds.Response) {
+  _replaceAll(res: GetSavedFeeds.Response) {
     this.feeds = []
     this._appendAll(res)
   }
 
-  _appendAll(res: GetBookmarkedFeeds.Response) {
+  _appendAll(res: GetSavedFeeds.Response) {
     this.loadMoreCursor = res.data.cursor
     this.hasMore = !!this.loadMoreCursor
-    this.feeds = this.feeds.concat(res.data.feeds)
+    for (const f of res.data.feeds) {
+      this.feeds.push(new AlgoItemModel(f))
+    }
   }
 }