forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
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}