Handle post deletions by removing from active views (close #37)
This commit is contained in:
parent
ace0e6bfd9
commit
ebc2033d18
7 changed files with 59 additions and 4 deletions
|
@ -166,6 +166,7 @@ export class FeedItemModel {
|
|||
did: this.post.author.did,
|
||||
rkey: new AtUri(this.post.uri).rkey,
|
||||
})
|
||||
this.rootStore.emitPostDeleted(this.post.uri)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -255,6 +256,14 @@ export class FeedModel {
|
|||
this._loadPromise = undefined
|
||||
}
|
||||
|
||||
/**
|
||||
* Register any event listeners. Returns a cleanup function.
|
||||
*/
|
||||
registerListeners() {
|
||||
const sub = this.rootStore.onPostDeleted(this.onPostDeleted.bind(this))
|
||||
return () => sub.remove()
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset and load
|
||||
*/
|
||||
|
@ -303,7 +312,7 @@ export class FeedModel {
|
|||
}
|
||||
|
||||
/**
|
||||
* Check if new postrs are available
|
||||
* Check if new posts are available
|
||||
*/
|
||||
async checkForLatest() {
|
||||
if (this.hasNewLatest) {
|
||||
|
@ -322,6 +331,20 @@ export class FeedModel {
|
|||
this.setHasNewLatest(hasNewLatest)
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes posts from the feed upon deletion.
|
||||
*/
|
||||
onPostDeleted(uri: string) {
|
||||
console.log('hit', uri)
|
||||
let i
|
||||
do {
|
||||
i = this.feed.findIndex(item => item.post.uri === uri)
|
||||
if (i !== -1) {
|
||||
this.feed.splice(i, 1)
|
||||
}
|
||||
} while (i !== -1)
|
||||
}
|
||||
|
||||
// state transitions
|
||||
// =
|
||||
|
||||
|
|
|
@ -173,6 +173,7 @@ export class PostThreadViewPostModel {
|
|||
did: this.post.author.did,
|
||||
rkey: new AtUri(this.post.uri).rkey,
|
||||
})
|
||||
this.rootStore.emitPostDeleted(this.post.uri)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -229,6 +230,14 @@ export class PostThreadViewModel {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register any event listeners. Returns a cleanup function.
|
||||
*/
|
||||
registerListeners() {
|
||||
const sub = this.rootStore.onPostDeleted(this.onPostDeleted.bind(this))
|
||||
return () => sub.remove()
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset and load
|
||||
*/
|
||||
|
@ -246,6 +255,13 @@ export class PostThreadViewModel {
|
|||
this._load()
|
||||
}
|
||||
|
||||
/**
|
||||
* Refreshes when posts are deleted
|
||||
*/
|
||||
onPostDeleted(_uri: string) {
|
||||
this.refresh()
|
||||
}
|
||||
|
||||
// state transitions
|
||||
// =
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
import {makeAutoObservable} from 'mobx'
|
||||
import {sessionClient as AtpApi, SessionServiceClient} from '@atproto/api'
|
||||
import {createContext, useContext} from 'react'
|
||||
import {DeviceEventEmitter, EmitterSubscription} from 'react-native'
|
||||
import {isObj, hasProp} from '../lib/type-guards'
|
||||
import {LogModel} from './log'
|
||||
import {SessionModel} from './session'
|
||||
|
@ -102,6 +103,15 @@ export class RootStoreModel {
|
|||
this.nav.clear()
|
||||
this.me.clear()
|
||||
}
|
||||
|
||||
onPostDeleted(handler: (uri: string) => void): EmitterSubscription {
|
||||
return DeviceEventEmitter.addListener('post-deleted', handler)
|
||||
}
|
||||
|
||||
emitPostDeleted(uri: string) {
|
||||
console.log('emit')
|
||||
DeviceEventEmitter.emit('post-deleted', uri)
|
||||
}
|
||||
}
|
||||
|
||||
const throwawayInst = new RootStoreModel(AtpApi.service('http://localhost')) // this will be replaced by the loader, we just need to supply a value at init
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue