From 58c72601db778e30c02eb3266239e40a657f654d Mon Sep 17 00:00:00 2001 From: "yvan.calatayud" Date: Sat, 16 Dec 2023 11:15:36 +0100 Subject: [PATCH] feat : supprimer --- .../Blazor/Modals/DeleteConfirmation.razor.cs | 2 +- Blazor/Blazor/Pages/Chapters.razor | 2 +- Blazor/Blazor/Pages/Chapters.razor.cs | 96 +++++++++++++++---- 3 files changed, 77 insertions(+), 23 deletions(-) diff --git a/Blazor/Blazor/Modals/DeleteConfirmation.razor.cs b/Blazor/Blazor/Modals/DeleteConfirmation.razor.cs index 40de040..bf38444 100644 --- a/Blazor/Blazor/Modals/DeleteConfirmation.razor.cs +++ b/Blazor/Blazor/Modals/DeleteConfirmation.razor.cs @@ -2,7 +2,7 @@ using Blazored.Modal.Services; using Blazored.Modal; using Microsoft.AspNetCore.Components; -using Blazor.Models; +using Blazor.ViewClasses; namespace Blazor.Modals { diff --git a/Blazor/Blazor/Pages/Chapters.razor b/Blazor/Blazor/Pages/Chapters.razor index f2457b9..e600fad 100644 --- a/Blazor/Blazor/Pages/Chapters.razor +++ b/Blazor/Blazor/Pages/Chapters.razor @@ -28,5 +28,5 @@ - + \ No newline at end of file diff --git a/Blazor/Blazor/Pages/Chapters.razor.cs b/Blazor/Blazor/Pages/Chapters.razor.cs index bb9c476..e1a7dad 100644 --- a/Blazor/Blazor/Pages/Chapters.razor.cs +++ b/Blazor/Blazor/Pages/Chapters.razor.cs @@ -1,48 +1,102 @@ -using Microsoft.AspNetCore.Components; -using Blazor.Models; -using Blazorise.DataGrid; -using Blazored.LocalStorage; +using Blazored.LocalStorage; using Blazor.Services; using Blazor.Modals; using Blazored.Modal; using Blazored.Modal.Services; +using Blazor.ViewClasses; +using System.Text; +using Microsoft.JSInterop; +using Microsoft.AspNetCore.Components; +using Blazorise.DataGrid; +using ChoETL; -namespace Blazor.Pages + +namespace Blazor.Pages; +public partial class Chapters { - public partial class Chapters - { - public List chapters; + public List chapters; + + private int totalChapter; + + [Inject] + public NavigationManager NavigationManager { get; set; } + + [CascadingParameter] + public IModalService Modal { get; set; } - private int totalItem; + [Inject] + public IDataService DataService { get; set; } + public IWebHostEnvironment WebHostEnvironment { get; set; } - [Inject] - public NavigationManager NavigationManager { get; set; } + [Inject] + public HttpClient Http { get; set; } - [CascadingParameter] - public IModalService Modal { get; set; } + [Inject] + public ILocalStorageService LocalStorage { get; set; } - [Inject] - public IDataService DataService { get; set; } + [Inject] + public IJSRuntime IJSRuntime { get; set; } - [Inject] - public IWebHostEnvironment WebHostEnvironment { get; set; } + protected override async Task OnAfterRenderAsync(bool firstRender) + { + // Do not treat this action if is not the first render + if (!firstRender) + { + return; + } + + var currentData = await LocalStorage.GetItemAsync("data"); - private async Task OnReadData(DataGridReadDataEventArgs e) + // Check if data exist in the local storage + if (currentData == null) + { + // this code add in the local storage the fake data (we load the data sync for initialize the data before load the OnReadData method) + var originalData = Http.GetFromJsonAsync($"https://trusting-panini.87-106-126-109.plesk.page/api/chapters").Result; + await LocalStorage.SetItemAsync("data", originalData); + } + } + + private async Task OnReadData(DataGridReadDataEventArgs e) { if (e.CancellationToken.IsCancellationRequested) { return; } + // When you use a real API, we use this follow code + //var response = await Http.GetFromJsonAsync( $"https://trusting-panini.87-106-126-109.plesk.page/api/chapters?page={e.Page}&pageSize={e.PageSize}" ); + var response = Http.GetFromJsonAsync($"https://trusting-panini.87-106-126-109.plesk.page/api/chapters").Result; + if (!e.CancellationToken.IsCancellationRequested) { - chapters = await DataService.List(e.Page, e.PageSize); - totalItem = await DataService.Count(); + totalChapter = (await LocalStorage.GetItemAsync>("data")).Count; + chapters = new List(response); // an actual data for the current page + } + } + + private async void Export() + { + StringBuilder sb = new StringBuilder(); + HttpResponseMessage response = await Http.GetAsync("https://trusting-panini.87-106-126-109.plesk.page/api/chapters"); + var json = await response.Content.ReadAsStringAsync(); + using (var jsonFile = ChoJSONReader.LoadText(json)) + { + using (var csvFile = new ChoCSVWriter(sb).WithFirstLineHeader()) + { + csvFile.Write(jsonFile); } } + var sentFile = new MemoryStream(Encoding.UTF32.GetBytes(sb.ToString())); + + using (var streamRef = new DotNetStreamReference(stream: sentFile)) + { + await IJSRuntime.InvokeVoidAsync("downloadFileFromStream", "data.csv", streamRef); + } + } + - private async void OnDelete(int id) + private async void OnDelete(int id) { var parameters = new ModalParameters(); parameters.Add(nameof(Chapter.Id), id);