From 9c449c8de61edbea5397a046c7bcc76536ee6d86 Mon Sep 17 00:00:00 2001 From: Timo K Date: Mon, 30 Oct 2023 12:40:38 +0100 Subject: [PATCH] use the same leave procedure on hangup widget action on hangup button pressed Signed-off-by: Timo K --- src/room/GroupCallView.tsx | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index 350cd74e..1ffafc02 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -201,6 +201,22 @@ export const GroupCallView: FC = ({ const [leaveError, setLeaveError] = useState(undefined); const history = useHistory(); + const widgetPostHangupProcedure = async (): Promise => { + if (!widget) { + logger.warn("called widgetPostHangupProcedure without a widget."); + return; + } + // we need to wait until the callEnded event is tracked on posthog. + // Otherwise the iFrame gets killed before the callEnded event got tracked. + await new Promise((resolve) => window.setTimeout(resolve, 10)); // 10ms + widget.api.setAlwaysOnScreen(false); + PosthogAnalytics.instance.logout(); + + // we will always send the hangup event after the memberships have been updated + // calling leaveRTCSession. + widget.api.transport.send(ElementWidgetActions.HangupCall, {}); + }; + const onLeave = useCallback( async (leaveError?: Error) => { setLeaveError(leaveError); @@ -217,15 +233,7 @@ export const GroupCallView: FC = ({ await leaveRTCSession(rtcSession); if (widget) { - // we need to wait until the callEnded event is tracked on posthog. - // Otherwise the iFrame gets killed before the callEnded event got tracked. - await new Promise((resolve) => window.setTimeout(resolve, 10)); // 10ms - widget.api.setAlwaysOnScreen(false); - PosthogAnalytics.instance.logout(); - - // we will always send the hangup event after the memberships have been updated - // calling leaveRTCSession. - widget.api.transport.send(ElementWidgetActions.HangupCall, {}); + widgetPostHangupProcedure(); } if ( @@ -244,9 +252,9 @@ export const GroupCallView: FC = ({ const onHangup = async ( ev: CustomEvent, ): Promise => { - await leaveRTCSession(rtcSession); widget!.api.transport.reply(ev.detail, {}); - widget!.api.setAlwaysOnScreen(false); + await leaveRTCSession(rtcSession); + widgetPostHangupProcedure(); }; widget.lazyActions.once(ElementWidgetActions.HangupCall, onHangup); return () => {