diff options
author | Samuel Newman <mozzius@protonmail.com> | 2024-09-16 21:37:33 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-16 21:37:33 +0100 |
commit | 8241747fc22bb4363ff6cf48d54013cc72db7624 (patch) | |
tree | e6cd31d82100fb9c99f3443d7b2753672b55373c /src/view/com/util/post-embeds/VideoVolumeContext.tsx | |
parent | 38c8f01594ff515fbe49d00a777d70449e804fd4 (diff) | |
download | voidsky-8241747fc22bb4363ff6cf48d54013cc72db7624.tar.zst |
[Video] Volume controls on web (#5363)
* split up VideoWebControls * add basic slider * logarithmic volume * integrate mute state * fix typo * shared video volume * rm log * animate in/out * disable for touch devices * remove flicker on touch devices * more detailed comment * move into correct context provider * add minHeight * hack * bettern umber --------- Co-authored-by: Hailey <me@haileyok.com>
Diffstat (limited to 'src/view/com/util/post-embeds/VideoVolumeContext.tsx')
-rw-r--r-- | src/view/com/util/post-embeds/VideoVolumeContext.tsx | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/src/view/com/util/post-embeds/VideoVolumeContext.tsx b/src/view/com/util/post-embeds/VideoVolumeContext.tsx index cccb93ba8..6343081da 100644 --- a/src/view/com/util/post-embeds/VideoVolumeContext.tsx +++ b/src/view/com/util/post-embeds/VideoVolumeContext.tsx @@ -1,21 +1,26 @@ import React from 'react' -const Context = React.createContext( - {} as { - muted: boolean - setMuted: (muted: boolean) => void - }, -) +const Context = React.createContext<{ + // native + muted: boolean + setMuted: React.Dispatch<React.SetStateAction<boolean>> + // web + volume: number + setVolume: React.Dispatch<React.SetStateAction<number>> +} | null>(null) export function Provider({children}: {children: React.ReactNode}) { const [muted, setMuted] = React.useState(true) + const [volume, setVolume] = React.useState(1) const value = React.useMemo( () => ({ muted, setMuted, + volume, + setVolume, }), - [muted, setMuted], + [muted, setMuted, volume, setVolume], ) return <Context.Provider value={value}>{children}</Context.Provider> @@ -28,5 +33,15 @@ export function useVideoVolumeState() { 'useVideoVolumeState must be used within a VideoVolumeProvider', ) } - return context + return [context.volume, context.setVolume] as const +} + +export function useVideoMuteState() { + const context = React.useContext(Context) + if (!context) { + throw new Error( + 'useVideoMuteState must be used within a VideoVolumeProvider', + ) + } + return [context.muted, context.setMuted] as const } |