From 373d3fba5961a06f6e7e676c89882f0828231b8a Mon Sep 17 00:00:00 2001 From: Max Goodhart Date: Sun, 15 Jun 2025 04:26:36 +0000 Subject: [PATCH] Add stream list filter --- packages/streamwall-control-ui/src/index.tsx | 34 +++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/packages/streamwall-control-ui/src/index.tsx b/packages/streamwall-control-ui/src/index.tsx index a56143c..c7a4546 100644 --- a/packages/streamwall-control-ui/src/index.tsx +++ b/packages/streamwall-control-ui/src/index.tsx @@ -89,15 +89,27 @@ export const GlobalStyle = createGlobalStyle` ` const normalStreamKinds = new Set(['video', 'audio', 'web']) -function filterStreams(streams: StreamData[], wallStreamIds: Set) { +function filterStreams( + streams: StreamData[], + wallStreamIds: Set, + filter: string, +) { const wallStreams = [] const liveStreams = [] const otherStreams = [] for (const stream of streams) { - const { _id, kind, status } = stream + const { _id, kind, status, label, source, state, city } = stream if (kind && !normalStreamKinds.has(kind)) { continue } + if ( + filter !== '' && + !`${label}${source}${state}${city}` + .toLowerCase() + .includes(filter.toLowerCase()) + ) { + continue + } if (wallStreamIds.has(_id)) { wallStreams.push(stream) } else if ((kind && kind !== 'video') || status === 'Live') { @@ -547,6 +559,13 @@ export function ControlUI({ ev.preventDefault() }, []) + const [streamFilter, setStreamFilter] = useState('') + const handleStreamFilterChange = useCallback< + JSX.InputEventHandler + >((ev) => { + setStreamFilter(ev.currentTarget?.value) + }, []) + // Set up keyboard shortcuts. useHotkeys( hotkeyTriggers.map((k) => `alt+${k}`).join(','), @@ -603,9 +622,9 @@ export function ControlUI({ ), [sharedState], ) - const [wallStreams, liveStreams, otherStreams] = filterStreams( - streams, - wallStreamIds, + const [wallStreams, liveStreams, otherStreams] = useMemo( + () => filterStreams(streams, wallStreamIds, streamFilter), + [streams, wallStreamIds, streamFilter], ) function StreamList({ rows }: { rows: StreamData[] }) { return rows.map((row) => ( @@ -776,6 +795,11 @@ export function ControlUI({ {isConnected ? (
+

Viewing

Live