From 3c7581de1afda106a902f82f0bf5b98f0f548f4f Mon Sep 17 00:00:00 2001 From: Arkadiusz Fal Date: Mon, 13 Apr 2026 21:04:59 +0200 Subject: [PATCH] Replace search content type segmented picker with Menu on tvOS Unifies the filter strip on tvOS so all filters (sort, date, duration, content type) use the same inline Menu style instead of mixing menus with a segmented picker. --- Yattee/Views/Instances/InstanceBrowseView.swift | 14 +++++++++++++- Yattee/Views/Search/SearchView.swift | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/Yattee/Views/Instances/InstanceBrowseView.swift b/Yattee/Views/Instances/InstanceBrowseView.swift index d08484e7..173bdf4c 100644 --- a/Yattee/Views/Instances/InstanceBrowseView.swift +++ b/Yattee/Views/Instances/InstanceBrowseView.swift @@ -553,7 +553,18 @@ struct InstanceBrowseView: View { } #endif - // Content type segmented picker + // Content type picker + #if os(tvOS) + filterMenu( + title: String(localized: "search.filters.type"), + selection: Binding( + get: { searchViewModel?.filters.type ?? .video }, + set: { searchViewModel?.filters.type = $0 } + ), + options: SearchContentType.allCases, + labelForOption: { $0.title } + ) + #else Picker("", selection: Binding( get: { searchViewModel?.filters.type ?? .video }, set: { searchViewModel?.filters.type = $0 } @@ -563,6 +574,7 @@ struct InstanceBrowseView: View { } } .pickerStyle(.segmented) + #endif } .padding(.horizontal) .padding(.vertical, 8) diff --git a/Yattee/Views/Search/SearchView.swift b/Yattee/Views/Search/SearchView.swift index e2c0667d..ec40311a 100644 --- a/Yattee/Views/Search/SearchView.swift +++ b/Yattee/Views/Search/SearchView.swift @@ -425,7 +425,18 @@ struct SearchView: View { } #endif - // Content type segmented picker + // Content type picker + #if os(tvOS) + filterMenu( + title: String(localized: "search.filters.type"), + selection: Binding( + get: { searchViewModel?.filters.type ?? .video }, + set: { searchViewModel?.filters.type = $0 } + ), + options: SearchContentType.allCases, + labelForOption: { $0.title } + ) + #else Picker("", selection: Binding( get: { searchViewModel?.filters.type ?? .video }, set: { searchViewModel?.filters.type = $0 } @@ -435,6 +446,7 @@ struct SearchView: View { } } .pickerStyle(.segmented) + #endif } .padding(.horizontal) .padding(.vertical, 8)