From 11f908aab23d34e9459f35317312fa1e473a625e Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Tue, 17 May 2016 23:25:40 -0400 Subject: [PATCH] folder delete --- .../Abstractions/Services/IFolderService.cs | 1 + src/App/Pages/SettingsEditFolderPage.cs | 42 ++++++++++++++++++- src/App/Services/FolderService.cs | 11 +++++ 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/App/Abstractions/Services/IFolderService.cs b/src/App/Abstractions/Services/IFolderService.cs index 35496e3d5..7a696a88a 100644 --- a/src/App/Abstractions/Services/IFolderService.cs +++ b/src/App/Abstractions/Services/IFolderService.cs @@ -10,5 +10,6 @@ namespace Bit.App.Abstractions Task GetByIdAsync(string id); Task> GetAllAsync(); Task> SaveAsync(Folder folder); + Task> DeleteAsync(string folderId); } } diff --git a/src/App/Pages/SettingsEditFolderPage.cs b/src/App/Pages/SettingsEditFolderPage.cs index dda8d9030..d0a13b78c 100644 --- a/src/App/Pages/SettingsEditFolderPage.cs +++ b/src/App/Pages/SettingsEditFolderPage.cs @@ -38,12 +38,15 @@ namespace Bit.App.Pages var nameCell = new FormEntryCell(AppResources.Name); nameCell.Entry.Text = folder.Name.Decrypt(); + var deleteCell = new ExtendedTextCell { Text = AppResources.Delete, TextColor = Color.Red }; + deleteCell.Tapped += DeleteCell_Tapped; + var mainTable = new ExtendedTableView { Intent = TableIntent.Settings, EnableScrolling = false, - HasUnevenRows = true, EnableSelection = false, + HasUnevenRows = true, Root = new TableRoot { new TableSection() @@ -59,6 +62,20 @@ namespace Bit.App.Pages mainTable.EstimatedRowHeight = 70; } + var deleteTable = new ExtendedTableView + { + Intent = TableIntent.Settings, + EnableScrolling = false, + EnableSelection = true, + Root = new TableRoot + { + new TableSection() + { + deleteCell + } + } + }; + var saveToolBarItem = new ToolbarItem(AppResources.Save, null, async () => { if(!_connectivity.IsConnected) @@ -85,7 +102,7 @@ namespace Bit.App.Pages }, ToolbarItemOrder.Default, 0); Title = "Edit Folder"; - Content = mainTable; + Content = new StackLayout { Children = { mainTable, deleteTable } }; ToolbarItems.Add(saveToolBarItem); if(Device.OS == TargetPlatform.iOS) { @@ -98,6 +115,27 @@ namespace Bit.App.Pages } } + private async void DeleteCell_Tapped(object sender, EventArgs e) + { + // TODO: Validate the delete operation. ex. Cannot delete a folder that has sites in it? + + if(!await _userDialogs.ConfirmAsync(AppResources.DoYouReallyWantToDelete, null, AppResources.Yes, AppResources.No)) + { + return; + } + + var deleteTask = _folderService.DeleteAsync(_folderId); + _userDialogs.ShowLoading("Deleting...", MaskType.Black); + await deleteTask; + _userDialogs.HideLoading(); + + if((await deleteTask).Succeeded) + { + await Navigation.PopModalAsync(); + _userDialogs.SuccessToast("Folder deleted."); + } + } + private void AlertNoConnection() { DisplayAlert(AppResources.InternetConnectionRequiredTitle, AppResources.InternetConnectionRequiredMessage, AppResources.Ok); diff --git a/src/App/Services/FolderService.cs b/src/App/Services/FolderService.cs index f1e7c17fa..31faff70b 100644 --- a/src/App/Services/FolderService.cs +++ b/src/App/Services/FolderService.cs @@ -74,5 +74,16 @@ namespace Bit.App.Services return response; } + + public async Task> DeleteAsync(string folderId) + { + ApiResult response = await _folderApiRepository.DeleteAsync(folderId); + if(response.Succeeded) + { + await _folderRepository.DeleteAsync(folderId); + } + + return response; + } } }