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 session-alignment 62 lines 1.6 kB view raw
1import React from 'react' 2import * as persisted from '#/state/persisted' 3import {track} from '#/lib/analytics/analytics' 4 5type StateContext = persisted.Schema['mutedThreads'] 6type ToggleContext = (uri: string) => boolean 7 8const stateContext = React.createContext<StateContext>( 9 persisted.defaults.mutedThreads, 10) 11const toggleContext = React.createContext<ToggleContext>((_: string) => false) 12 13export function Provider({children}: React.PropsWithChildren<{}>) { 14 const [state, setState] = React.useState(persisted.get('mutedThreads')) 15 16 const toggleThreadMute = React.useCallback( 17 (uri: string) => { 18 let muted = false 19 setState((arr: string[]) => { 20 if (arr.includes(uri)) { 21 arr = arr.filter(v => v !== uri) 22 muted = false 23 track('Post:ThreadUnmute') 24 } else { 25 arr = arr.concat([uri]) 26 muted = true 27 track('Post:ThreadMute') 28 } 29 persisted.write('mutedThreads', arr) 30 return arr 31 }) 32 return muted 33 }, 34 [setState], 35 ) 36 37 React.useEffect(() => { 38 return persisted.onUpdate(() => { 39 setState(persisted.get('mutedThreads')) 40 }) 41 }, [setState]) 42 43 return ( 44 <stateContext.Provider value={state}> 45 <toggleContext.Provider value={toggleThreadMute}> 46 {children} 47 </toggleContext.Provider> 48 </stateContext.Provider> 49 ) 50} 51 52export function useMutedThreads() { 53 return React.useContext(stateContext) 54} 55 56export function useToggleThreadMute() { 57 return React.useContext(toggleContext) 58} 59 60export function isThreadMuted(uri: string) { 61 return persisted.get('mutedThreads').includes(uri) 62}