diff options
Diffstat (limited to 'src/state/models')
-rw-r--r-- | src/state/models/content/list.ts | 2 | ||||
-rw-r--r-- | src/state/models/lists/lists-list.ts | 15 | ||||
-rw-r--r-- | src/state/models/root-store.ts | 8 | ||||
-rw-r--r-- | src/state/models/ui/profile.ts | 5 |
4 files changed, 29 insertions, 1 deletions
diff --git a/src/state/models/content/list.ts b/src/state/models/content/list.ts index c5ac72e49..2498cf581 100644 --- a/src/state/models/content/list.ts +++ b/src/state/models/content/list.ts @@ -217,6 +217,8 @@ export class ListModel { records.map(record => createDel(record.uri)), ), }) + + this.rootStore.emitListDeleted(this.uri) } async subscribe() { diff --git a/src/state/models/lists/lists-list.ts b/src/state/models/lists/lists-list.ts index 6618c3bf6..54e2f5fde 100644 --- a/src/state/models/lists/lists-list.ts +++ b/src/state/models/lists/lists-list.ts @@ -48,9 +48,24 @@ export class ListsListModel { return this.hasLoaded && !this.hasContent } + /** + * Removes posts from the feed upon deletion. + */ + onListDeleted(uri: string) { + this.lists = this.lists.filter(l => l.uri !== uri) + } + // public api // = + /** + * Register any event listeners. Returns a cleanup function. + */ + registerListeners() { + const sub = this.rootStore.onListDeleted(this.onListDeleted.bind(this)) + return () => sub.remove() + } + async refresh() { return this.loadMore(true) } diff --git a/src/state/models/root-store.ts b/src/state/models/root-store.ts index 389ce86d8..d76ea07c9 100644 --- a/src/state/models/root-store.ts +++ b/src/state/models/root-store.ts @@ -188,6 +188,14 @@ export class RootStoreModel { DeviceEventEmitter.emit('post-deleted', uri) } + // a list was deleted by the local user + onListDeleted(handler: (uri: string) => void): EmitterSubscription { + return DeviceEventEmitter.addListener('list-deleted', handler) + } + emitListDeleted(uri: string) { + DeviceEventEmitter.emit('list-deleted', uri) + } + // the session has started and been fully hydrated onSessionLoaded(handler: () => void): EmitterSubscription { return DeviceEventEmitter.addListener('session-loaded', handler) diff --git a/src/state/models/ui/profile.ts b/src/state/models/ui/profile.ts index 81daf797f..a0249d768 100644 --- a/src/state/models/ui/profile.ts +++ b/src/state/models/ui/profile.ts @@ -87,7 +87,10 @@ export class ProfileUiModel { } get selectedView() { - return this.selectorItems[this.selectedViewIndex] + // If, for whatever reason, the selected view index is not available, default back to posts + // This can happen when the user was focused on a view but performed an action that caused + // the view to disappear (e.g. deleting the last list in their list of lists https://imgflip.com/i/7txu1y) + return this.selectorItems[this.selectedViewIndex] || Sections.Posts } get uiItems() { |