diff --git a/src/app/(tabs)/index.tsx b/src/app/(tabs)/index.tsx index 1982383..b15c8ea 100644 --- a/src/app/(tabs)/index.tsx +++ b/src/app/(tabs)/index.tsx @@ -434,7 +434,7 @@ export default function HomeScreen() { const openAlbum = (album: Album) => { router.push({ pathname: '/library/album/[key]', - params: { key: album.identity_key, from: 'home' }, + params: { key: album.identity_key }, }); }; diff --git a/src/app/(tabs)/library/album/[key].tsx b/src/app/(tabs)/library/album/[key].tsx index 1608313..20a23b4 100644 --- a/src/app/(tabs)/library/album/[key].tsx +++ b/src/app/(tabs)/library/album/[key].tsx @@ -39,11 +39,11 @@ function DiscHeader({ disc }: { disc: number }) { export default function AlbumScreen() { const colors = useColors(); - const { key, from } = useLocalSearchParams<{ key: string; from?: string }>(); + const { key } = useLocalSearchParams<{ key: string }>(); const albums = useLibraryStore((s) => s.albums); const allTracks = useLibraryStore((s) => s.tracks); const currentPath = usePlayerStore((s) => s.currentTrack?.path); - const handleBack = useLibraryDetailBack(from); + const handleBack = useLibraryDetailBack(); const insets = useSafeAreaInsets(); const { scrollY, heroFaded, collapsed, onScroll, scrollEventThrottle, expandedHeight, onHeroBlockLayout } = useDetailCollapse(); diff --git a/src/app/(tabs)/library/artist/[name].tsx b/src/app/(tabs)/library/artist/[name].tsx index 0ecddd2..f5a23c6 100644 --- a/src/app/(tabs)/library/artist/[name].tsx +++ b/src/app/(tabs)/library/artist/[name].tsx @@ -64,8 +64,8 @@ export default function ArtistScreen() { const styles = useStyles(); const colors = useColors(); const router = useRouter(); - const { name = 'Artist', from } = useLocalSearchParams<{ name: string; from?: string }>(); - const handleBack = useLibraryDetailBack(from); + const { name = 'Artist' } = useLocalSearchParams<{ name: string }>(); + const handleBack = useLibraryDetailBack(); const insets = useSafeAreaInsets(); const { scrollY, heroFaded, collapsed, onScroll, scrollEventThrottle, expandedHeight, onHeroBlockLayout } = useDetailCollapse(); diff --git a/src/app/(tabs)/library/playlist/[id].tsx b/src/app/(tabs)/library/playlist/[id].tsx index 96044ad..9bb1bf6 100644 --- a/src/app/(tabs)/library/playlist/[id].tsx +++ b/src/app/(tabs)/library/playlist/[id].tsx @@ -76,8 +76,8 @@ export default function PlaylistScreen() { const styles = useStyles(); const colors = useColors(); const router = useRouter(); - const { id, from } = useLocalSearchParams<{ id: string; from?: string }>(); - const handleBack = useLibraryDetailBack(from); + const { id } = useLocalSearchParams<{ id: string }>(); + const handleBack = useLibraryDetailBack(); const isFavorites = id === 'favorites'; const playlistId = isFavorites ? null : Number(id); @@ -185,7 +185,7 @@ export default function PlaylistScreen() { void (async () => { try { await deletePlaylist(target.id); - router.back(); + handleBack(); } catch (err) { Alert.alert('Delete failed', errorMessage(err)); } diff --git a/src/components/search/QuickSearchOverlay.tsx b/src/components/search/QuickSearchOverlay.tsx index 9602442..5235a97 100644 --- a/src/components/search/QuickSearchOverlay.tsx +++ b/src/components/search/QuickSearchOverlay.tsx @@ -901,7 +901,7 @@ function QuickSearchPanel({ if (result.kind === 'album') { router.push({ pathname: '/library/album/[key]', - params: { key: result.album.identity_key, from: 'search' }, + params: { key: result.album.identity_key }, }); return; } @@ -909,7 +909,7 @@ function QuickSearchPanel({ if (result.kind === 'artist') { router.push({ pathname: '/library/artist/[name]', - params: { name: result.artist.artist, from: 'search' }, + params: { name: result.artist.artist }, }); return; } @@ -917,7 +917,7 @@ function QuickSearchPanel({ if (result.kind === 'playlist') { router.push({ pathname: '/library/playlist/[id]', - params: { id: result.playlist.id, from: 'search' }, + params: { id: result.playlist.id }, }); return; } diff --git a/src/navigation/useLibraryDetailBack.ts b/src/navigation/useLibraryDetailBack.ts index f45dedd..512cee4 100644 --- a/src/navigation/useLibraryDetailBack.ts +++ b/src/navigation/useLibraryDetailBack.ts @@ -2,35 +2,22 @@ import { useCallback } from 'react'; import { BackHandler } from 'react-native'; import { useFocusEffect, useRouter } from 'expo-router'; -type LibraryDetailSource = 'home' | 'search'; - -function shouldReturnToLibraryRoot(from: string | string[] | undefined): from is LibraryDetailSource { - return from === 'home' || from === 'search'; -} - -export function useLibraryDetailBack(from?: string | string[]) { +export function useLibraryDetailBack() { const router = useRouter(); - const returnToLibraryRoot = shouldReturnToLibraryRoot(from); const handleBack = useCallback(() => { - if (returnToLibraryRoot) { - router.replace('/library'); - return; - } - router.back(); - }, [returnToLibraryRoot, router]); + router.dismissTo('/library'); + }, [router]); useFocusEffect( useCallback(() => { - if (!returnToLibraryRoot) return; - const subscription = BackHandler.addEventListener('hardwareBackPress', () => { handleBack(); return true; }); return () => subscription.remove(); - }, [handleBack, returnToLibraryRoot]) + }, [handleBack]) ); return handleBack;