diff --git a/src/KeyKeeper/ViewModels/UnlockedRepositoryViewModel.cs b/src/KeyKeeper/ViewModels/UnlockedRepositoryViewModel.cs index eadaac4..48db0af 100644 --- a/src/KeyKeeper/ViewModels/UnlockedRepositoryViewModel.cs +++ b/src/KeyKeeper/ViewModels/UnlockedRepositoryViewModel.cs @@ -143,6 +143,16 @@ public class UnlockedRepositoryViewModel : ViewModelBase return true; } + public void RemoveEntryFromGroup(PassStoreEntry entry) + { + if (currentDirectory.GroupType == FileFormatConstants.GROUP_TYPE_DEFAULT) + return; + + passStore.DeleteEntry(currentDirectory, entry.Id); + HasUnsavedChanges = true; + OnPropertyChanged(nameof(Passwords)); + } + public void UpdateEntry(PassStoreEntryPassword updatedEntry) { passStore.UpdateEntry(null, updatedEntry.Id, updatedEntry); diff --git a/src/KeyKeeper/Views/RepositoryWindow.axaml b/src/KeyKeeper/Views/RepositoryWindow.axaml index 72c8c9e..260c37d 100644 --- a/src/KeyKeeper/Views/RepositoryWindow.axaml +++ b/src/KeyKeeper/Views/RepositoryWindow.axaml @@ -159,6 +159,7 @@ + diff --git a/src/KeyKeeper/Views/RepositoryWindow.axaml.cs b/src/KeyKeeper/Views/RepositoryWindow.axaml.cs index 431eab1..ef16083 100644 --- a/src/KeyKeeper/Views/RepositoryWindow.axaml.cs +++ b/src/KeyKeeper/Views/RepositoryWindow.axaml.cs @@ -242,6 +242,16 @@ public partial class RepositoryWindow : Window .OfType() .FirstOrDefault(m => m.Name == "entryCtxMenuAddToGroup"); + var removeFromGroupItem = contextMenu.Items + .OfType() + .FirstOrDefault(m => m.Name == "entryCtxMenuRemoveFromGroup"); + + var isNonDefaultGroup = pageVm.SelectedPasswordGroup.GroupType != FileFormatConstants.GROUP_TYPE_DEFAULT; + if (removeFromGroupItem != null) + { + removeFromGroupItem.IsVisible = isNonDefaultGroup; + } + if (addToGroupItem == null) return; @@ -309,6 +319,14 @@ public partial class RepositoryWindow : Window EditEntry(vm, pageVm, ent); } } + else if (s.Name == "entryCtxMenuRemoveFromGroup") + { + if (DataContext is RepositoryWindowViewModel vm && vm.CurrentPage is UnlockedRepositoryViewModel pageVm) + { + pageVm.RemoveEntryFromGroup(ent); + this.FindControlRecursive("NotificationHost")?.Show("Removed from group"); + } + } else if (s.Name == "entryCtxMenuDelete") { if (DataContext is RepositoryWindowViewModel vm && vm.CurrentPage is UnlockedRepositoryViewModel pageVm)