import Foundation import Combine import KeeVaultCore @MainActor final class GroupFilterViewModel: ObservableObject { @Published var selectedGroupIds: Set = [] /// The group id passed to the most recent `toggle(_:)` call that resulted in a non-empty /// selection, used as a "best effort" default group for new entries. Cleared to `nil` /// whenever a toggle empties the selection, or by `clear()`. @Published private(set) var lastToggledGroupId: UUID? private let session: VaultSession init(session: VaultSession) { self.session = session } func isSelected(_ group: KeeVaultCore.Group) -> Bool { selectedGroupIds.contains(group.id) } func toggle(_ group: KeeVaultCore.Group) { guard let root = session.database?.root else { return } selectedGroupIds = GroupSelection.toggling(group.id, in: root, current: selectedGroupIds) lastToggledGroupId = selectedGroupIds.isEmpty ? nil : group.id } func clear() { selectedGroupIds = [] lastToggledGroupId = nil } }