From 4887f42b1f88025d6a382fae93cc2225482a191b Mon Sep 17 00:00:00 2001 From: Markus Thielker Date: Tue, 21 Jan 2025 16:04:37 +0100 Subject: [PATCH] PWD-1: replace NavigationView with NavigationStack implementation --- password/view/list/ListView.swift | 75 ++++++++++++++++++++++--------- 1 file changed, 55 insertions(+), 20 deletions(-) diff --git a/password/view/list/ListView.swift b/password/view/list/ListView.swift index a6d3ae6..129b79b 100644 --- a/password/view/list/ListView.swift +++ b/password/view/list/ListView.swift @@ -11,35 +11,70 @@ import _SwiftData_SwiftUI struct ListView: View { @Environment(\.modelContext) var context + @Environment(\.colorScheme) var colorScheme @ObservedObject var viewModel: ListViewModel + @State var isAddingPassword: Bool = false + @State var selectedItem: UUID? var body: some View { - NavigationView { - List { - ForEach(viewModel.passwords) { password in - NavigationLink(destination: DetailView(viewModel: DetailViewModel(context: context, passwordID: password.id))) { - Text(password.name) + NavigationStack { + HStack { + List { + HStack { + Text("Your passwords") + .fontWeight(.bold) + + Spacer() + + PwdButton( + label: Image(systemName: "plus"), + variant: .primary, + size: .icon, + action: { isAddingPassword = true } + ) + PwdButton( + label: Image(systemName: "arrow.trianglehead.clockwise") + .imageScale(.small), + variant: .primary, + size: .icon, + action: { + viewModel.passwords = viewModel.getAllPasswords() + } + ) + } + .background(.clear) + .frame(maxWidth: .infinity) + + ForEach(viewModel.passwords) { password in + Button("\(password.name)") { + selectedItem = password.id + } + .frame(maxWidth: .infinity, alignment: .leading) + .buttonStyle(PlainButtonStyle()) + .padding(EdgeInsets(top: 4, leading: 8, bottom: 4, trailing: 8)) + .background(selectedItem == password.id ? .blue : .clear) + .foregroundColor(selectedItem == password.id ? .white : (colorScheme == .dark ? .white : .black)) + .cornerRadius(8) + } + } + .frame(width: 250) + .listStyle(SidebarListStyle()) + + if let selectedItem = selectedItem { + DetailView(viewModel: DetailViewModel(context: context, passwordID: selectedItem)) + } else { + HStack { + Spacer() + Text("Select a password") + Spacer() } } } - .scrollContentBackground(.hidden) - .toolbar { - Button(action: { isAddingPassword = true }) { - Image(systemName: "plus") - .frame(width: 20, height: 20) - } - Button(action: { - viewModel.passwords = viewModel.getAllPasswords() - }) { - Image(systemName: "arrow.trianglehead.clockwise") - .imageScale(.medium) - .frame(width: 20, height: 20) - } - } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .leading) } - .navigationTitle("Password Trainer") + .windowToolbarFullScreenVisibility(.onHover) .sheet(isPresented: $isAddingPassword) { AddPasswordView(viewModel: viewModel) }