Server-side thread mutes (#4518)
* update atproto/api * move thread mutes to server side * rm log * move muted threads provider to inside did key * use map instead of object
This commit is contained in:
parent
35e54e24a0
commit
5f5d845053
13 changed files with 223 additions and 220 deletions
44
src/state/cache/thread-mutes.tsx
vendored
Normal file
44
src/state/cache/thread-mutes.tsx
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
import React from 'react'
|
||||
|
||||
type StateContext = Map<string, boolean>
|
||||
type SetStateContext = (uri: string, value: boolean) => void
|
||||
|
||||
const stateContext = React.createContext<StateContext>(new Map())
|
||||
const setStateContext = React.createContext<SetStateContext>(
|
||||
(_: string) => false,
|
||||
)
|
||||
|
||||
export function Provider({children}: React.PropsWithChildren<{}>) {
|
||||
const [state, setState] = React.useState<StateContext>(() => new Map())
|
||||
|
||||
const setThreadMute = React.useCallback(
|
||||
(uri: string, value: boolean) => {
|
||||
setState(prev => {
|
||||
const next = new Map(prev)
|
||||
next.set(uri, value)
|
||||
return next
|
||||
})
|
||||
},
|
||||
[setState],
|
||||
)
|
||||
return (
|
||||
<stateContext.Provider value={state}>
|
||||
<setStateContext.Provider value={setThreadMute}>
|
||||
{children}
|
||||
</setStateContext.Provider>
|
||||
</stateContext.Provider>
|
||||
)
|
||||
}
|
||||
|
||||
export function useMutedThreads() {
|
||||
return React.useContext(stateContext)
|
||||
}
|
||||
|
||||
export function useIsThreadMuted(uri: string, defaultValue = false) {
|
||||
const state = React.useContext(stateContext)
|
||||
return state.get(uri) ?? defaultValue
|
||||
}
|
||||
|
||||
export function useSetThreadMute() {
|
||||
return React.useContext(setStateContext)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue