diff --git a/src/lib/shared/hooks/index.ts b/src/lib/shared/hooks/index.ts index 45bb5a3..f6bad36 100644 --- a/src/lib/shared/hooks/index.ts +++ b/src/lib/shared/hooks/index.ts @@ -1,9 +1,10 @@ export * from "./interfaces"; export * from "./useDeviceIBasicVolumeWithFeedback"; export * from "./useGetDeviceStateFromRoomConfiguration"; +export * from "./useHeldButtonAction"; +export * from "./useOverflow"; export * from "./usePressHoldRelease"; export * from "./useRoomIBasicVolumeWithFeedback"; +export * from "./useScroll"; export * from "./useSystemControl"; export * from "./useTimeAndDate"; -export * from "./useOverflow"; -export * from "./useScroll"; \ No newline at end of file diff --git a/src/lib/shared/hooks/interfaces/useCameraBase.ts b/src/lib/shared/hooks/interfaces/useCameraBase.ts new file mode 100644 index 0000000..dc05c18 --- /dev/null +++ b/src/lib/shared/hooks/interfaces/useCameraBase.ts @@ -0,0 +1,35 @@ +import { CameraState, PressHoldReleaseReturn, useGetDevice, useWebsocketContext } from 'src/lib'; +import { useButtonHeldHeartbeat } from '../useHeldButtonAction'; + + +export function useCameraBase(key: string): CameraBaseProps | undefined{ + const { sendMessage } = useWebsocketContext(); + const path = `/device/${key}`; + const cameraState = useGetDevice(key); + + + const up = useButtonHeldHeartbeat(path, 'cameraUp'); + const down = useButtonHeldHeartbeat(path, 'cameraDown'); + const left = useButtonHeldHeartbeat(path, 'cameraLeft'); + const right = useButtonHeldHeartbeat(path, 'cameraRight'); + const zoomIn = useButtonHeldHeartbeat(path, 'cameraZoomIn'); + const zoomOut = useButtonHeldHeartbeat(path, 'cameraZoomOut'); + + const recallPreset = (presetNumber: number) => sendMessage('/camera/recallPreset', presetNumber); + + + if(!cameraState) return undefined; + + return { state: cameraState, zoomIn, zoomOut, up, down, left, right, recallPreset}; +} + +export interface CameraBaseProps { + state: CameraState; + zoomIn: PressHoldReleaseReturn; + zoomOut: PressHoldReleaseReturn; + up: PressHoldReleaseReturn; + down: PressHoldReleaseReturn; + left: PressHoldReleaseReturn; + right: PressHoldReleaseReturn; + recallPreset: (presetNumber: number) => void; +} \ No newline at end of file diff --git a/src/lib/types/state/CameraListItem.ts b/src/lib/types/state/CameraListItem.ts new file mode 100644 index 0000000..c6c1fa3 --- /dev/null +++ b/src/lib/types/state/CameraListItem.ts @@ -0,0 +1,11 @@ +import { IconNames } from 'src/lib/shared/Icons/iconsDictionary'; + +export interface CameraListItem { + deviceKey: string; + name: string; + preferredName: string; + icon: IconNames; + altIcon: IconNames; + includeInUserList: boolean; + order: number; +} \ No newline at end of file diff --git a/src/lib/types/state/state/RoomState.ts b/src/lib/types/state/state/RoomState.ts index b59cf73..fb43d30 100644 --- a/src/lib/types/state/state/RoomState.ts +++ b/src/lib/types/state/state/RoomState.ts @@ -1,6 +1,7 @@ /* eslint-disable max-classes-per-file */ import { PresetListItem } from '..'; +import { CameraListItem } from '../CameraListItem'; import { DestinationListItem } from '../DestinationListItem'; import { LevelControlListItem } from '../LevelControlListItem'; import { SourceListItem } from '../sourceListItem'; @@ -27,6 +28,8 @@ export interface RoomState extends DeviceState{ export interface RoomConfiguration { accessoryDeviceKeys?: string[]; audioCodecKey?: string; + audioControlPointList: AudioControlPointListItem; + cameraList?: Record; ciscoNavigatorKey?: string; defaultDisplayKey?: string; defaultPresentationSourceKey: string; @@ -38,7 +41,6 @@ export interface RoomConfiguration { hasEnvironmentalControls?: boolean; hasVideoConferencing?: boolean; helpMessage?: string; - audioControlPointList: AudioControlPointListItem; matrixRoutingKey?: string; roomCombinerKey?: string; sourceList: Record;