Bluesky app fork with some witchin' additions 馃挮
0
fork

Configure Feed

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

at main 49 lines 1.2 kB view raw
1import {createContext, useContext, useMemo, useState} from 'react' 2 3import {device, useStorage} from '#/storage' 4 5const Context = createContext<{ 6 muted: boolean 7 setMuted: (v: boolean) => void 8 // web 9 volume: number 10 setVolume: (v: number) => void 11} | null>(null) 12Context.displayName = 'VideoVolumeContext' 13 14export function Provider({children}: {children: React.ReactNode}) { 15 const [muted, setMuted] = useState(true) 16 const [volume = 1, setVolume] = useStorage(device, ['videoVolume']) 17 18 const value = useMemo( 19 () => ({ 20 muted, 21 setMuted, 22 volume, 23 setVolume, 24 }), 25 [muted, setMuted, volume, setVolume], 26 ) 27 28 return <Context.Provider value={value}>{children}</Context.Provider> 29} 30 31export function useVideoVolumeState() { 32 const context = useContext(Context) 33 if (!context) { 34 throw new Error( 35 'useVideoVolumeState must be used within a VideoVolumeProvider', 36 ) 37 } 38 return [context.volume, context.setVolume] as const 39} 40 41export function useVideoMuteState() { 42 const context = useContext(Context) 43 if (!context) { 44 throw new Error( 45 'useVideoMuteState must be used within a VideoVolumeProvider', 46 ) 47 } 48 return [context.muted, context.setMuted] as const 49}