diff --git a/CetteAppliVaMarcher/CetteAppliVaMarcher/App.razor b/CetteAppliVaMarcher/CetteAppliVaMarcher/App.razor index 623580d..6346f35 100644 --- a/CetteAppliVaMarcher/CetteAppliVaMarcher/App.razor +++ b/CetteAppliVaMarcher/CetteAppliVaMarcher/App.razor @@ -1,12 +1,14 @@ - - - - - - - Not found - -

Sorry, there's nothing at this address.

-
-
-
+ + + + + + + + Not found + +

Sorry, there's nothing at this address.

+
+
+
+
\ No newline at end of file diff --git a/CetteAppliVaMarcher/CetteAppliVaMarcher/CetteAppliVaMarcher.csproj b/CetteAppliVaMarcher/CetteAppliVaMarcher/CetteAppliVaMarcher.csproj index 93b929d..f2eba01 100644 --- a/CetteAppliVaMarcher/CetteAppliVaMarcher/CetteAppliVaMarcher.csproj +++ b/CetteAppliVaMarcher/CetteAppliVaMarcher/CetteAppliVaMarcher.csproj @@ -8,6 +8,7 @@ + diff --git a/CetteAppliVaMarcher/CetteAppliVaMarcher/Modals/DeleteConfirmation.razor b/CetteAppliVaMarcher/CetteAppliVaMarcher/Modals/DeleteConfirmation.razor new file mode 100644 index 0000000..b565665 --- /dev/null +++ b/CetteAppliVaMarcher/CetteAppliVaMarcher/Modals/DeleteConfirmation.razor @@ -0,0 +1,10 @@ +
+ +

+ Are you sure you want to delete @item.DisplayName ? +

+ + + + +
\ No newline at end of file diff --git a/CetteAppliVaMarcher/CetteAppliVaMarcher/Modals/DeleteConfirmation.razor.cs b/CetteAppliVaMarcher/CetteAppliVaMarcher/Modals/DeleteConfirmation.razor.cs new file mode 100644 index 0000000..eea4c62 --- /dev/null +++ b/CetteAppliVaMarcher/CetteAppliVaMarcher/Modals/DeleteConfirmation.razor.cs @@ -0,0 +1,38 @@ +using Blazored.Modal; +using Blazored.Modal.Services; +using CetteAppliVaMarcher.Models; +using CetteAppliVaMarcher.Services; +using Microsoft.AspNetCore.Components; + +namespace CetteAppliVaMarcher.Modals +{ + public partial class DeleteConfirmation + { + [CascadingParameter] + public BlazoredModalInstance ModalInstance { get; set; } + + [Inject] + public IDataService DataService { get; set; } + + [Parameter] + public int Id { get; set; } + + private Item item = new Item(); + + protected override async Task OnInitializedAsync() + { + // Get the item + item = await DataService.GetById(Id); + } + + void ConfirmDelete() + { + ModalInstance.CloseAsync(ModalResult.Ok(true)); + } + + void Cancel() + { + ModalInstance.CancelAsync(); + } + } +} diff --git a/CetteAppliVaMarcher/CetteAppliVaMarcher/Pages/List.razor b/CetteAppliVaMarcher/CetteAppliVaMarcher/Pages/List.razor index 42d4f39..61faa66 100644 --- a/CetteAppliVaMarcher/CetteAppliVaMarcher/Pages/List.razor +++ b/CetteAppliVaMarcher/CetteAppliVaMarcher/Pages/List.razor @@ -47,6 +47,7 @@ Editer + \ No newline at end of file diff --git a/CetteAppliVaMarcher/CetteAppliVaMarcher/Pages/List.razor.cs b/CetteAppliVaMarcher/CetteAppliVaMarcher/Pages/List.razor.cs index 2c12831..710b31c 100644 --- a/CetteAppliVaMarcher/CetteAppliVaMarcher/Pages/List.razor.cs +++ b/CetteAppliVaMarcher/CetteAppliVaMarcher/Pages/List.razor.cs @@ -1,5 +1,8 @@ using Blazored.LocalStorage; +using Blazored.Modal; +using Blazored.Modal.Services; using Blazorise.DataGrid; +using CetteAppliVaMarcher.Modals; using CetteAppliVaMarcher.Models; using CetteAppliVaMarcher.Services; using Microsoft.AspNetCore.Components; @@ -17,6 +20,12 @@ namespace CetteAppliVaMarcher.Pages [Inject] public IWebHostEnvironment WebHostEnvironment { get; set; } + + [Inject] + public NavigationManager NavigationManager { get; set; } + + [CascadingParameter] + public IModalService Modal { get; set; } private async Task OnReadData(DataGridReadDataEventArgs e) { @@ -31,5 +40,24 @@ namespace CetteAppliVaMarcher.Pages totalItem = await DataService.Count(); } } + private async void OnDelete(int id) + { + var parameters = new ModalParameters(); + parameters.Add(nameof(Item.Id), id); + + var modal = Modal.Show("Delete Confirmation", parameters); + var result = await modal.Result; + + if (result.Cancelled) + { + return; + } + + await DataService.Delete(id); + + // Reload the page + NavigationManager.NavigateTo("list", true); + } + } } diff --git a/CetteAppliVaMarcher/CetteAppliVaMarcher/Pages/_Layout.cshtml b/CetteAppliVaMarcher/CetteAppliVaMarcher/Pages/_Layout.cshtml index bd5016a..6397313 100644 --- a/CetteAppliVaMarcher/CetteAppliVaMarcher/Pages/_Layout.cshtml +++ b/CetteAppliVaMarcher/CetteAppliVaMarcher/Pages/_Layout.cshtml @@ -32,6 +32,9 @@ + + + diff --git a/CetteAppliVaMarcher/CetteAppliVaMarcher/Program.cs b/CetteAppliVaMarcher/CetteAppliVaMarcher/Program.cs index 72af469..d7e1296 100644 --- a/CetteAppliVaMarcher/CetteAppliVaMarcher/Program.cs +++ b/CetteAppliVaMarcher/CetteAppliVaMarcher/Program.cs @@ -6,6 +6,7 @@ using Blazored.LocalStorage; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; using CetteAppliVaMarcher.Services; +using Blazored.Modal; var builder = WebApplication.CreateBuilder(args); @@ -21,6 +22,7 @@ builder.Services .AddFontAwesomeIcons(); builder.Services.AddScoped(); builder.Services.AddBlazoredLocalStorage(); +builder.Services.AddBlazoredModal(); var app = builder.Build(); diff --git a/CetteAppliVaMarcher/CetteAppliVaMarcher/Services/DataLocalService.cs b/CetteAppliVaMarcher/CetteAppliVaMarcher/Services/DataLocalService.cs index 955ed3c..d2256cb 100644 --- a/CetteAppliVaMarcher/CetteAppliVaMarcher/Services/DataLocalService.cs +++ b/CetteAppliVaMarcher/CetteAppliVaMarcher/Services/DataLocalService.cs @@ -133,6 +133,29 @@ namespace CetteAppliVaMarcher.Services // Modify the content of the item ItemFactory.Update(item, model); + // Save the data + await _localStorage.SetItemAsync("data", currentData); + } + public async Task Delete(int id) + { + // Get the current data + var currentData = await _localStorage.GetItemAsync>("data"); + + // Get the item int the list + var item = currentData.FirstOrDefault(w => w.Id == id); + + // Delete item in + currentData.Remove(item); + + // Delete the image + var imagePathInfo = new DirectoryInfo($"{_webHostEnvironment.WebRootPath}/images"); + var fileName = new FileInfo($"{imagePathInfo}/{item.Name}.png"); + + if (fileName.Exists) + { + File.Delete(fileName.FullName); + } + // Save the data await _localStorage.SetItemAsync("data", currentData); } diff --git a/CetteAppliVaMarcher/CetteAppliVaMarcher/Services/IDataServices.cs b/CetteAppliVaMarcher/CetteAppliVaMarcher/Services/IDataServices.cs index 9389095..e9f221a 100644 --- a/CetteAppliVaMarcher/CetteAppliVaMarcher/Services/IDataServices.cs +++ b/CetteAppliVaMarcher/CetteAppliVaMarcher/Services/IDataServices.cs @@ -9,5 +9,6 @@ namespace CetteAppliVaMarcher.Services Task> List(int currentPage, int pageSize); Task GetById(int id); Task Update(int id, ItemModel model); + Task Delete(int id); } } \ No newline at end of file diff --git a/CetteAppliVaMarcher/CetteAppliVaMarcher/_Imports.razor b/CetteAppliVaMarcher/CetteAppliVaMarcher/_Imports.razor index 929804c..0ce02ea 100644 --- a/CetteAppliVaMarcher/CetteAppliVaMarcher/_Imports.razor +++ b/CetteAppliVaMarcher/CetteAppliVaMarcher/_Imports.razor @@ -8,4 +8,6 @@ @using Microsoft.JSInterop @using CetteAppliVaMarcher @using CetteAppliVaMarcher.Shared -@using Blazorise.DataGrid \ No newline at end of file +@using Blazorise.DataGrid +@using Blazored.Modal +@using Blazored.Modal.Services \ No newline at end of file diff --git a/CetteAppliVaMarcher/CetteAppliVaMarcher/wwwroot/images/cactus.png b/CetteAppliVaMarcher/CetteAppliVaMarcher/wwwroot/images/cactus.png deleted file mode 100644 index a7446c9..0000000 Binary files a/CetteAppliVaMarcher/CetteAppliVaMarcher/wwwroot/images/cactus.png and /dev/null differ