diff --git a/examples/mobile-client/fishjam-chat/app/(tabs)/livestream.tsx b/examples/mobile-client/fishjam-chat/app/(tabs)/livestream.tsx index 590a55e3..7038130e 100644 --- a/examples/mobile-client/fishjam-chat/app/(tabs)/livestream.tsx +++ b/examples/mobile-client/fishjam-chat/app/(tabs)/livestream.tsx @@ -1,15 +1,15 @@ -import React, { useState } from "react"; +import { router } from "expo-router"; +import { useState } from "react"; import { Dimensions, Image, - KeyboardAvoidingView, Keyboard, + KeyboardAvoidingView, StyleSheet, Text, } from "react-native"; import { SafeAreaView } from "react-native-safe-area-context"; -import { router } from "expo-router"; -import { Button, TextInput, DismissKeyboard } from "../../components"; +import { Button, DismissKeyboard, TextInput } from "../../components"; const FishjamLogo = require("../../assets/images/fishjam-logo.png"); diff --git a/examples/mobile-client/fishjam-chat/app/livestream/screen-sharing.tsx b/examples/mobile-client/fishjam-chat/app/livestream/screen-sharing.tsx index b230afcf..7c8bcf52 100644 --- a/examples/mobile-client/fishjam-chat/app/livestream/screen-sharing.tsx +++ b/examples/mobile-client/fishjam-chat/app/livestream/screen-sharing.tsx @@ -1,13 +1,13 @@ -import React, { useCallback, useEffect, useState } from "react"; -import { StyleSheet, View, Text } from "react-native"; -import { SafeAreaView } from "react-native-safe-area-context"; -import { useLocalSearchParams } from "expo-router"; import { - useSandbox, + useInitializeDevices, useLivestreamStreamer, + useSandbox, useScreenShare, - useInitializeDevices, } from "@fishjam-cloud/react-native-client"; +import { useLocalSearchParams } from "expo-router"; +import { useCallback, useEffect, useState } from "react"; +import { StyleSheet, Text, View } from "react-native"; +import { SafeAreaView } from "react-native-safe-area-context"; import { Button } from "../../components"; import { BrandColors } from "../../utils/Colors"; @@ -87,7 +87,7 @@ export default function LivestreamScreenSharingScreen() { } catch (err) { console.error( "Failed to clean up livestream resources on unmount:", - err + err, ); } })(); diff --git a/examples/mobile-client/fishjam-chat/app/livestream/viewer.tsx b/examples/mobile-client/fishjam-chat/app/livestream/viewer.tsx index fdb39a4b..0c5f6b36 100644 --- a/examples/mobile-client/fishjam-chat/app/livestream/viewer.tsx +++ b/examples/mobile-client/fishjam-chat/app/livestream/viewer.tsx @@ -1,12 +1,12 @@ -import React, { useEffect } from "react"; -import { StyleSheet, View, Text } from "react-native"; -import { SafeAreaView } from "react-native-safe-area-context"; -import { useLocalSearchParams } from "expo-router"; import { - useSandbox, - useLivestreamViewer, RTCView, + useLivestreamViewer, + useSandbox, } from "@fishjam-cloud/react-native-client"; +import { useLocalSearchParams } from "expo-router"; +import { useEffect } from "react"; +import { StyleSheet, Text, View } from "react-native"; +import { SafeAreaView } from "react-native-safe-area-context"; import { BrandColors } from "../../utils/Colors"; export default function LivestreamViewerScreen() { @@ -51,7 +51,7 @@ export default function LivestreamViewerScreen() { style={styles.rtcView} mediaStream={stream} objectFit="contain" - mirror={true} + mirror={false} /> ) : ( diff --git a/examples/mobile-client/fishjam-chat/components/VideosGrid.tsx b/examples/mobile-client/fishjam-chat/components/VideosGrid.tsx index c80527f1..94786898 100644 --- a/examples/mobile-client/fishjam-chat/components/VideosGrid.tsx +++ b/examples/mobile-client/fishjam-chat/components/VideosGrid.tsx @@ -1,20 +1,20 @@ -import React, { useCallback, useMemo } from "react"; +import { + type PeerWithTracks, + RTCView, + type Track, + usePeers, +} from "@fishjam-cloud/react-native-client"; +import { useCallback, useMemo } from "react"; import { FlatList, ListRenderItemInfo, StyleSheet, - View, Text, + View, } from "react-native"; -import { - RTCView, - type Track, - type PeerWithTracks, - usePeers, -} from "@fishjam-cloud/react-native-client"; -import NoCameraView from "./NoCameraView"; import { BrandColors } from "../utils/Colors"; +import NoCameraView from "./NoCameraView"; export type GridTrack = { track: Track | null; @@ -26,7 +26,7 @@ export type GridTrack = { const createGridTracksFromPeer = ( peer: PeerWithTracks, - isLocal: boolean + isLocal: boolean, ): GridTrack[] => { const tracks: GridTrack[] = []; @@ -65,7 +65,7 @@ const createGridTracksFromPeer = ( export const parsePeersToTracks = ( localPeer: PeerWithTracks | null, - remotePeers: PeerWithTracks[] + remotePeers: PeerWithTracks[], ): GridTrack[] => [ ...(localPeer ? createGridTracksFromPeer(localPeer, true) : []), ...remotePeers.flatMap((peer) => createGridTracksFromPeer(peer, false)), @@ -73,6 +73,7 @@ export const parsePeersToTracks = ( const GridTrackItem = ({ peer, index }: { peer: GridTrack; index: number }) => { const isSelfVideo = peer.isLocal && peer.track?.metadata?.type === "camera"; + const isCamera = peer.track?.metadata?.type === "camera"; const mediaStream = peer.track?.stream && !peer.track?.metadata?.paused ? peer.track.stream @@ -101,7 +102,7 @@ const GridTrackItem = ({ peer, index }: { peer: GridTrack; index: number }) => { stopAutomatically: true, allowsCameraInBackground: true, }} - mirror={true} + mirror={isCamera} /> ) : ( @@ -129,12 +130,12 @@ export default function VideosGrid({ username }: VideosGridProps) { ({ item, index }: ListRenderItemInfo) => ( ), - [] + [], ); const ListEmptyComponent = useMemo( () => , - [username] + [username], ); return (