Hide tvOS search type/filters until query entered

Match iOS behavior by gating the type switcher and filters menus on an
active query, and drop the .caption font so they render with the same
default button font as View Options.
This commit is contained in:
Arkadiusz Fal
2026-04-17 05:13:45 +02:00
parent 025dc73e59
commit 281f5e0f13
2 changed files with 28 additions and 28 deletions

View File

@@ -126,19 +126,21 @@ struct InstanceBrowseView: View {
Task { await searchViewModel?.search(query: searchText) } Task { await searchViewModel?.search(query: searchText) }
} }
// Type filter if isInSearchMode {
filterMenu( // Type filter
title: (searchViewModel?.filters.type ?? .video).title, filterMenu(
selection: Binding( title: (searchViewModel?.filters.type ?? .video).title,
get: { searchViewModel?.filters.type ?? .video }, selection: Binding(
set: { searchViewModel?.filters.type = $0 } get: { searchViewModel?.filters.type ?? .video },
), set: { searchViewModel?.filters.type = $0 }
options: SearchContentType.allCases, ),
labelForOption: { $0.title } options: SearchContentType.allCases,
) labelForOption: { $0.title }
)
// Combined search filters menu // Combined search filters menu
tvOSFiltersMenu tvOSFiltersMenu
}
Button { Button {
showViewOptions = true showViewOptions = true
@@ -543,7 +545,6 @@ struct InstanceBrowseView: View {
} }
} label: { } label: {
Text(title) Text(title)
.font(.caption)
} }
} }
@@ -607,7 +608,6 @@ struct InstanceBrowseView: View {
.disabled(searchViewModel?.filters.isDefault ?? true) .disabled(searchViewModel?.filters.isDefault ?? true)
} label: { } label: {
Label(String(localized: "search.filters"), systemImage: "line.3.horizontal.decrease") Label(String(localized: "search.filters"), systemImage: "line.3.horizontal.decrease")
.font(.caption)
} }
} }
#else #else

View File

@@ -192,19 +192,21 @@ struct SearchView: View {
Task { await searchViewModel?.search(query: searchTextBinding.wrappedValue) } Task { await searchViewModel?.search(query: searchTextBinding.wrappedValue) }
} }
// Type filter if !searchTextBinding.wrappedValue.isEmpty {
filterMenu( // Type filter
title: (searchViewModel?.filters.type ?? .video).title, filterMenu(
selection: Binding( title: (searchViewModel?.filters.type ?? .video).title,
get: { searchViewModel?.filters.type ?? .video }, selection: Binding(
set: { searchViewModel?.filters.type = $0 } get: { searchViewModel?.filters.type ?? .video },
), set: { searchViewModel?.filters.type = $0 }
options: SearchContentType.allCases, ),
labelForOption: { $0.title } options: SearchContentType.allCases,
) labelForOption: { $0.title }
)
// Combined search filters menu // Combined search filters menu
tvOSFiltersMenu tvOSFiltersMenu
}
Button { Button {
showViewOptions = true showViewOptions = true
@@ -458,7 +460,6 @@ struct SearchView: View {
} }
} label: { } label: {
Text(title) Text(title)
.font(.caption)
} }
} }
@@ -530,7 +531,6 @@ struct SearchView: View {
.disabled(searchViewModel?.filters.isDefault ?? true) .disabled(searchViewModel?.filters.isDefault ?? true)
} label: { } label: {
Label(String(localized: "search.filters"), systemImage: "line.3.horizontal.decrease") Label(String(localized: "search.filters"), systemImage: "line.3.horizontal.decrease")
.font(.caption)
} }
} }
#endif #endif