diff --git a/apps/mobile/src/app/(tabs)/index.tsx b/apps/mobile/src/app/(tabs)/index.tsx index 37422b2..a493a51 100644 --- a/apps/mobile/src/app/(tabs)/index.tsx +++ b/apps/mobile/src/app/(tabs)/index.tsx @@ -1,11 +1,12 @@ import { router } from 'expo-router'; import { useEffect, useState } from 'react'; -import { RefreshControl, StyleSheet, Text, View } from 'react-native'; +import { Pressable, RefreshControl, ScrollView, StyleSheet, Text, View } from 'react-native'; import Animated, { FadeInDown, LinearTransition } from 'react-native-reanimated'; import { SafeAreaView } from 'react-native-safe-area-context'; import useSWR from 'swr'; -import { sortFeed, type ConnectionDTO, type FeedItemDTO, type ProfileDTO } from '@musicshare/shared'; +import { sortFeed, type ConnectionDTO, type FeedItemDTO, type FollowListDTO, type ProfileDTO } from '@musicshare/shared'; import { AmbientBackground } from '@/components/AmbientBackground'; +import { Avatar } from '@/components/Avatar'; import { NowPlayingCard } from '@/components/NowPlayingCard'; import { RelinkReminder } from '@/components/RelinkReminder'; import { SharingControls } from '@/components/SharingControls'; @@ -24,6 +25,10 @@ export default function FeedScreen() { const { data: feed, mutate, isLoading } = useSWR('/feed'); // Your own profile, for the "You" card. Loading it also marks you as watched, so your updates arrive quickly. const { data: mine, mutate: mutateMine } = useSWR(me ? `/users/${me.username}` : null); + // Everyone you follow; the feed only has the ones who've played something. + const { data: following, mutate: mutateFollowing } = useSWR(me ? `/users/${me.username}/following` : null); + const inFeed = new Set(feed?.map((n) => n.user.id)); + const quiet = following?.users.filter((u) => !inFeed.has(u.id)) ?? []; const [refreshing, setRefreshing] = useState(false); const reader = useReader(); @@ -67,7 +72,7 @@ export default function FeedScreen() { const refresh = async () => { setRefreshing(true); - await Promise.all([mutate(), mutateMine()]).catch(() => {}); + await Promise.all([mutate(), mutateMine(), mutateFollowing()]).catch(() => {}); setRefreshing(false); }; @@ -115,11 +120,37 @@ export default function FeedScreen() { ListEmptyComponent={ isLoading ? null : ( - Nothing yet. Follow some friends and their music will show up here live. + + {following?.users.length + ? 'Nobody you follow has played anything yet. Their music will show up here live.' + : 'Nothing yet. Follow some friends and their music will show up here live.'} +