Add button command, fix list selection

This commit is contained in:
Christoph Hagen
2025-01-29 09:16:29 +01:00
parent eaad0a4bff
commit e291fbec52
11 changed files with 305 additions and 68 deletions

View File

@ -41,17 +41,15 @@ struct PageListView: View {
private var language
@EnvironmentObject
private var content: Content
private var selection: SelectedContent
@Binding
private var selectedPage: Page?
@EnvironmentObject
private var content: Content
@State
private var searchString = ""
init(selectedPage: Binding<Page?>) {
self._selectedPage = selectedPage
}
init() { }
private var filteredPages: [Page] {
guard !searchString.isEmpty else {
@ -65,20 +63,30 @@ struct PageListView: View {
TextField("", text: $searchString, prompt: Text("Search"))
.textFieldStyle(.roundedBorder)
.padding(.horizontal, 8)
List(filteredPages, selection: $selectedPage) { page in
List(filteredPages) { page in
PageListItem(page: page)
.tag(page)
.listRowBackground(RoundedRectangle(cornerRadius: 5)
.fill(selection.page == page ? Color.blue : Color.clear)
.padding(.horizontal, 10)
)
.contentShape(Rectangle())
.onTapGesture {
selection.page = page
}
}
}
.onAppear {
if selectedPage == nil {
selectedPage = content.pages.first
if selection.page == nil, let first = content.pages.first {
selection.page = first
}
}
}
}
#Preview {
PageListView(selectedPage: .constant(nil))
.environmentObject(Content.mock)
let content = Content.mock
let selection = SelectedContent()
PageListView()
.environmentObject(content)
.environmentObject(selection)
}