1
+ import { Volume } from "src/lib/types" ;
2
+ import { useWebsocketContext } from "src/lib/utils/useWebsocketContext" ;
3
+ import { useButtonHeldHeartbeat } from "../useHeldButtonAction" ;
4
+ import { PressHoldReleaseReturn } from "../usePressHoldRelease" ;
5
+
6
+ export function useIBasicVolumeWithFeedback (
7
+ path : string , volumeState : Volume | undefined
8
+ ) : IBasicVolumeWithFeedbackReturn | undefined {
9
+ const { sendMessage, sendSimpleMessage } = useWebsocketContext ( ) ;
10
+
11
+ const volumeUp = useButtonHeldHeartbeat ( `${ path } ` , "volumeUp" ) ;
12
+ const volumeDown = useButtonHeldHeartbeat ( `${ path } ` , "volumeDown" ) ;
13
+
14
+ if ( ! volumeState ) return undefined ;
15
+
16
+ const setLevel = ( value : number ) =>
17
+ sendSimpleMessage ( `${ path } /level` , value ) ;
18
+
19
+ const muteToggle = ( ) => sendMessage ( `${ path } /muteToggle` , null ) ;
20
+
21
+ const muteOn = ( ) => sendMessage ( `${ path } /muteOn` , null ) ;
22
+
23
+ const muteOff = ( ) => sendMessage ( `${ path } /muteOff` , null ) ;
24
+
25
+ return {
26
+ volumeState,
27
+ volumeUp,
28
+ volumeDown,
29
+ setLevel,
30
+ muteToggle,
31
+ muteOn,
32
+ muteOff,
33
+ } ;
34
+ }
35
+
36
+ export interface IBasicVolumeWithFeedbackReturn {
37
+ volumeState : Volume ;
38
+ volumeUp : PressHoldReleaseReturn ;
39
+ volumeDown : PressHoldReleaseReturn ;
40
+ setLevel : ( level : number ) => void ;
41
+ muteToggle : ( ) => void ;
42
+ muteOn : ( ) => void ;
43
+ muteOff : ( ) => void ;
44
+ }
45
+
46
+ export function useGetIBasicVolumeWithFeedback (
47
+ path : string , volumeState : Volume | undefined
48
+ ) : IBasicVolumeWithFeedbackReturn | undefined {
49
+ const { sendMessage, sendSimpleMessage } = useWebsocketContext ( ) ;
50
+
51
+ const volumeUp = useButtonHeldHeartbeat ( `${ path } ` , "volumeUp" ) ;
52
+ const volumeDown = useButtonHeldHeartbeat ( `${ path } ` , "volumeDown" ) ;
53
+
54
+ if ( ! volumeState ) return undefined ;
55
+
56
+ const setLevel = ( value : number ) =>
57
+ sendSimpleMessage ( `${ path } /level` , value ) ;
58
+
59
+ const muteToggle = ( ) => sendMessage ( `${ path } /muteToggle` , null ) ;
60
+
61
+ const muteOn = ( ) => sendMessage ( `${ path } /muteOn` , null ) ;
62
+
63
+ const muteOff = ( ) => sendMessage ( `${ path } /muteOff` , null ) ;
64
+
65
+ return {
66
+ volumeState,
67
+ volumeUp,
68
+ volumeDown,
69
+ setLevel,
70
+ muteToggle,
71
+ muteOn,
72
+ muteOff,
73
+ } ;
74
+ }
0 commit comments