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