feat: knock notifications for admins + AFK auto-mute in calls
P4-3 — Knock-to-join Notifications for Admins: - usePendingKnocks() hook reactively tracks knocking members via RoomMemberEvent.Membership; returns empty array if user lacks invite power - Members icon in RoomViewHeader shows a Warning badge with the knock count when there are pending requests; badge updates in real time without needing to open the drawer; aria-label updated to describe pending count P5-11 — AFK Auto-Mute in Voice: - useAfkAutoMute() hook opens a monitoring-only getUserMedia stream, connects it to an AnalyserNode, and polls RMS every 500ms - If mic is on and RMS stays below threshold for the configured timeout, calls callEmbed.control.setMicrophone(false) and shows an in-app toast - Hook is called inside CallControls so monitoring is only active during calls - Settings: afkAutoMute toggle + afkTimeoutMinutes select (1/5/10/20/30 min, default 10) added to Settings → Calls Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -35,6 +35,7 @@ import { useResizeObserver } from '../../hooks/useResizeObserver';
|
||||
import { stopPropagation } from '../../utils/keyboard';
|
||||
import { AsyncStatus, useAsyncCallback } from '../../hooks/useAsyncCallback';
|
||||
import { useCallEmbedRef } from '../../hooks/useCallEmbed';
|
||||
import { useAfkAutoMute } from '../../hooks/useAfkAutoMute';
|
||||
|
||||
type CallControlsProps = {
|
||||
callEmbed: CallEmbed;
|
||||
@@ -71,6 +72,8 @@ export function CallControls({ callEmbed }: CallControlsProps) {
|
||||
const { microphone, video, sound, screenshare, spotlight, screenshareAudioMuted } =
|
||||
useCallControlState(callEmbed.control);
|
||||
|
||||
useAfkAutoMute(callEmbed);
|
||||
|
||||
const [cords, setCords] = useState<RectCords>();
|
||||
const [shareConfirm, setShareConfirm] = useState(false);
|
||||
useEffect(() => {
|
||||
|
||||
Reference in New Issue
Block a user