Files
keevault/MyPass/Views/GroupFilterView.swift
T

50 lines
1.3 KiB
Swift

import SwiftUI
import MyPassCore
struct GroupFilterView: View {
@ObservedObject var vm: GroupFilterViewModel
let rootGroup: MyPassCore.Group
var body: some View {
List {
if !vm.selectedGroupIds.isEmpty {
Button("Clear Filter", action: vm.clear)
}
GroupFilterNode(group: rootGroup, vm: vm)
}
.navigationTitle("Groups")
}
}
private struct GroupFilterNode: View {
let group: MyPassCore.Group
@ObservedObject var vm: GroupFilterViewModel
var body: some View {
if group.subgroups.isEmpty {
row
} else {
DisclosureGroup {
ForEach(group.subgroups) { sub in
GroupFilterNode(group: sub, vm: vm)
}
} label: {
row
}
}
}
private var row: some View {
Button {
vm.toggle(group)
} label: {
HStack {
Image(systemName: vm.isSelected(group) ? "checkmark.circle.fill" : "circle")
.foregroundStyle(vm.isSelected(group) ? Color.accentColor : Color.secondary)
Label(group.name, systemImage: "folder")
}
}
.buttonStyle(.plain)
}
}