36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
'use client';
|
|
|
|
import React from 'react';
|
|
import { Track } from 'livekit-client';
|
|
import { useLocalParticipant, useTrackToggle } from '@livekit/components-react';
|
|
|
|
export function KeyboardShortcuts() {
|
|
const _ = useLocalParticipant();
|
|
const { toggle: toggleMic, enabled: micEnabled } = useTrackToggle({ source: Track.Source.Microphone });
|
|
const { toggle: toggleCamera, enabled: cameraEnabled } = useTrackToggle({ source: Track.Source.Camera });
|
|
|
|
React.useEffect(() => {
|
|
function handleShortcut(event: KeyboardEvent) {
|
|
// Toggle microphone: Cmd/Ctrl-Shift-A
|
|
if (toggleMic && event.key === 'A' && (event.ctrlKey || event.metaKey)) {
|
|
event.preventDefault();
|
|
toggleMic(!micEnabled, true);
|
|
}
|
|
|
|
// Toggle camera: Cmd/Ctrl-Shift-V
|
|
if (event.key === 'V' && (event.ctrlKey || event.metaKey)) {
|
|
event.preventDefault();
|
|
toggleCamera(!cameraEnabled, true);
|
|
}
|
|
}
|
|
|
|
window.addEventListener('keydown', handleShortcut);
|
|
return () => window.removeEventListener('keydown', handleShortcut);
|
|
}, [
|
|
toggleMic, micEnabled,
|
|
toggleCamera, cameraEnabled,
|
|
]);
|
|
|
|
return null;
|
|
}
|