import SwiftUI import SecretKit struct SecretListView: View { @ObservedObject var store: AnySecretStore @Binding var activeSecret: AnySecret.ID? @Binding var deletingSecret: AnySecret? var deletedSecret: (AnySecret) -> Void var body: some View { ForEach(store.secrets) { secret in NavigationLink(destination: SecretDetailView(secret: secret), tag: secret.id, selection: $activeSecret) { Text(secret.name) }.contextMenu { if store is AnySecretStoreModifiable { Button(action: { delete(secret: secret) }) { Text("Delete") } } } .popover(isPresented: .constant(deletingSecret == secret)) { if let modifiable = store as? AnySecretStoreModifiable { DeleteSecretView(store: modifiable, secret: secret) { deleted in deletingSecret = nil if deleted { deletedSecret(AnySecret(secret)) } } } } } } func delete(secret: SecretType) { deletingSecret = AnySecret(secret) } }