fix live audio settings and trigger highlights

- start each camera group's audio from that group's saved settings instead of merging every group
- don't clear the previous trigger's highlight timeout when another trigger fires
This commit is contained in:
Josh Hawkins
2026-10-31 22:45:47 -05:00
parent 5764eaddaa
commit f68f360386
3 changed files with 17 additions and 29 deletions
+7 -13
View File
@@ -575,25 +575,19 @@ export default function DraggableGridLayout({
}; };
useEffect(() => { useEffect(() => {
if (!allGroupsStreamingSettings) {
return;
}
const initialAudioStates: AudioState = {}; const initialAudioStates: AudioState = {};
const initialVolumeStates: VolumeState = {}; const initialVolumeStates: VolumeState = {};
Object.entries(allGroupsStreamingSettings).forEach(([_, groupSettings]) => { Object.entries(currentGroupStreamingSettings ?? {}).forEach(
if (groupSettings) { ([camera, cameraSettings]) => {
Object.entries(groupSettings).forEach(([camera, cameraSettings]) => { initialAudioStates[camera] = cameraSettings.playAudio ?? false;
initialAudioStates[camera] = cameraSettings.playAudio ?? false; initialVolumeStates[camera] = cameraSettings.volume ?? 1;
initialVolumeStates[camera] = cameraSettings.volume ?? 1; },
}); );
}
});
setAudioStates(initialAudioStates); setAudioStates(initialAudioStates);
setVolumeStates(initialVolumeStates); setVolumeStates(initialVolumeStates);
}, [allGroupsStreamingSettings]); }, [currentGroupStreamingSettings, cameraGroup]);
const toggleAudio = (cameraName: string) => { const toggleAudio = (cameraName: string) => {
setAudioStates((prev) => ({ setAudioStates((prev) => ({
+7 -13
View File
@@ -326,25 +326,19 @@ export default function LiveDashboardView({
}; };
useEffect(() => { useEffect(() => {
if (!allGroupsStreamingSettings) {
return;
}
const initialAudioStates: AudioState = {}; const initialAudioStates: AudioState = {};
const initialVolumeStates: VolumeState = {}; const initialVolumeStates: VolumeState = {};
Object.entries(allGroupsStreamingSettings).forEach(([_, groupSettings]) => { Object.entries(currentGroupStreamingSettings ?? {}).forEach(
if (groupSettings) { ([camera, cameraSettings]) => {
Object.entries(groupSettings).forEach(([camera, cameraSettings]) => { initialAudioStates[camera] = cameraSettings.playAudio ?? false;
initialAudioStates[camera] = cameraSettings.playAudio ?? false; initialVolumeStates[camera] = cameraSettings.volume ?? 1;
initialVolumeStates[camera] = cameraSettings.volume ?? 1; },
}); );
}
});
setAudioStates(initialAudioStates); setAudioStates(initialAudioStates);
setVolumeStates(initialVolumeStates); setVolumeStates(initialVolumeStates);
}, [allGroupsStreamingSettings]); }, [currentGroupStreamingSettings, cameraGroup]);
const toggleAudio = (cameraName: string): void => { const toggleAudio = (cameraName: string): void => {
setAudioStates((prev) => ({ setAudioStates((prev) => ({
+3 -3
View File
@@ -148,13 +148,13 @@ export default function TriggerView({
return current; return current;
}); });
const timeout = setTimeout(() => { // not cleared on the next payload, or a second trigger firing within
// 3s would leave this one highlighted
setTimeout(() => {
setTriggeredTrigger((prev) => setTriggeredTrigger((prev) =>
(prev || []).filter((name) => name !== triggers_status_ws.name), (prev || []).filter((name) => name !== triggers_status_ws.name),
); );
}, 3000); }, 3000);
return () => clearTimeout(timeout);
}, [triggers_status_ws, selectedCamera, mutate]); }, [triggers_status_ws, selectedCamera, mutate]);
useEffect(() => { useEffect(() => {