mirror of
https://github.com/maxgoedjen/secretive.git
synced 2025-08-19 11:40:56 +00:00
* Enable language mode
* WIP
* WIP
* Fix concurrency issues in SmartCardStore
* Switch to SMAppService
* Bump runners
* Base
* Finish Testing migration
* Tweak async for updater
* More
* Backport mutex
* Revert "Backport mutex"
This reverts commit 9b02afb20c
.
* WIP
* Reenable
* Fix preview.
* Update package.
* Bump to latest public macOS and Xcode
* Bump back down to 6.1
* Update to Xcode 26.
* Fixed tests.
* More cleanup
* Env fixes
* var->let
* Cleanup
* Persist auth async
* Whitespace.
* Whitespace.
* Cleanup.
* Cleanup
* Redoing locks in actors bc of observable
* Actors.
* .
* Specify b5
* Update package to 6.2
* Fix disabled updater
* Remove preconcurrency warning
* Move updater init
70 lines
2.0 KiB
Swift
70 lines
2.0 KiB
Swift
import SwiftUI
|
|
import SecretKit
|
|
|
|
struct SecretListItemView: View {
|
|
|
|
@State var store: AnySecretStore
|
|
var secret: AnySecret
|
|
|
|
@State var isDeleting: Bool = false
|
|
@State var isRenaming: Bool = false
|
|
|
|
var deletedSecret: (AnySecret) -> Void
|
|
var renamedSecret: (AnySecret) -> Void
|
|
|
|
private var showingPopup: Binding<Bool> {
|
|
Binding(
|
|
get: { isDeleting || isRenaming },
|
|
set: {
|
|
if $0 == false {
|
|
isDeleting = false
|
|
isRenaming = false
|
|
}
|
|
}
|
|
)
|
|
}
|
|
|
|
var body: some View {
|
|
NavigationLink(value: secret) {
|
|
if secret.requiresAuthentication {
|
|
HStack {
|
|
Text(secret.name)
|
|
Spacer()
|
|
Image(systemName: "lock")
|
|
}
|
|
} else {
|
|
Text(secret.name)
|
|
}
|
|
}
|
|
.contextMenu {
|
|
if store is AnySecretStoreModifiable {
|
|
Button(action: { isRenaming = true }) {
|
|
Text("secret_list_rename_button")
|
|
}
|
|
Button(action: { isDeleting = true }) {
|
|
Text("secret_list_delete_button")
|
|
}
|
|
}
|
|
}
|
|
.popover(isPresented: showingPopup) {
|
|
if let modifiable = store as? AnySecretStoreModifiable {
|
|
if isDeleting {
|
|
DeleteSecretView(store: modifiable, secret: secret) { deleted in
|
|
isDeleting = false
|
|
if deleted {
|
|
deletedSecret(secret)
|
|
}
|
|
}
|
|
} else if isRenaming {
|
|
RenameSecretView(store: modifiable, secret: secret) { renamed in
|
|
isRenaming = false
|
|
if renamed {
|
|
renamedSecret(secret)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|