Files
keevault/MyPass/ViewModels/GroupFilterViewModel.swift
T
krissandClaude Sonnet 5 f454b4594a fix: correct add-entry default group and clear search on hide
- GroupFilterViewModel now tracks lastToggledGroupId (the single group
  most recently toggled to a non-empty selection), since toggling a
  group with subgroups expands selectedGroupIds to include the whole
  subtree, breaking the previous count==1 check used to infer the
  active filter group.
- VaultViewModel exposes lastToggledGroupId, forwarded from
  GroupFilterViewModel by VaultRootView (ContentView.swift), and
  EntryListView.defaultGroupId now reads it instead of the broken
  selectedGroupIds.count == 1 check, so the add-entry sheet defaults
  new entries into the group actually being filtered by, not silently
  back to root.
- EntryListView's search toggle button now clears vm.searchQuery when
  hiding the search bar, so a hidden bar can no longer keep filtering
  the list invisibly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
2026-09-19 17:25:06 +02:00

34 lines
1.0 KiB
Swift

import Foundation
import Combine
import MyPassCore
@MainActor
final class GroupFilterViewModel: ObservableObject {
@Published var selectedGroupIds: Set<UUID> = []
/// 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: MyPassCore.Group) -> Bool {
selectedGroupIds.contains(group.id)
}
func toggle(_ group: MyPassCore.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
}
}