diff --git a/ModernKeePass/ViewModels/GroupDetailVm.cs b/ModernKeePass/ViewModels/GroupDetailVm.cs index 0684829..34ea573 100644 --- a/ModernKeePass/ViewModels/GroupDetailVm.cs +++ b/ModernKeePass/ViewModels/GroupDetailVm.cs @@ -5,7 +5,7 @@ using System.Collections.Specialized; using System.Linq; using System.Threading.Tasks; using Windows.UI.Xaml.Controls; -using GalaSoft.MvvmLight.Command; +using GalaSoft.MvvmLight.Views; using MediatR; using Microsoft.Extensions.DependencyInjection; using ModernKeePass.Application.Database.Commands.SaveDatabase; @@ -25,9 +25,12 @@ using ModernKeePass.Application.Group.Commands.UpdateGroup; using ModernKeePass.Application.Group.Models; using ModernKeePass.Application.Group.Queries.GetGroup; using ModernKeePass.Application.Group.Queries.SearchEntries; +using ModernKeePass.Common; using ModernKeePass.Domain.AOP; using ModernKeePass.Domain.Enums; using ModernKeePass.Interfaces; +using ModernKeePass.Models; +using RelayCommand = GalaSoft.MvvmLight.Command.RelayCommand; namespace ModernKeePass.ViewModels { @@ -77,25 +80,23 @@ namespace ModernKeePass.ViewModels } } - public bool IsRecycleOnDelete - { - get - { - var database = Database; - return database.IsRecycleBinEnabled && _parent != null && _parent.Id != database.RecycleBinId; - } - } - + public bool IsRecycleOnDelete => Database.IsRecycleBinEnabled && !IsInRecycleBin; + + public bool IsInRecycleBin => _parent != null && _parent.Id == Database.RecycleBinId; + public IEnumerable BreadCrumb { get; } public RelayCommand SaveCommand { get; } public RelayCommand SortEntriesCommand { get; } public RelayCommand SortGroupsCommand { get; } public RelayCommand MoveCommand { get; } + public RelayCommand CreateEntryCommand { get; } + public RelayCommand CreateGroupCommand { get; } private DatabaseVm Database => _mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult(); private readonly IMediator _mediator; + private readonly INavigationService _navigation; private readonly GroupVm _group; private readonly GroupVm _parent; private bool _isEditMode; @@ -103,12 +104,13 @@ namespace ModernKeePass.ViewModels public GroupDetailVm() {} - internal GroupDetailVm(string groupId) : this(groupId, App.Services.GetRequiredService()) + internal GroupDetailVm(string groupId) : this(groupId, App.Services.GetRequiredService(), App.Services.GetRequiredService()) { } - public GroupDetailVm(string groupId, IMediator mediator) + public GroupDetailVm(string groupId, IMediator mediator, INavigationService navigation) { _mediator = mediator; + _navigation = navigation; _group = _mediator.Send(new GetGroupQuery { Id = groupId }).GetAwaiter().GetResult(); if (!string.IsNullOrEmpty(_group.ParentGroupId)) { @@ -120,20 +122,32 @@ namespace ModernKeePass.ViewModels SortEntriesCommand = new RelayCommand(async () => await SortEntriesAsync(), () => IsEditMode); SortGroupsCommand = new RelayCommand(async () => await SortGroupsAsync(), () => IsEditMode); MoveCommand = new RelayCommand(async () => await Move(_parent), () => IsNotRoot); + CreateEntryCommand = new RelayCommand(async () => await AddNewEntry(), () => !IsInRecycleBin); + CreateGroupCommand = new RelayCommand(async () => await AddNewGroup(), () => !IsInRecycleBin); Entries = new ObservableCollection(_group.Entries); Entries.CollectionChanged += Entries_CollectionChanged; Groups = new ObservableCollection(_group.SubGroups); } - public async Task AddNewGroup(string name = "") + public async Task AddNewGroup(string name = "") { - return (await _mediator.Send(new CreateGroupCommand {Name = name, ParentGroup = _group})).Id; + var group = await _mediator.Send(new CreateGroupCommand {Name = name, ParentGroup = _group}); + _navigation.NavigateTo(Constants.Navigation.GroupPage, new NavigationItem + { + Id = group.Id, + IsNew = true + }); } - public async Task AddNewEntry() + public async Task AddNewEntry() { - return (await _mediator.Send(new CreateEntryCommand { ParentGroup = _group })).Id; + var entry = await _mediator.Send(new CreateEntryCommand { ParentGroup = _group }); + _navigation.NavigateTo(Constants.Navigation.EntryPage, new NavigationItem + { + Id = entry.Id, + IsNew = true + }); } public async Task MarkForDelete(string recycleBinTitle) diff --git a/ModernKeePass/Views/GroupDetailPage.xaml b/ModernKeePass/Views/GroupDetailPage.xaml index 76f679b..2b3dc80 100644 --- a/ModernKeePass/Views/GroupDetailPage.xaml +++ b/ModernKeePass/Views/GroupDetailPage.xaml @@ -48,7 +48,14 @@ - + @@ -61,7 +68,7 @@ - + diff --git a/ModernKeePass/Views/GroupDetailPage.xaml.cs b/ModernKeePass/Views/GroupDetailPage.xaml.cs index 7710eeb..08e85c5 100644 --- a/ModernKeePass/Views/GroupDetailPage.xaml.cs +++ b/ModernKeePass/Views/GroupDetailPage.xaml.cs @@ -5,6 +5,7 @@ using Windows.Storage.Streams; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; +using GalaSoft.MvvmLight.Views; using Microsoft.Extensions.DependencyInjection; using ModernKeePass.Application.Common.Interfaces; using ModernKeePass.Application.Entry.Models; @@ -24,6 +25,7 @@ namespace ModernKeePass.Views public sealed partial class GroupDetailPage { private readonly IResourceProxy _resource; + private readonly INavigationService _navigation; /// /// NavigationHelper is used on each page to aid in navigation and @@ -32,11 +34,12 @@ namespace ModernKeePass.Views public NavigationHelper NavigationHelper { get; } public GroupDetailVm Model => (GroupDetailVm)DataContext; - public GroupDetailPage(): this (App.Services.GetRequiredService()) { } - public GroupDetailPage(IResourceProxy resource) + public GroupDetailPage(): this (App.Services.GetRequiredService(), App.Services.GetRequiredService()) { } + public GroupDetailPage(IResourceProxy resource, INavigationService navigation) { InitializeComponent(); _resource = resource; + _navigation = navigation; NavigationHelper = new NavigationHelper(this); } @@ -84,7 +87,7 @@ namespace ModernKeePass.Views return; default: var group = listView?.SelectedItem as Application.Group.Models.GroupVm; - Frame.Navigate(typeof(GroupDetailPage), new NavigationItem { Id = group?.Id }); + _navigation.NavigateTo(Constants.Navigation.GroupPage, new NavigationItem { Id = group?.Id }); break; } } @@ -97,7 +100,7 @@ namespace ModernKeePass.Views return; default: var entry = GridView.SelectedItem as EntryVm; - Frame.Navigate(typeof(EntryDetailPage), new NavigationItem { Id = entry?.Id }); + _navigation.NavigateTo(Constants.Navigation.EntryPage, new NavigationItem { Id = entry?.Id }); break; } } @@ -110,22 +113,6 @@ namespace ModernKeePass.Views e.DestinationItem.Item = e.SourceItem.Item; } } - private async void CreateEntry_ButtonClick(object sender, RoutedEventArgs e) - { - Frame.Navigate(typeof(EntryDetailPage), new NavigationItem - { - Id = await Model.AddNewEntry(), - IsNew = true - }); - } - private async void CreateGroup_ButtonClick(object sender, RoutedEventArgs e) - { - Frame.Navigate(typeof(GroupDetailPage), new NavigationItem - { - Id = await Model.AddNewGroup(), - IsNew = true - }); - } private void GridView_DragItemsStarting(object sender, DragItemsStartingEventArgs e) { @@ -145,7 +132,7 @@ namespace ModernKeePass.Views private void SearchBox_OnResultSuggestionChosen(SearchBox sender, SearchBoxResultSuggestionChosenEventArgs args) { - Frame.Navigate(typeof(EntryDetailPage), new NavigationItem { Id = args.Tag }); + _navigation.NavigateTo(Constants.Navigation.EntryPage, new NavigationItem { Id = args.Tag }); } private void GroupDetailPage_OnSizeChanged(object sender, SizeChangedEventArgs e) diff --git a/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml b/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml index a295250..1543e3d 100644 --- a/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml +++ b/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml @@ -72,7 +72,15 @@ -