From 1b2b4714e1381a691b90a85d4c09f52811c7d290 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Sat, 12 Jun 2021 09:19:45 +0200 Subject: [PATCH] Properly handle feed prop updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/components/views/voip/VideoFeed.tsx | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/components/views/voip/VideoFeed.tsx b/src/components/views/voip/VideoFeed.tsx index 9e9fbeb810..effefa1681 100644 --- a/src/components/views/voip/VideoFeed.tsx +++ b/src/components/views/voip/VideoFeed.tsx @@ -60,14 +60,30 @@ export default class VideoFeed extends React.Component { } componentDidMount() { - this.props.feed.addListener(CallFeedEvent.NewStream, this.onNewStream); + this.updateFeed(null, this.props.feed); this.playMedia(); } componentWillUnmount() { - this.props.feed.removeListener(CallFeedEvent.NewStream, this.onNewStream); + this.updateFeed(this.props.feed, null); this.element.current?.removeEventListener('resize', this.onResize); - this.stopMedia(); + } + + componentDidUpdate(prevProps: IProps) { + this.updateFeed(prevProps.feed, this.props.feed); + } + + private updateFeed(oldFeed: CallFeed, newFeed: CallFeed) { + if (oldFeed === newFeed) return; + + if (oldFeed) { + this.props.feed.removeListener(CallFeedEvent.NewStream, this.onNewStream); + this.stopMedia(); + } + if (newFeed) { + this.props.feed.addListener(CallFeedEvent.NewStream, this.onNewStream); + this.playMedia(); + } } private playMedia() {