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