mirror of
https://github.com/maxgoedjen/secretive.git
synced 2026-03-05 09:24:49 +01:00
Add deletion confirmation screen (fixes #19)
This commit is contained in:
@@ -33,7 +33,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
|
||||
@IBAction func add(sender: AnyObject?) {
|
||||
var addWindow: NSWindow!
|
||||
let addView = CreateSecureEnclaveSecretView(store: secureEnclave) {
|
||||
let addView = CreateSecretView(store: secureEnclave) {
|
||||
self.window.endSheet(addWindow)
|
||||
}
|
||||
addWindow = NSWindow(
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
import SwiftUI
|
||||
import SecretKit
|
||||
|
||||
struct ContentView<StoreType: SecretStore>: View {
|
||||
|
||||
@ObservedObject var store: StoreType
|
||||
@State var active: StoreType.SecretType?
|
||||
|
||||
struct ContentView: View {
|
||||
|
||||
@ObservedObject var store: SecureEnclave.Store
|
||||
@State var active: SecureEnclave.Secret?
|
||||
|
||||
@State var showingDeletion = false
|
||||
@State var deletingSecret: SecureEnclave.Secret?
|
||||
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
List {
|
||||
@@ -27,15 +30,20 @@ struct ContentView<StoreType: SecretStore>: View {
|
||||
.frame(minWidth: 100, idealWidth: 240)
|
||||
}
|
||||
.navigationViewStyle(DoubleColumnNavigationViewStyle())
|
||||
|
||||
.sheet(isPresented: $showingDeletion) {
|
||||
DeleteSecretView(secret: self.deletingSecret!, store: self.store) {
|
||||
self.showingDeletion = false
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
func delete(secret: StoreType.SecretType) {
|
||||
// TODO: Add "type the name of the key to delete" dialogue
|
||||
try! store.delete(secret: secret)
|
||||
|
||||
|
||||
func delete(secret: SecureEnclave.Secret) {
|
||||
deletingSecret = secret
|
||||
showingDeletion = true
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//
|
||||
//struct ContentView_Previews: PreviewProvider {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import SwiftUI
|
||||
import SecretKit
|
||||
|
||||
struct CreateSecureEnclaveSecretView: View {
|
||||
struct CreateSecretView: View {
|
||||
|
||||
@ObservedObject var store: SecureEnclave.Store
|
||||
|
||||
58
Secretive/DeleteSecretView.swift
Normal file
58
Secretive/DeleteSecretView.swift
Normal file
@@ -0,0 +1,58 @@
|
||||
import SwiftUI
|
||||
import SecretKit
|
||||
|
||||
struct DeleteSecretView: View {
|
||||
|
||||
let secret: SecureEnclave.Secret
|
||||
@ObservedObject var store: SecureEnclave.Store
|
||||
|
||||
@State var confirm = ""
|
||||
|
||||
fileprivate var dismissalBlock: () -> ()
|
||||
|
||||
init(secret: SecureEnclave.Secret, store: SecureEnclave.Store, dismissalBlock: @escaping () -> ()) {
|
||||
self.secret = secret
|
||||
self.store = store
|
||||
self.dismissalBlock = dismissalBlock
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
HStack {
|
||||
Image(nsImage: NSApp.applicationIconImage)
|
||||
.resizable()
|
||||
.frame(width: 64, height: 64)
|
||||
.padding()
|
||||
VStack {
|
||||
HStack {
|
||||
Text("Delete \(secret.name)?").bold()
|
||||
Spacer()
|
||||
}
|
||||
HStack {
|
||||
Text("If you delete \(secret.name), you will not be able to recover it. Type \"\(secret.name)\" to confirm.")
|
||||
Spacer()
|
||||
}
|
||||
HStack {
|
||||
Text("Confirm Name:")
|
||||
TextField(secret.name, text: $confirm)
|
||||
}
|
||||
}
|
||||
.onExitCommand(perform: dismissalBlock)
|
||||
}
|
||||
HStack {
|
||||
Spacer()
|
||||
Button(action: delete) {
|
||||
Text("Delete")
|
||||
}.disabled(confirm != secret.name)
|
||||
Button(action: dismissalBlock) {
|
||||
Text("Don't Delete")
|
||||
}
|
||||
}
|
||||
}.padding()
|
||||
}
|
||||
|
||||
func delete() {
|
||||
try! store.delete(secret: secret)
|
||||
dismissalBlock()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user