diff --git a/blazor_lab/Pages/Add.razor.cs b/blazor_lab/Pages/Add.razor.cs index 935ec0c..6badefb 100644 --- a/blazor_lab/Pages/Add.razor.cs +++ b/blazor_lab/Pages/Add.razor.cs @@ -1,5 +1,5 @@ using blazor_lab.Models; -using Blazored.LocalStorage; +using blazor_lab.Services; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Forms; @@ -9,13 +9,10 @@ namespace blazor_lab.Pages { [Inject] - public ILocalStorageService LocalStorageService { get; set; } + public IDataService DataService { get; set; } [Inject] - public IWebHostEnvironment WebHostEnvironment { get; set; } - - [Inject] - public NavigationManager NavigationManager { get; set; } + public NavigationManager NavigationManager { get; set; } /// /// The default enchant categories. @@ -39,43 +36,7 @@ namespace blazor_lab.Pages private async void HandleValidSubmit() { - // Get the current data - var currentData = await LocalStorageService.GetItemAsync>("data"); - - // Simulate the Id - itemModel.Id = currentData.Max(item => item.Id) + 1; - - // Add the item to the current data - currentData.Add(new Item - { - Id = itemModel.Id, - DisplayName = itemModel.DisplayName, - Name = itemModel.Name, - RepairWith = itemModel.RepairWith, - EnchantCategories = itemModel.EnchantCategories, - MaxDurability = itemModel.MaxDurability, - StackSize = itemModel.StackSize, - CreatedDate = DateTime.Now - }); - - // Save the image - var imagePathInfo = new DirectoryInfo($"{WebHostEnvironment.WebRootPath}/images"); - - // Check if the folder "images" exist - if (!imagePathInfo.Exists) - { - imagePathInfo.Create(); - } - - // Determine the image name - var fileName = new FileInfo($"{imagePathInfo}/{itemModel.Name}.png"); - - // Write the file content - await File.WriteAllBytesAsync(fileName.FullName, itemModel.ImageContent); - - // Save the data - await LocalStorageService.SetItemAsync("data", currentData); - + await DataService.Add(itemModel); NavigationManager.NavigateTo("list"); } private async Task LoadImage(InputFileChangeEventArgs e) diff --git a/blazor_lab/Pages/List.razor.cs b/blazor_lab/Pages/List.razor.cs index 818b8af..f5f5870 100644 --- a/blazor_lab/Pages/List.razor.cs +++ b/blazor_lab/Pages/List.razor.cs @@ -1,4 +1,5 @@ using blazor_lab.Models; +using blazor_lab.Services; using Blazored.LocalStorage; using Blazorise.DataGrid; using Microsoft.AspNetCore.Components; @@ -12,16 +13,10 @@ namespace blazor_lab.Pages private int totalItems; [Inject] - public HttpClient HttpClient { get; set; } + public IDataService DataService { get; set; } [Inject] - public ILocalStorageService LocalStorageService { get; set; } - - [Inject] - public NavigationManager NavigationManager { get; set; } - - [Inject] - public IWebHostEnvironment WebHostEnvironment { get; set; } + public IWebHostEnvironment WebHostEnvironment { get; set; } protected override async Task OnAfterRenderAsync(bool firstRender) { @@ -31,15 +26,7 @@ namespace blazor_lab.Pages return; } - var currentData = await LocalStorageService.GetItemAsync("data"); - - // 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 = HttpClient.GetFromJsonAsync($"{NavigationManager.BaseUri}fake-data.json").Result; - await LocalStorageService.SetItemAsync("data", originalData); - } + var currentData = await DataService.List(1, 10); } private async Task OnReadData(DataGridReadDataEventArgs e) @@ -49,20 +36,16 @@ namespace blazor_lab.Pages return; } - //Real API => - //var response = await HttpClient.GetJsonAsync( $"http://my-api/api/data?page={e.Page}&pageSize={e.PageSize}" ); - var response = (await LocalStorageService.GetItemAsync("data")).Skip((e.Page - 1) * e.PageSize).Take(e.PageSize).ToList(); - if (!e.CancellationToken.IsCancellationRequested) { - totalItems = (await LocalStorageService.GetItemAsync>("data")).Count; - items = new List(response); // an actual data for the current page + items = await DataService.List(e.Page, e.PageSize); + totalItems = await DataService.Count(); } } protected override async Task OnInitializedAsync() { - items = await HttpClient.GetFromJsonAsync>($"{NavigationManager.BaseUri}fake-data.json"); + items = await DataService.List(1, 10); } } } diff --git a/blazor_lab/Program.cs b/blazor_lab/Program.cs index 6be187b..e04d440 100644 --- a/blazor_lab/Program.cs +++ b/blazor_lab/Program.cs @@ -3,6 +3,7 @@ using Blazorise; using Blazorise.Bootstrap; using Blazorise.Icons.FontAwesome; using Blazored.LocalStorage; +using blazor_lab.Services; var builder = WebApplication.CreateBuilder(args); @@ -20,6 +21,8 @@ builder.Services builder.Services.AddBlazoredLocalStorage(); +builder.Services.AddScoped(); + var app = builder.Build(); // Configure the HTTP request pipeline. diff --git a/blazor_lab/Services/DataLocalService.cs b/blazor_lab/Services/DataLocalService.cs new file mode 100644 index 0000000..d4c05d4 --- /dev/null +++ b/blazor_lab/Services/DataLocalService.cs @@ -0,0 +1,99 @@ +using blazor_lab.Models; +using Blazored.LocalStorage; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Hosting; + +namespace blazor_lab.Services +{ + public class DataLocalService : IDataService + { + + + private readonly HttpClient _httpClient; + private readonly ILocalStorageService _localStorageService; + private readonly NavigationManager _navigationManager; + private readonly IWebHostEnvironment _webHostEnvironment; + private readonly string pathToFakeData; + + public DataLocalService( + HttpClient httpClient, + ILocalStorageService localStorageService, + NavigationManager navigationManager, + IWebHostEnvironment webHostEnvironment + ) + { + _httpClient = httpClient; + _localStorageService = localStorageService; + _navigationManager = navigationManager; + _webHostEnvironment = webHostEnvironment; + pathToFakeData = $"{_navigationManager.BaseUri}fake-data.json"; + } + + public async Task Add(ItemModel itemModel) + { + // Get the current data + var currentData = await _localStorageService.GetItemAsync>("data"); + + // Simulate the Id + itemModel.Id = currentData.Max(item => item.Id) + 1; + + // Add the item to the current data + currentData.Add(new Item + { + Id = itemModel.Id, + DisplayName = itemModel.DisplayName, + Name = itemModel.Name, + RepairWith = itemModel.RepairWith, + EnchantCategories = itemModel.EnchantCategories, + MaxDurability = itemModel.MaxDurability, + StackSize = itemModel.StackSize, + CreatedDate = DateTime.Now + }); + + // Save the image + var imagePathInfo = new DirectoryInfo($"{_webHostEnvironment.WebRootPath}/images"); + + // Check if the folder "images" exist + if (!imagePathInfo.Exists) + { + imagePathInfo.Create(); + } + + // Determine the image name + var fileName = new FileInfo($"{imagePathInfo}/{itemModel.Name}.png"); + + // Write the file content + await File.WriteAllBytesAsync(fileName.FullName, itemModel.ImageContent); + + // Save the data + await _localStorageService.SetItemAsync("data", currentData); + } + + public async Task Count() + { + if (await _localStorageService.GetItemAsync("data") == null) + { + var originalData = + await _httpClient + .GetFromJsonAsync(pathToFakeData); + + await _localStorageService.SetItemAsync("data", originalData); + } + + return (await _localStorageService.GetItemAsync("data")).Length; + } + + public async Task> List(int currentPage, int pageSize) + { + if (await _localStorageService.GetItemAsync("data") == null) + { + var originalData = + await _httpClient + .GetFromJsonAsync(pathToFakeData); + await _localStorageService.SetItemAsync("data", originalData); + } + + return (await _localStorageService.GetItemAsync("data")).Skip((currentPage - 1) * pageSize).Take(pageSize).ToList(); + } + } +} diff --git a/blazor_lab/Services/IDataService.cs b/blazor_lab/Services/IDataService.cs new file mode 100644 index 0000000..5e2c307 --- /dev/null +++ b/blazor_lab/Services/IDataService.cs @@ -0,0 +1,11 @@ +using blazor_lab.Models; + +namespace blazor_lab.Services +{ + public interface IDataService + { + Task Add(ItemModel itemModel); + Task Count(); + Task> List(int currentPage, int pageSize); + } +} diff --git a/blazor_lab/blazor_lab.csproj b/blazor_lab/blazor_lab.csproj index bf3e670..c45c8d4 100644 --- a/blazor_lab/blazor_lab.csproj +++ b/blazor_lab/blazor_lab.csproj @@ -1,4 +1,4 @@ - + net6.0 diff --git a/blazor_lab/wwwroot/images/zdada.png b/blazor_lab/wwwroot/images/zdada.png new file mode 100644 index 0000000..989ea6a Binary files /dev/null and b/blazor_lab/wwwroot/images/zdada.png differ