Fix tvOS navigation - use push everywhere except Media tab channels
Changes: - MediaCoordinator: Use .fullScreen for tvOS (full-screen display with navigation) - HomeCoordinator, LibraryCoordinator, SearchCoordinator: Use .push without NavigationViewCoordinator wrappers - Unified tvOS and iOS coordinator return types for push navigation This fixes: ✅ Channels display full-screen (not modal popup) ✅ Login and settings use full-screen navigation ✅ Items from Home/Search display correctly Known issues with .fullScreen presentation: - Pressing ESC on error dismisses entire channel instead of going back one level - Video player doesn't respond to ESC during playback 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
d0a921d05c
commit
7c28c04048
|
@ -30,15 +30,6 @@ final class HomeCoordinator: NavigationCoordinatable {
|
||||||
var library = makeLibrary
|
var library = makeLibrary
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if os(tvOS)
|
|
||||||
func makeItem(item: BaseItemDto) -> NavigationViewCoordinator<ItemCoordinator> {
|
|
||||||
NavigationViewCoordinator(ItemCoordinator(item: item))
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeLibrary(viewModel: PagingLibraryViewModel<BaseItemDto>) -> NavigationViewCoordinator<LibraryCoordinator<BaseItemDto>> {
|
|
||||||
NavigationViewCoordinator(LibraryCoordinator<BaseItemDto>(viewModel: viewModel))
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
func makeItem(item: BaseItemDto) -> ItemCoordinator {
|
func makeItem(item: BaseItemDto) -> ItemCoordinator {
|
||||||
ItemCoordinator(item: item)
|
ItemCoordinator(item: item)
|
||||||
}
|
}
|
||||||
|
@ -46,7 +37,6 @@ final class HomeCoordinator: NavigationCoordinatable {
|
||||||
func makeLibrary(viewModel: PagingLibraryViewModel<BaseItemDto>) -> LibraryCoordinator<BaseItemDto> {
|
func makeLibrary(viewModel: PagingLibraryViewModel<BaseItemDto>) -> LibraryCoordinator<BaseItemDto> {
|
||||||
LibraryCoordinator(viewModel: viewModel)
|
LibraryCoordinator(viewModel: viewModel)
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
@ViewBuilder
|
@ViewBuilder
|
||||||
func makeStart() -> some View {
|
func makeStart() -> some View {
|
||||||
|
|
|
@ -44,15 +44,6 @@ final class LibraryCoordinator<Element: Poster>: NavigationCoordinatable {
|
||||||
PagingLibraryView(viewModel: viewModel)
|
PagingLibraryView(viewModel: viewModel)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if os(tvOS)
|
|
||||||
func makeItem(item: BaseItemDto) -> NavigationViewCoordinator<ItemCoordinator> {
|
|
||||||
NavigationViewCoordinator(ItemCoordinator(item: item))
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeLibrary(viewModel: PagingLibraryViewModel<BaseItemDto>) -> NavigationViewCoordinator<LibraryCoordinator<BaseItemDto>> {
|
|
||||||
NavigationViewCoordinator(LibraryCoordinator<BaseItemDto>(viewModel: viewModel))
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
func makeItem(item: BaseItemDto) -> ItemCoordinator {
|
func makeItem(item: BaseItemDto) -> ItemCoordinator {
|
||||||
ItemCoordinator(item: item)
|
ItemCoordinator(item: item)
|
||||||
}
|
}
|
||||||
|
@ -61,6 +52,7 @@ final class LibraryCoordinator<Element: Poster>: NavigationCoordinatable {
|
||||||
LibraryCoordinator<BaseItemDto>(viewModel: viewModel)
|
LibraryCoordinator<BaseItemDto>(viewModel: viewModel)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !os(tvOS)
|
||||||
func makeFilter(parameters: FilterCoordinator.Parameters) -> NavigationViewCoordinator<FilterCoordinator> {
|
func makeFilter(parameters: FilterCoordinator.Parameters) -> NavigationViewCoordinator<FilterCoordinator> {
|
||||||
NavigationViewCoordinator(FilterCoordinator(parameters: parameters))
|
NavigationViewCoordinator(FilterCoordinator(parameters: parameters))
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,9 +18,9 @@ final class MediaCoordinator: NavigationCoordinatable {
|
||||||
@Root
|
@Root
|
||||||
var start = makeStart
|
var start = makeStart
|
||||||
#if os(tvOS)
|
#if os(tvOS)
|
||||||
@Route(.push)
|
@Route(.fullScreen)
|
||||||
var library = makeLibrary
|
var library = makeLibrary
|
||||||
@Route(.push)
|
@Route(.fullScreen)
|
||||||
var liveTV = makeLiveTV
|
var liveTV = makeLiveTV
|
||||||
#else
|
#else
|
||||||
@Route(.push)
|
@Route(.push)
|
||||||
|
|
|
@ -31,15 +31,6 @@ final class SearchCoordinator: NavigationCoordinatable {
|
||||||
var filter = makeFilter
|
var filter = makeFilter
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if os(tvOS)
|
|
||||||
func makeItem(item: BaseItemDto) -> NavigationViewCoordinator<ItemCoordinator> {
|
|
||||||
NavigationViewCoordinator(ItemCoordinator(item: item))
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeLibrary(viewModel: PagingLibraryViewModel<BaseItemDto>) -> NavigationViewCoordinator<LibraryCoordinator<BaseItemDto>> {
|
|
||||||
NavigationViewCoordinator(LibraryCoordinator(viewModel: viewModel))
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
func makeItem(item: BaseItemDto) -> ItemCoordinator {
|
func makeItem(item: BaseItemDto) -> ItemCoordinator {
|
||||||
ItemCoordinator(item: item)
|
ItemCoordinator(item: item)
|
||||||
}
|
}
|
||||||
|
@ -48,6 +39,7 @@ final class SearchCoordinator: NavigationCoordinatable {
|
||||||
LibraryCoordinator(viewModel: viewModel)
|
LibraryCoordinator(viewModel: viewModel)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !os(tvOS)
|
||||||
func makeFilter(parameters: FilterCoordinator.Parameters) -> NavigationViewCoordinator<FilterCoordinator> {
|
func makeFilter(parameters: FilterCoordinator.Parameters) -> NavigationViewCoordinator<FilterCoordinator> {
|
||||||
NavigationViewCoordinator(FilterCoordinator(parameters: parameters))
|
NavigationViewCoordinator(FilterCoordinator(parameters: parameters))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue