fix: prevent stream exit during overlays

This commit is contained in:
talksik
2026-04-13 09:11:46 -07:00
parent 67091e9d13
commit f2b439cc86
3 changed files with 25 additions and 0 deletions
@@ -1,3 +1,4 @@
import { usePlaybackSuspenderStore } from "@/stores/playback-suspender-store";
import { useEffect } from "react"; import { useEffect } from "react";
import { createPortal } from "react-dom"; import { createPortal } from "react-dom";
@@ -24,6 +25,14 @@ export function KeybindingsOverlay({
groups, groups,
title = "Keyboard Shortcuts", title = "Keyboard Shortcuts",
}: KeybindingsOverlayProps) { }: KeybindingsOverlayProps) {
// Suspend stream playback
useEffect(() => {
if (!open) return;
const { suspend, release } = usePlaybackSuspenderStore.getState();
suspend();
return release;
}, [open]);
useEffect(() => { useEffect(() => {
if (!open) return; if (!open) return;
const handler = (e: KeyboardEvent) => { const handler = (e: KeyboardEvent) => {
@@ -5,6 +5,7 @@ import { Button } from "@/components/ui/button";
import { updateParticleProperties } from "@/lib/firestore-particles"; import { updateParticleProperties } from "@/lib/firestore-particles";
import { particlePath, toFirestoreDocPath } from "@/lib/particle-path"; import { particlePath, toFirestoreDocPath } from "@/lib/particle-path";
import type { Particle } from "@/api/types"; import type { Particle } from "@/api/types";
import { usePlaybackSuspenderStore } from "@/stores/playback-suspender-store";
interface RenameStreamOverlayProps { interface RenameStreamOverlayProps {
networkId: string; networkId: string;
@@ -17,6 +18,13 @@ export function RenameStreamOverlay({
streamParticle, streamParticle,
onClose, onClose,
}: RenameStreamOverlayProps) { }: RenameStreamOverlayProps) {
// Suspend stream playback
useEffect(() => {
const { suspend, release } = usePlaybackSuspenderStore.getState();
suspend();
return release;
}, []);
const [name, setName] = useState(streamParticle.properties.name); const [name, setName] = useState(streamParticle.properties.name);
const [saving, setSaving] = useState(false); const [saving, setSaving] = useState(false);
@@ -13,6 +13,7 @@ import { particlePath, toFirestoreDocPath } from "@/lib/particle-path";
import { useNetwork } from "@/hooks/use-networks"; import { useNetwork } from "@/hooks/use-networks";
import { cn, getInitials } from "@/lib/utils"; import { cn, getInitials } from "@/lib/utils";
import type { Particle } from "@/api/types"; import type { Particle } from "@/api/types";
import { usePlaybackSuspenderStore } from "@/stores/playback-suspender-store";
interface StreamMembersOverlayProps { interface StreamMembersOverlayProps {
networkId: string; networkId: string;
@@ -27,6 +28,13 @@ export function StreamMembersOverlay({
isCreator, isCreator,
onClose, onClose,
}: StreamMembersOverlayProps) { }: StreamMembersOverlayProps) {
// Suspend stream playback
useEffect(() => {
const { suspend, release } = usePlaybackSuspenderStore.getState();
suspend();
return release;
}, []);
const network = useNetwork(networkId); const network = useNetwork(networkId);
const humans = network?.humans ?? []; const humans = network?.humans ?? [];
const creatorId = streamParticle.created_by_human_id; const creatorId = streamParticle.created_by_human_id;