From ae57c43823bbe5f27f5444dcfb9ae1b8cb286640 Mon Sep 17 00:00:00 2001 From: Anna Olak <15946812+anna1901@users.noreply.github.com> Date: Wed, 26 Nov 2025 16:06:54 +0100 Subject: [PATCH 01/13] Implement screen sharing for live streams --- .../fishjam-chat/navigators/AppNavigator.tsx | 9 ++ .../screens/ConnectToLivestreamScreen.tsx | 23 ++++ .../LivestreamScreenSharingScreen.tsx | 88 +++++++++++++ .../useLivestreamScreenSharingStreamer.ts | 116 ++++++++++++++++++ .../livestream/hooks/useLivestreamStreamer.ts | 3 +- .../src/livestream/index.ts | 1 + 6 files changed, 238 insertions(+), 2 deletions(-) create mode 100644 internal/fishjam-chat/screens/LivestreamScreen/LivestreamScreenSharingScreen.tsx create mode 100644 packages/react-native-client/src/livestream/hooks/useLivestreamScreenSharingStreamer.ts diff --git a/internal/fishjam-chat/navigators/AppNavigator.tsx b/internal/fishjam-chat/navigators/AppNavigator.tsx index 388414997..0e240ffcc 100644 --- a/internal/fishjam-chat/navigators/AppNavigator.tsx +++ b/internal/fishjam-chat/navigators/AppNavigator.tsx @@ -15,6 +15,7 @@ import { ConnectWithFishjamRoom } from '../screens/ConnectWithFishjamRoom'; import ConnectToLivestreamScreen from '../screens/ConnectToLivestreamScreen'; import LivestreamStreamerScreen from '../screens/LivestreamScreen/LivestreamStreamerScreen'; import LivestreamViewerScreen from '../screens/LivestreamScreen/LivestreamViewerScreen'; +import LivestreamScreenSharingScreen from '../screens/LivestreamScreen/LivestreamScreenSharingScreen'; export type AppRootStackParamList = { Home: undefined; @@ -31,6 +32,10 @@ export type AppRootStackParamList = { fishjamId: string; roomName: string; }; + LivestreamScreenSharingScreen: { + fishjamId: string; + roomName: string; + }; Room: { isCameraOn: boolean; userName?: string; @@ -144,6 +149,10 @@ export default function AppNavigator() { name="LivestreamViewerScreen" component={LivestreamViewerScreen} /> + { + try { + validateInputs(); + setConnectionError(null); + setLoading(true); + + navigation.navigate('LivestreamScreenSharingScreen', { + fishjamId, + roomName, + }); + } catch (e) { + const message = + 'message' in (e as Error) ? (e as Error).message : 'Unknown error'; + setConnectionError(message); + } finally { + setLoading(false); + } + }; return ( @@ -109,6 +127,11 @@ export default function ConnectToLivestreamScreen({ navigation }: Props) { onPress={onTapConnectStreamerButton} disabled={loading} /> +