secretive/Sources/Secretive/Views/StoreListView.swift
Max Goedjen 998f4b9bf4
WIP
2025-08-10 14:23:57 -07:00

64 lines
1.9 KiB
Swift

import SwiftUI
import Combine
import SecretKit
struct StoreListView: View {
@Binding var activeSecret: AnySecret?
@Environment(SecretStoreList.self) private var storeList: SecretStoreList
private func secretDeleted(secret: AnySecret) {
activeSecret = nextDefaultSecret
}
private func secretRenamed(secret: AnySecret) {
activeSecret = secret
}
var body: some View {
NavigationSplitView {
List(selection: $activeSecret) {
ForEach(storeList.stores) { store in
if store.isAvailable {
Section(header: Text(store.name)) {
if store.secrets.isEmpty {
EmptyStoreView(store: store)
} else {
ForEach(store.secrets) { secret in
SecretListItemView(
store: store,
secret: secret,
deletedSecret: secretDeleted,
renamedSecret: secretRenamed
)
}
}
}
}
}
}
} detail: {
if let activeSecret {
SecretDetailView(secret: activeSecret)
} else {
EmptyStoreView(store: storeList.stores.first)
}
}
.navigationSplitViewStyle(.balanced)
.onAppear {
activeSecret = nextDefaultSecret
}
.frame(minWidth: 100, idealWidth: 240)
}
}
extension StoreListView {
private var nextDefaultSecret: AnySecret? {
return storeList.stores.compactMap(\.secrets.first).first
}
}