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