diff options
-rw-r--r-- | src/state/models/me.ts | 22 | ||||
-rw-r--r-- | src/view/com/composer/ComposePost.tsx | 1 | ||||
-rw-r--r-- | src/view/screens/Home.tsx | 35 |
3 files changed, 27 insertions, 31 deletions
diff --git a/src/state/models/me.ts b/src/state/models/me.ts index 0a2651af1..f41b07a6a 100644 --- a/src/state/models/me.ts +++ b/src/state/models/me.ts @@ -1,5 +1,6 @@ import {makeAutoObservable, runInAction} from 'mobx' import {RootStoreModel} from './root-store' +import {FeedModel} from './feed-view' import {MembershipsViewModel} from './memberships-view' import {NotificationsViewModel} from './notifications-view' import {isObj, hasProp} from '../lib/type-guards' @@ -12,6 +13,7 @@ export class MeModel { avatar: string = '' notificationCount: number = 0 memberships?: MembershipsViewModel + mainFeed: FeedModel notifications: NotificationsViewModel constructor(public rootStore: RootStoreModel) { @@ -20,6 +22,9 @@ export class MeModel { {rootStore: false, serialize: false, hydrate: false}, {autoBind: true}, ) + this.mainFeed = new FeedModel(this.rootStore, 'home', { + algorithm: 'reverse-chronological', + }) this.notifications = new NotificationsViewModel(this.rootStore, {}) } @@ -93,12 +98,17 @@ export class MeModel { this.memberships = new MembershipsViewModel(this.rootStore, { actor: this.did, }) - await this.memberships?.setup().catch(e => { - console.error('Failed to setup memberships model', e) - }) - await this.notifications.setup().catch(e => { - console.error('Failed to setup notifications model', e) - }) + await Promise.all([ + this.memberships?.setup().catch(e => { + console.error('Failed to setup memberships model', e) + }), + this.mainFeed.setup().catch(e => { + console.error('Failed to setup main feed model', e) + }), + this.notifications.setup().catch(e => { + console.error('Failed to setup notifications model', e) + }), + ]) } else { this.clear() } diff --git a/src/view/com/composer/ComposePost.tsx b/src/view/com/composer/ComposePost.tsx index fb21b9f9d..7f4de654c 100644 --- a/src/view/com/composer/ComposePost.tsx +++ b/src/view/com/composer/ComposePost.tsx @@ -121,6 +121,7 @@ export const ComposePost = observer(function ComposePost({ setIsProcessing(false) return } + store.me.mainFeed.loadLatest() onPost?.() onClose() Toast.show(`Your ${replyTo ? 'reply' : 'post'} has been published`) diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index 6ab555e82..c5d5ca616 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -27,23 +27,16 @@ export const Home = observer(function Home({ const {appState} = useAppState({ onForeground: () => doPoll(true), }) - const defaultFeedView = useMemo<FeedModel>( - () => - new FeedModel(store, 'home', { - algorithm: 'reverse-chronological', - }), - [store], - ) const doPoll = (knownActive = false) => { if ((!knownActive && appState !== 'active') || !visible) { return } - if (defaultFeedView.isLoading) { + if (store.me.mainFeed.isLoading) { return } console.log('Polling home feed') - defaultFeedView.checkForLatest().catch(e => { + store.me.mainFeed.checkForLatest().catch(e => { console.error('Failed to poll feed', e) }) } @@ -57,11 +50,11 @@ export const Home = observer(function Home({ if (hasSetup) { console.log('Updating home feed') - defaultFeedView.update() + store.me.mainFeed.update() } else { store.nav.setTitle(navIdx, 'Home') console.log('Fetching home feed') - defaultFeedView.setup().then(() => { + store.me.mainFeed.setup().then(() => { if (aborted) return setHasSetup(true) }) @@ -73,37 +66,29 @@ export const Home = observer(function Home({ }, [visible, store]) const onPressCompose = () => { - store.shell.openComposer({onPost: onCreatePost}) - } - const onCreatePost = () => { - defaultFeedView.loadLatest() + store.shell.openComposer({}) } const onPressTryAgain = () => { - defaultFeedView.refresh() + store.me.mainFeed.refresh() } const onPressLoadLatest = () => { - defaultFeedView.refresh() + store.me.mainFeed.refresh() scrollElRef?.current?.scrollToOffset({offset: 0}) } return ( <View style={s.flex1}> - <ViewHeader - title="Bluesky" - subtitle="Private Beta" - canGoBack={false} - onPost={onCreatePost} - /> + <ViewHeader title="Bluesky" subtitle="Private Beta" canGoBack={false} /> <Feed key="default" - feed={defaultFeedView} + feed={store.me.mainFeed} scrollElRef={scrollElRef} style={{flex: 1}} onPressCompose={onPressCompose} onPressTryAgain={onPressTryAgain} onScroll={onMainScroll} /> - {defaultFeedView.hasNewLatest ? ( + {store.me.mainFeed.hasNewLatest ? ( <TouchableOpacity style={[ styles.loadLatest, |