sanity
Version:
Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches
26 lines (19 loc) • 770 B
text/typescript
import {useContext, useMemo} from 'react'
import {useObservable} from 'react-rx'
import {EMPTY} from 'rxjs'
import {UserColorManagerContext} from 'sanity/_singletons'
import {type UserColor, type UserColorManager} from './types'
/** @internal */
export function useUserColorManager(): UserColorManager {
const userColorManager = useContext(UserColorManagerContext)
if (!userColorManager) {
throw new Error('UserColorManager: missing context value')
}
return userColorManager
}
/** @internal */
export function useUserColor(userId: string | null): UserColor {
const manager = useUserColorManager()
const observable = useMemo(() => (userId ? manager.listen(userId) : EMPTY), [manager, userId])
return useObservable(observable, manager.get(null))
}