mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at utm-source 83 lines 1.7 kB view raw
1import React from 'react' 2import {AppState} from 'react-native' 3 4import {MessagesEventBus} from '#/state/messages/events/agent' 5import {useAgent, useSession} from '#/state/session' 6 7const MessagesEventBusContext = React.createContext<MessagesEventBus | null>( 8 null, 9) 10 11export function useMessagesEventBus() { 12 const ctx = React.useContext(MessagesEventBusContext) 13 if (!ctx) { 14 throw new Error( 15 'useMessagesEventBus must be used within a MessagesEventBusProvider', 16 ) 17 } 18 return ctx 19} 20 21export function MessagesEventBusProvider({ 22 children, 23}: { 24 children: React.ReactNode 25}) { 26 const {currentAccount} = useSession() 27 28 if (!currentAccount) { 29 return ( 30 <MessagesEventBusContext.Provider value={null}> 31 {children} 32 </MessagesEventBusContext.Provider> 33 ) 34 } 35 36 return ( 37 <MessagesEventBusProviderInner>{children}</MessagesEventBusProviderInner> 38 ) 39} 40 41export function MessagesEventBusProviderInner({ 42 children, 43}: { 44 children: React.ReactNode 45}) { 46 const agent = useAgent() 47 const [bus] = React.useState( 48 () => 49 new MessagesEventBus({ 50 agent, 51 }), 52 ) 53 54 React.useEffect(() => { 55 bus.resume() 56 57 return () => { 58 bus.suspend() 59 } 60 }, [bus]) 61 62 React.useEffect(() => { 63 const handleAppStateChange = (nextAppState: string) => { 64 if (nextAppState === 'active') { 65 bus.resume() 66 } else { 67 bus.background() 68 } 69 } 70 71 const sub = AppState.addEventListener('change', handleAppStateChange) 72 73 return () => { 74 sub.remove() 75 } 76 }, [bus]) 77 78 return ( 79 <MessagesEventBusContext.Provider value={bus}> 80 {children} 81 </MessagesEventBusContext.Provider> 82 ) 83}