From 81b2650d5385a1990dd8bec603cdb46a02b55357 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Victor=20P=C3=A9rez=20Ngounou?= Date: Sun, 15 Jan 2023 02:07:35 +0100 Subject: [PATCH 1/7] Add new Feature(Edit, Update, Service and globalization) --- TP Blazor/App.razor | 26 ++-- TP Blazor/Factories/ItemFactory.cs | 48 +++++++ TP Blazor/Modals/DeleteConfirmation.razor | 10 ++ TP Blazor/Modals/DeleteConfirmation.razor.cs | 37 +++++ TP Blazor/Pages/Edit.razor | 81 +++++++++++ TP Blazor/Pages/Edit.razor.cs | 106 +++++++++++++++ TP Blazor/Pages/List.razor | 34 ++++- TP Blazor/Pages/List.razor.cs | 60 ++++++++- TP Blazor/Pages/_Host.cshtml | 4 +- TP Blazor/Program.cs | 29 +++- TP Blazor/Services/DataLocalService.cs | 134 +++++++++++++++++++ TP Blazor/Services/IDataService.cs | 13 ++ TP Blazor/TP Blazor.csproj | 2 + TP Blazor/_Imports.razor | 2 + 14 files changed, 563 insertions(+), 23 deletions(-) create mode 100644 TP Blazor/Factories/ItemFactory.cs create mode 100644 TP Blazor/Modals/DeleteConfirmation.razor create mode 100644 TP Blazor/Modals/DeleteConfirmation.razor.cs create mode 100644 TP Blazor/Pages/Edit.razor create mode 100644 TP Blazor/Pages/Edit.razor.cs create mode 100644 TP Blazor/Services/DataLocalService.cs create mode 100644 TP Blazor/Services/IDataService.cs diff --git a/TP Blazor/App.razor b/TP Blazor/App.razor index 6fd3ed1..09ed54d 100644 --- a/TP Blazor/App.razor +++ b/TP Blazor/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/TP Blazor/Factories/ItemFactory.cs b/TP Blazor/Factories/ItemFactory.cs new file mode 100644 index 0000000..c716645 --- /dev/null +++ b/TP Blazor/Factories/ItemFactory.cs @@ -0,0 +1,48 @@ +using TP_Blazor.Models; + +namespace TP_Blazor.Factories; + +public static class ItemFactory +{ + public static ItemModel ToModel(Item item, byte[] imageContent) + { + return new ItemModel + { + Id = item.Id, + DisplayName = item.DisplayName, + Name = item.Name, + RepairWith = item.RepairWith, + EnchantCategories = item.EnchantCategories, + MaxDurability = item.MaxDurability, + StackSize = item.StackSize, + ImageContent = imageContent + }; + } + + public static Item Create(ItemModel model) + { + return new Item + { + Id = model.Id, + DisplayName = model.DisplayName, + Name = model.Name, + RepairWith = model.RepairWith, + EnchantCategories = model.EnchantCategories, + MaxDurability = model.MaxDurability, + StackSize = model.StackSize, + CreatedDate = DateTime.Now + }; + } + + public static void Update(Item item, ItemModel model) + { + item.DisplayName = model.DisplayName; + item.Name = model.Name; + item.RepairWith = model.RepairWith; + item.EnchantCategories = model.EnchantCategories; + item.MaxDurability = model.MaxDurability; + item.StackSize = model.StackSize; + item.UpdatedDate = DateTime.Now; + } + +} \ No newline at end of file diff --git a/TP Blazor/Modals/DeleteConfirmation.razor b/TP Blazor/Modals/DeleteConfirmation.razor new file mode 100644 index 0000000..561147f --- /dev/null +++ b/TP Blazor/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/TP Blazor/Modals/DeleteConfirmation.razor.cs b/TP Blazor/Modals/DeleteConfirmation.razor.cs new file mode 100644 index 0000000..b46bc18 --- /dev/null +++ b/TP Blazor/Modals/DeleteConfirmation.razor.cs @@ -0,0 +1,37 @@ +using Blazored.Modal; +using Blazored.Modal.Services; +using Microsoft.AspNetCore.Components; +using TP_Blazor.Models; +using TP_Blazor.Services; + +namespace TP_Blazor.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(); + } +} \ No newline at end of file diff --git a/TP Blazor/Pages/Edit.razor b/TP Blazor/Pages/Edit.razor new file mode 100644 index 0000000..9aecaa2 --- /dev/null +++ b/TP Blazor/Pages/Edit.razor @@ -0,0 +1,81 @@ +@page "/edit/{Id:int}" + +

Edit

+ + + + +

+ +

+

+ +

+

+ +

+

+ +

+

+ Enchant categories: +

+ @foreach (var item in enchantCategories) + { + + } +
+

+

+ Repair with: +

+ @foreach (var item in repairWith) + { + + } +
+

+

+ +

+

+ +

+

+ +

+ + +
\ No newline at end of file diff --git a/TP Blazor/Pages/Edit.razor.cs b/TP Blazor/Pages/Edit.razor.cs new file mode 100644 index 0000000..99ee15c --- /dev/null +++ b/TP Blazor/Pages/Edit.razor.cs @@ -0,0 +1,106 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Forms; +using TP_Blazor.Factories; +using TP_Blazor.Models; +using TP_Blazor.Services; + +namespace TP_Blazor.Pages; + +public partial class Edit +{ + [Parameter] + public int Id { get; set; } + + private List enchantCategories = new List() { "armor", "armor_head", "armor_chest", "weapon", "digger", "breakable", "vanishable" }; + + /// + /// The current item model + /// + private ItemModel itemModel = new() + { + EnchantCategories = new List(), + RepairWith = new List() + }; + + /// + /// The default repair with. + /// + private List repairWith = new List() { "oak_planks", "spruce_planks", "birch_planks", "jungle_planks", "acacia_planks", "dark_oak_planks", "crimson_planks", "warped_planks" }; + + [Inject] + public IDataService DataService { get; set; } + + [Inject] + public NavigationManager NavigationManager { get; set; } + + [Inject] + public IWebHostEnvironment WebHostEnvironment { get; set; } + + protected override async Task OnInitializedAsync() + { + var item = await DataService.GetById(Id); + + var fileContent = await File.ReadAllBytesAsync($"{WebHostEnvironment.WebRootPath}/images/default.png"); + + if (File.Exists($"{WebHostEnvironment.WebRootPath}/images/{itemModel.Name}.png")) + { + fileContent = await File.ReadAllBytesAsync($"{WebHostEnvironment.WebRootPath}/images/{item.Name}.png"); + } + + // Set the model with the item + itemModel =ItemFactory.ToModel(item, fileContent); + } + + private async void HandleValidSubmit() + { + await DataService.Update(Id, itemModel); + + NavigationManager.NavigateTo("list"); + } + + private async Task LoadImage(InputFileChangeEventArgs e) + { + // Set the content of the image to the model + using (var memoryStream = new MemoryStream()) + { + await e.File.OpenReadStream().CopyToAsync(memoryStream); + itemModel.ImageContent = memoryStream.ToArray(); + } + } + + private void OnEnchantCategoriesChange(string item, object checkedValue) + { + if ((bool)checkedValue) + { + if (!itemModel.EnchantCategories.Contains(item)) + { + itemModel.EnchantCategories.Add(item); + } + + return; + } + + if (itemModel.EnchantCategories.Contains(item)) + { + itemModel.EnchantCategories.Remove(item); + } + } + + private void OnRepairWithChange(string item, object checkedValue) + { + if ((bool)checkedValue) + { + if (!itemModel.RepairWith.Contains(item)) + { + itemModel.RepairWith.Add(item); + } + + return; + } + + if (itemModel.RepairWith.Contains(item)) + { + itemModel.RepairWith.Remove(item); + } + } +} \ No newline at end of file diff --git a/TP Blazor/Pages/List.razor b/TP Blazor/Pages/List.razor index 94fc595..adfbf1f 100644 --- a/TP Blazor/Pages/List.razor +++ b/TP Blazor/Pages/List.razor @@ -2,7 +2,11 @@ @using TP_Blazor.Models

Liste

-@*@if (items!=null) { +@*@if (items!=null) + { +
+ + @@ -10,7 +14,9 @@ - + + + @foreach (var item in items) { @@ -23,8 +29,24 @@ } -
Id Display Name Stack SizeEnchant Categories Repair With Created Date
@item.CreatedDate.ToShortDateString()
}*@ + + + + }*@ + +
+ + Ajouter + +
+ + + + + @context.DisplayName + + @@ -39,4 +61,10 @@ + + + Editer + + + \ No newline at end of file diff --git a/TP Blazor/Pages/List.razor.cs b/TP Blazor/Pages/List.razor.cs index 58790ce..52454df 100644 --- a/TP Blazor/Pages/List.razor.cs +++ b/TP Blazor/Pages/List.razor.cs @@ -2,6 +2,12 @@ using Blazorise.DataGrid; using Microsoft.AspNetCore.Components; using TP_Blazor.Models; +using Blazored; +using Blazored.LocalStorage; +using Blazored.Modal; +using Blazored.Modal.Services; +using TP_Blazor.Modals; +using TP_Blazor.Services; namespace TP_Blazor.Pages; @@ -15,31 +21,73 @@ public partial class List private int totalItem; [Inject] - public HttpClient Http { get; set; } + public HttpClient HttpClient { get; set; } + + [Inject] + public IDataService DataService { get; set; } + + [CascadingParameter] + public IModalService Modal { get; set; } [Inject] public NavigationManager NavigationManager { get; set; } + [Inject] + IWebHostEnvironment WebHostEnvironment { get; set; } + + [Inject] + public ILocalStorageService LocalStorage { get; set; } + private async Task OnReadData(DataGridReadDataEventArgs e) { if (e.CancellationToken.IsCancellationRequested) { return; } - var response = (await Http.GetFromJsonAsync($"{NavigationManager.BaseUri}fake-data.json")).Skip((e.Page - 1) * e.PageSize).Take(e.PageSize).ToList(); + //var response = (await HttpClient.GetFromJsonAsync($"{NavigationManager.BaseUri}fake-data.json")).Skip((e.Page - 1) * e.PageSize).Take(e.PageSize).ToList(); if (!e.CancellationToken.IsCancellationRequested) { - totalItem = (await Http.GetFromJsonAsync>($"{NavigationManager.BaseUri}fake-data.json")).Count; - items = new List(response); // an actual data for the current page + //totalItem = (await HttpClient.GetFromJsonAsync>($"{NavigationManager.BaseUri}fake-data.json")).Count; + //items = new List(response); // an actual data for the current page + items = await DataService.List(e.Page, e.PageSize); + totalItem = await DataService.Count(); } } - protected override void OnAfterRender(bool firstRender) + protected override async Task OnAfterRenderAsync(bool firstRender) { - base.OnAfterRender(firstRender); + if (!firstRender) + { + return; + } + + var currentData = await LocalStorage.GetItemAsync("data"); + + if (currentData==null) + { + var originalData = HttpClient.GetFromJsonAsync($"{NavigationManager.BaseUri}fake-data.json").Result; + await LocalStorage.SetItemAsync("data", originalData); + } } + + 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/TP Blazor/Pages/_Host.cshtml b/TP Blazor/Pages/_Host.cshtml index b6b8f8c..cbad39c 100644 --- a/TP Blazor/Pages/_Host.cshtml +++ b/TP Blazor/Pages/_Host.cshtml @@ -16,6 +16,7 @@ + @@ -34,6 +35,7 @@ 🗙 - + + diff --git a/TP Blazor/Program.cs b/TP Blazor/Program.cs index 371def7..7261993 100644 --- a/TP Blazor/Program.cs +++ b/TP Blazor/Program.cs @@ -1,3 +1,4 @@ +using System.Globalization; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; using TP_Blazor.Data; @@ -6,6 +7,10 @@ using Blazorise.Icons.FontAwesome; using Microsoft.Extensions.DependencyInjection; using Blazorise.Bootstrap; using Blazored.LocalStorage; +using TP_Blazor.Services; +using Blazored.Modal; +using Microsoft.AspNetCore.Localization; +using Microsoft.Extensions.Options; var builder = WebApplication.CreateBuilder(args); @@ -16,8 +21,18 @@ builder.Services.AddSingleton(); builder.Services.AddHttpClient(); builder.Services.AddBlazorise() .AddBootstrapProviders() - .AddBlazoredLocalStorage() .AddFontAwesomeIcons(); +builder.Services.AddBlazoredLocalStorage(); +builder.Services.AddBlazoredModal(); +builder.Services.AddControllers(); +builder.Services.AddLocalization(opt=>{opt.ResourcesPath="Resources";}); +builder.Services.Configure(option => +{ + option.DefaultRequestCulture = new RequestCulture(new CultureInfo("en-US")); + option.SupportedCultures = new List { new CultureInfo("en-US"), new CultureInfo("fr-FR") }; + option.SupportedUICultures = new List { new CultureInfo("en-US"), new CultureInfo("fr-FR") }; +}); +builder.Services.AddScoped(); var app = builder.Build(); @@ -32,6 +47,18 @@ app.UseStaticFiles(); app.UseRouting(); +var options =((IApplicationBuilder)app).ApplicationServices.GetService>(); + +if (options?.Value != null) +{ + app.UseRequestLocalization(options.Value); +} + +app.UseEndpoints(endpoints => +{ + endpoints.MapControllers(); +}); + app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); diff --git a/TP Blazor/Services/DataLocalService.cs b/TP Blazor/Services/DataLocalService.cs new file mode 100644 index 0000000..f8ebdf0 --- /dev/null +++ b/TP Blazor/Services/DataLocalService.cs @@ -0,0 +1,134 @@ +using Blazored.LocalStorage; +using Microsoft.AspNetCore.Components; +using TP_Blazor.Factories; +using TP_Blazor.Models; + +namespace TP_Blazor.Services; + +public class DataLocalService:IDataService +{ + private readonly HttpClient _httpClient; + private readonly ILocalStorageService _localStorageService; + private readonly NavigationManager _navigationManager; + private readonly IWebHostEnvironment _webHostEnvironment; + + public DataLocalService(HttpClient httpClient, ILocalStorageService localStorageService, NavigationManager navigationManager, IWebHostEnvironment webHostEnvironment) + { + _httpClient = httpClient; + _localStorageService = localStorageService; + _navigationManager = navigationManager; + _webHostEnvironment = webHostEnvironment; + } + + public async Task Add(ItemModel item) + { + var currentItems = await _localStorageService.GetItemAsync>("data"); + item.Id = currentItems.Max(s=>s.Id)+1; + // currentItems.Add(new Item + // { + // Id = item.Id, + // Name = item.Name, + // DisplayName = item.DisplayName, + // RepairWith = item.RepairWith, + // EnchantCategories = item.EnchantCategories, + // MaxDurability = item.MaxDurability, + // StackSize = item.StackSize, + // CreatedDate = DateTime.Now + // }); + currentItems.Add(ItemFactory.Create(item)); + + var imagePathsInfo = new DirectoryInfo(Path.Combine($"{_webHostEnvironment.ContentRootPath}/images")); + if (!imagePathsInfo.Exists) + { + imagePathsInfo.Create(); + } + + var fileName = new FileInfo($"{imagePathsInfo}/{item.Name}.png"); + await File.WriteAllBytesAsync(fileName.FullName, item.ImageContent); + await _localStorageService.SetItemAsync("data", currentItems); + } + + public async Task Count() + { + var currentItems = _localStorageService.GetItemAsync("data"); + if (currentItems== null) + { + var originalItems = _httpClient.GetFromJsonAsync($"f{_navigationManager.BaseUri}ake-data.json"); + await _localStorageService.SetItemAsync("data", originalItems); + } + return (await _localStorageService.GetItemAsync("data")).Length; + } + + public async Task> List(int page, int pageSize) + { + var currentItems = _localStorageService.GetItemAsync("data"); + if (currentItems == null) + { + var originalItems = _httpClient.GetFromJsonAsync($"f{_navigationManager.BaseUri}ake-data.json"); + _localStorageService.SetItemAsync("data", originalItems); + } + return (await _localStorageService.GetItemAsync("data")).Skip((page-1)*pageSize).Take(pageSize).ToList(); + } + + public async Task GetById(int id) + { + var currentItems =await _localStorageService.GetItemAsync>("data"); + var item = currentItems.FirstOrDefault(s => s.Id == id); + if (item == null) + { + throw new Exception($"Item with id {id} not found"); + } + return item; + } + + public async Task Update(int id, ItemModel item) + { + var currentItems = await _localStorageService.GetItemAsync>("data"); + var itemToUpdate = currentItems.FirstOrDefault(s => s.Id == id); + + if (itemToUpdate == null) + { + throw new Exception($"Item with id {id} not found"); + } + var imagePathsInfo = new DirectoryInfo($"{_webHostEnvironment.ContentRootPath}/images"); + if (!imagePathsInfo.Exists) + { + imagePathsInfo.Create(); + } + + if (itemToUpdate.Name != item.Name) + { + var oldFileName = new FileInfo($"{imagePathsInfo}/{itemToUpdate.Name}.png"); + if (oldFileName.Exists) + { + oldFileName.Delete(); + } + } + + var fileName = new FileInfo($"{imagePathsInfo}/{item.Name}.png"); + await File.WriteAllBytesAsync(fileName.FullName, item.ImageContent); + // itemToUpdate.Name = item.Name; + // itemToUpdate.DisplayName = item.DisplayName; + // itemToUpdate.RepairWith = item.RepairWith; + // itemToUpdate.EnchantCategories = item.EnchantCategories; + // itemToUpdate.MaxDurability = item.MaxDurability; + // itemToUpdate.StackSize = item.StackSize; + // itemToUpdate.UpdatedDate = DateTime.Now; + ItemFactory.Update(itemToUpdate, item); + await _localStorageService.SetItemAsync("data", currentItems); + } + + public async Task Delete(int id) + { + var currentItems =await _localStorageService.GetItemAsync>("data"); + var itemToDelete = currentItems.FirstOrDefault(s => s.Id == id); + currentItems.Remove(itemToDelete); + var imagePathsInfo = new DirectoryInfo($"{_webHostEnvironment.ContentRootPath}/images"); + var fileName = new FileInfo($"{imagePathsInfo}/{itemToDelete.Name}.png"); + if (fileName.Exists) + { + File.Delete(fileName.FullName); + } + await _localStorageService.SetItemAsync("data", currentItems); + } +} \ No newline at end of file diff --git a/TP Blazor/Services/IDataService.cs b/TP Blazor/Services/IDataService.cs new file mode 100644 index 0000000..c7266f1 --- /dev/null +++ b/TP Blazor/Services/IDataService.cs @@ -0,0 +1,13 @@ +using TP_Blazor.Models; + +namespace TP_Blazor.Services; + +public interface IDataService +{ + public Task Add(ItemModel item); + Task Count(); + Task> List(int page, int pageSize); + Task GetById(int id); + Task Update(int id,ItemModel item); + Task Delete(int id); +} \ No newline at end of file diff --git a/TP Blazor/TP Blazor.csproj b/TP Blazor/TP Blazor.csproj index 4859a02..4b0372b 100644 --- a/TP Blazor/TP Blazor.csproj +++ b/TP Blazor/TP Blazor.csproj @@ -16,10 +16,12 @@ + + diff --git a/TP Blazor/_Imports.razor b/TP Blazor/_Imports.razor index a029dcc..8bd9121 100644 --- a/TP Blazor/_Imports.razor +++ b/TP Blazor/_Imports.razor @@ -9,3 +9,5 @@ @using TP_Blazor @using TP_Blazor.Shared @using Blazorise.DataGrid +@using Blazored.Modal +@using Blazored.Modal.Services From 5e4a726390812295d95121ea470254c2d73df249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Victor=20P=C3=A9rez=20Ngounou?= Date: Sun, 15 Jan 2023 03:00:06 +0100 Subject: [PATCH 2/7] Add Globalization --- TP Blazor/Controllers/CultureController.cs | 19 ++++++++ TP Blazor/Pages/Index.razor | 4 ++ .../Ressources/Pages.List.fr-FR.Designer.cs | 48 +++++++++++++++++++ TP Blazor/Ressources/Pages.List.fr-FR.resx | 21 ++++++++ TP Blazor/Shared/CultureSelector.razor | 14 ++++++ TP Blazor/Shared/CultureSelector.razor.cs | 32 +++++++++++++ TP Blazor/Shared/MainLayout.razor | 3 ++ TP Blazor/TP Blazor.csproj | 23 +++++++++ 8 files changed, 164 insertions(+) create mode 100644 TP Blazor/Controllers/CultureController.cs create mode 100644 TP Blazor/Ressources/Pages.List.fr-FR.Designer.cs create mode 100644 TP Blazor/Ressources/Pages.List.fr-FR.resx create mode 100644 TP Blazor/Shared/CultureSelector.razor create mode 100644 TP Blazor/Shared/CultureSelector.razor.cs diff --git a/TP Blazor/Controllers/CultureController.cs b/TP Blazor/Controllers/CultureController.cs new file mode 100644 index 0000000..60e6389 --- /dev/null +++ b/TP Blazor/Controllers/CultureController.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.Localization; +using Microsoft.AspNetCore.Mvc; + +namespace TP_Blazor.Controllers; + +[Route("[controller]/[action]")] +public class CultureController:Controller +{ + public IActionResult SetCulture(string culture, string returnUrl) + { + if(culture != null) + { + this.HttpContext.Response.Cookies.Append( + CookieRequestCultureProvider.DefaultCookieName, + CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture))); + } + return this.LocalRedirect(returnUrl); + } +} \ No newline at end of file diff --git a/TP Blazor/Pages/Index.razor b/TP Blazor/Pages/Index.razor index 6085c4a..4d4e3bd 100644 --- a/TP Blazor/Pages/Index.razor +++ b/TP Blazor/Pages/Index.razor @@ -1,8 +1,12 @@ @page "/" +@using System.Globalization Index

Hello, world!

+

+ CurrentCulture: @CultureInfo.CurrentCulture +

Welcome to your new app. diff --git a/TP Blazor/Ressources/Pages.List.fr-FR.Designer.cs b/TP Blazor/Ressources/Pages.List.fr-FR.Designer.cs new file mode 100644 index 0000000..103772e --- /dev/null +++ b/TP Blazor/Ressources/Pages.List.fr-FR.Designer.cs @@ -0,0 +1,48 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace TP_Blazor.Ressources { + using System; + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Pages_List_fr_FR { + + private static System.Resources.ResourceManager resourceMan; + + private static System.Globalization.CultureInfo resourceCulture; + + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Pages_List_fr_FR() { + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Resources.ResourceManager ResourceManager { + get { + if (object.Equals(null, resourceMan)) { + System.Resources.ResourceManager temp = new System.Resources.ResourceManager("TP_Blazor.Ressources.Pages_List_fr_FR", typeof(Pages_List_fr_FR).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/TP Blazor/Ressources/Pages.List.fr-FR.resx b/TP Blazor/Ressources/Pages.List.fr-FR.resx new file mode 100644 index 0000000..a4c5284 --- /dev/null +++ b/TP Blazor/Ressources/Pages.List.fr-FR.resx @@ -0,0 +1,21 @@ + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TP Blazor/Shared/CultureSelector.razor b/TP Blazor/Shared/CultureSelector.razor new file mode 100644 index 0000000..90cdeb7 --- /dev/null +++ b/TP Blazor/Shared/CultureSelector.razor @@ -0,0 +1,14 @@ +@using System.Globalization +@inject NavigationManager NavigationManager + +

+ +

\ No newline at end of file diff --git a/TP Blazor/Shared/CultureSelector.razor.cs b/TP Blazor/Shared/CultureSelector.razor.cs new file mode 100644 index 0000000..d491150 --- /dev/null +++ b/TP Blazor/Shared/CultureSelector.razor.cs @@ -0,0 +1,32 @@ +using System.Globalization; + +namespace TP_Blazor.Shared; + +public partial class CultureSelector +{ + private CultureInfo[] supportedCultures = new[] + { + new CultureInfo("en-US"), + new CultureInfo("fr-FR") + }; + + private CultureInfo Culture + { + get => CultureInfo.CurrentCulture; + set + { + if (CultureInfo.CurrentUICulture == value) + { + return; + } + + var culture = value.Name.ToLower(CultureInfo.InvariantCulture); + + var uri = new Uri(this.NavigationManager.Uri).GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped); + var query = $"?culture={Uri.EscapeDataString(culture)}&" + $"redirectUri={Uri.EscapeDataString(uri)}"; + + // Redirect the user to the culture controller to set the cookie + this.NavigationManager.NavigateTo("/Culture/SetCulture" + query, forceLoad: true); + } + } +} \ No newline at end of file diff --git a/TP Blazor/Shared/MainLayout.razor b/TP Blazor/Shared/MainLayout.razor index 8025b70..dc54838 100644 --- a/TP Blazor/Shared/MainLayout.razor +++ b/TP Blazor/Shared/MainLayout.razor @@ -10,6 +10,9 @@
About +
+ +
diff --git a/TP Blazor/TP Blazor.csproj b/TP Blazor/TP Blazor.csproj index 4b0372b..bf49c63 100644 --- a/TP Blazor/TP Blazor.csproj +++ b/TP Blazor/TP Blazor.csproj @@ -14,6 +14,8 @@ + + @@ -25,5 +27,26 @@ + + + + + ResXFileCodeGenerator + Pages.List.Designer.cs + + + ResXFileCodeGenerator + Pages.List.fr-FR.Designer.cs + + + + + Pages.List.resx + + + True + True + Pages.List.fr-FR.resx + From 316e41a674a7959b5c4611286ce4d1ebc082a8b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Victor=20P=C3=A9rez=20Ngounou?= Date: Sun, 15 Jan 2023 03:25:21 +0100 Subject: [PATCH 3/7] update --- TP Blazor/Models/ItemModel.cs | 38 +++++++++++++++++++++++++++++++++++ TP Blazor/TP Blazor.csproj | 7 ------- 2 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 TP Blazor/Models/ItemModel.cs diff --git a/TP Blazor/Models/ItemModel.cs b/TP Blazor/Models/ItemModel.cs new file mode 100644 index 0000000..ef96511 --- /dev/null +++ b/TP Blazor/Models/ItemModel.cs @@ -0,0 +1,38 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace TP_Blazor.Models; + +public class ItemModel +{ + public int Id { get; set; } + + [Required] + [StringLength(50, ErrorMessage = "Le nom affiché ne doit pas dépasser 50 caractères.")] + public string DisplayName { get; set; } + + [Required] + [StringLength(50, ErrorMessage = "Le nom ne doit pas dépasser 50 caractères.")] + [RegularExpression(@"^[a-z''-'\s]{1,40}$", ErrorMessage = "Seulement les caractères en minuscule sont acceptées.")] + public string Name { get; set; } + + [Required] + [Range(1, 64)] + public int StackSize { get; set; } + + [Required] + [Range(1, 125)] + public int MaxDurability { get; set; } + + public List EnchantCategories { get; set; } + + public List RepairWith { get; set; } + + [Required] + [Range(typeof(bool), "true", "true", ErrorMessage = "Vous devez accepter les conditions.")] + public bool AcceptCondition { get; set; } + + [Required(ErrorMessage = "L'image de l'item est obligatoire !")] + public byte[] ImageContent { get; set; } +} + diff --git a/TP Blazor/TP Blazor.csproj b/TP Blazor/TP Blazor.csproj index bf49c63..21b0de9 100644 --- a/TP Blazor/TP Blazor.csproj +++ b/TP Blazor/TP Blazor.csproj @@ -30,19 +30,12 @@ - - ResXFileCodeGenerator - Pages.List.Designer.cs - ResXFileCodeGenerator Pages.List.fr-FR.Designer.cs - - Pages.List.resx - True True From da5e0501cb3167c14a16dc190efe5ad004442067 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Victor=20P=C3=A9rez=20Ngounou?= Date: Sun, 15 Jan 2023 03:27:16 +0100 Subject: [PATCH 4/7] ok --- TP Blazor/images/default.png | Bin 0 -> 84290 bytes TP Blazor/images/scenty.png | Bin 0 -> 2267 bytes TP Blazor/images/turnaboutez.png | Bin 0 -> 2267 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 TP Blazor/images/default.png create mode 100644 TP Blazor/images/scenty.png create mode 100644 TP Blazor/images/turnaboutez.png diff --git a/TP Blazor/images/default.png b/TP Blazor/images/default.png new file mode 100644 index 0000000000000000000000000000000000000000..480d066a37256b6f99c18af679abb094b3f87252 GIT binary patch literal 84290 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

Sty>UuMqQb)GNW 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 Mb)y0~oBzB2fBk=XP5=M^ literal 0 HcmV?d00001 diff --git a/TP Blazor/images/scenty.png b/TP Blazor/images/scenty.png new file mode 100644 index 0000000000000000000000000000000000000000..a7446c9e8a8c755f1e21faf389634136d44fed6d GIT binary patch literal 2267 zcmeHIXBIq!$_ocGH~zGZI(lvb1m006)n z*5;1;HEW*%QWE<)?4{2);XtUPl_>z%dun#Sk$ecXg8~56=`uSWhX4Qxz%5&6i`?AY zyu7@(Z{OzU=NA+d6c-nll$4;+=+e^Cva+)B^74v`3JeB=#bPTfD{(knRaF%pkFTz- zCJ+dpKYy;Rt*xu8BNB=A_4N%64ULVBBoe8mrKPpCwXLnKy}iA&v$MOqyQin8x3{;i zudlzqe_&vMLZJ)}4pOPqp`jrfjYg-_hlht53FMd2nHe6BH#<8!H#f)U^XKR17Zw&47Z;b7mX?>7S5{U80>SF) z>e|}c`uh6D#>VF6rcfx{+S(F{MBCfjJ3BjKv3PfPcW-ZR-2fMBIvBA&SM#k#iJoyiib{34ADdDcA_31T)KpX{irS?~{BklHj+M+J% zdw&s15$x2E%ww_b0H zGN`Wrd|F^q*B=xc1K~Lt??CkcoFt51b6of2;ey0^_r$9zTQI|#vY7M?ow*q>9SF8- z@0iVrUJnQmYRvoR7rLH3!`KV^4KZPJv+ZSUf{CD-c{CJf7_T?DikxnFe$i3IWg0g2 z8v2|y1wY;cR@ycOa~`B6D4Xd0Y?F=Zy2WL(Sz}{QZDAy5>($Mi!c@bBwP~2}xXFM4 zuZi236Fe2m@7jC35T~iKy6(nCi6p^xq+%VK6rWTqDTU9^HVZc7N>f=YvH1%#>G~R% ztWwS$S4Cj$c|}Mt5&b?1PH1XsJ*=P*c;8XHl`h;qD`)csmh^*;Ziip9o=jM3227F8 zGZ>AGkd9ka_Ac5MHM|7lJ(R+fRS_ES7v)@X=iSMWqkq4Nk|x#Rgm$f_t*}zQ!jA|K zRz)QkD}}qV_E;EYEdSU3?oVs4d{vw@j`_P7cgT_%2??YQ!jK#rBos#}?S6pO{GJzO zSO%*hRbUDLG8fcv#_##pk;k6BOB-r6^)?$g;r~avGaYk)R-Th4hjZ1|vu#)R@`K6r z!L*z-e50v`Ks?iP*$*8`EH=wk%z6~8w~BZ<)M;hu8QxwA;?&Fi)&+0Vy{C;EyQ>^& ziS+-4nd#d=aM{pQ2suv|PKaoN*Fq>#LKsyUq)t4amGHVQh8@jG)`|u;8%Whfh_5J< zTN(*rSx-(aM+k(N5a9hTjs1}Zsax&EyR-zOwm;8l$&nN7QZ{};vtz%D6v=9-)H!P? z{bY_NSum|GVuI^xUE?OoLe*g*)SZ#ttQeoK#=uV{@mFJT2ZPmNE{%gy_uU3)(0l9x zx73I5aUQ83j};0gQ0ZxhqEjxs510W4{evv(Gw7`OBsfwDI*IqD5T{{Tv}C~r`M9YN zah2EQ*j>4xg4@A5?ZY_GR zmBeb<>8q*!FOJv@Tn9(^si4T-^I<>vLI(56kI}gtf%j20pN=VJDtS<=V}+tg$0Kbl z!!;H?``-8vO}uA81l5)Nwwb>B1i#R zUwuubIGlO9-DiKM2qM^#_tA4`D1xj!Dx_MzL$48HXY3cwwR8R_eDtd0wig> literal 0 HcmV?d00001 diff --git a/TP Blazor/images/turnaboutez.png b/TP Blazor/images/turnaboutez.png new file mode 100644 index 0000000000000000000000000000000000000000..a7446c9e8a8c755f1e21faf389634136d44fed6d GIT binary patch literal 2267 zcmeHIXBIq!$_ocGH~zGZI(lvb1m006)n z*5;1;HEW*%QWE<)?4{2);XtUPl_>z%dun#Sk$ecXg8~56=`uSWhX4Qxz%5&6i`?AY zyu7@(Z{OzU=NA+d6c-nll$4;+=+e^Cva+)B^74v`3JeB=#bPTfD{(knRaF%pkFTz- zCJ+dpKYy;Rt*xu8BNB=A_4N%64ULVBBoe8mrKPpCwXLnKy}iA&v$MOqyQin8x3{;i zudlzqe_&vMLZJ)}4pOPqp`jrfjYg-_hlht53FMd2nHe6BH#<8!H#f)U^XKR17Zw&47Z;b7mX?>7S5{U80>SF) z>e|}c`uh6D#>VF6rcfx{+S(F{MBCfjJ3BjKv3PfPcW-ZR-2fMBIvBA&SM#k#iJoyiib{34ADdDcA_31T)KpX{irS?~{BklHj+M+J% zdw&s15$x2E%ww_b0H zGN`Wrd|F^q*B=xc1K~Lt??CkcoFt51b6of2;ey0^_r$9zTQI|#vY7M?ow*q>9SF8- z@0iVrUJnQmYRvoR7rLH3!`KV^4KZPJv+ZSUf{CD-c{CJf7_T?DikxnFe$i3IWg0g2 z8v2|y1wY;cR@ycOa~`B6D4Xd0Y?F=Zy2WL(Sz}{QZDAy5>($Mi!c@bBwP~2}xXFM4 zuZi236Fe2m@7jC35T~iKy6(nCi6p^xq+%VK6rWTqDTU9^HVZc7N>f=YvH1%#>G~R% ztWwS$S4Cj$c|}Mt5&b?1PH1XsJ*=P*c;8XHl`h;qD`)csmh^*;Ziip9o=jM3227F8 zGZ>AGkd9ka_Ac5MHM|7lJ(R+fRS_ES7v)@X=iSMWqkq4Nk|x#Rgm$f_t*}zQ!jA|K zRz)QkD}}qV_E;EYEdSU3?oVs4d{vw@j`_P7cgT_%2??YQ!jK#rBos#}?S6pO{GJzO zSO%*hRbUDLG8fcv#_##pk;k6BOB-r6^)?$g;r~avGaYk)R-Th4hjZ1|vu#)R@`K6r z!L*z-e50v`Ks?iP*$*8`EH=wk%z6~8w~BZ<)M;hu8QxwA;?&Fi)&+0Vy{C;EyQ>^& ziS+-4nd#d=aM{pQ2suv|PKaoN*Fq>#LKsyUq)t4amGHVQh8@jG)`|u;8%Whfh_5J< zTN(*rSx-(aM+k(N5a9hTjs1}Zsax&EyR-zOwm;8l$&nN7QZ{};vtz%D6v=9-)H!P? z{bY_NSum|GVuI^xUE?OoLe*g*)SZ#ttQeoK#=uV{@mFJT2ZPmNE{%gy_uU3)(0l9x zx73I5aUQ83j};0gQ0ZxhqEjxs510W4{evv(Gw7`OBsfwDI*IqD5T{{Tv}C~r`M9YN zah2EQ*j>4xg4@A5?ZY_GR zmBeb<>8q*!FOJv@Tn9(^si4T-^I<>vLI(56kI}gtf%j20pN=VJDtS<=V}+tg$0Kbl z!!;H?``-8vO}uA81l5)Nwwb>B1i#R zUwuubIGlO9-DiKM2qM^#_tA4`D1xj!Dx_MzL$48HXY3cwwR8R_eDtd0wig> literal 0 HcmV?d00001 From 8e50eb530692e179ed11c7b7a43e3b1163debd0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Victor=20P=C3=A9rez=20Ngounou?= Date: Sun, 15 Jan 2023 03:28:26 +0100 Subject: [PATCH 5/7] Commit --- .idea/.idea.TP Blazor/.idea/indexLayout.xml | 8 ++ .idea/.idea.TP Blazor/.idea/vcs.xml | 6 + .vscode/tasks.json | 41 +++++++ TP Blazor/Pages/Add.razor | 72 ++++++++++++ TP Blazor/Pages/Add.razor.cs | 116 ++++++++++++++++++++ TP Blazor/wwwroot/images/default.png | Bin 0 -> 2267 bytes 6 files changed, 243 insertions(+) create mode 100644 .idea/.idea.TP Blazor/.idea/indexLayout.xml create mode 100644 .idea/.idea.TP Blazor/.idea/vcs.xml create mode 100644 .vscode/tasks.json create mode 100644 TP Blazor/Pages/Add.razor create mode 100644 TP Blazor/Pages/Add.razor.cs create mode 100644 TP Blazor/wwwroot/images/default.png diff --git a/.idea/.idea.TP Blazor/.idea/indexLayout.xml b/.idea/.idea.TP Blazor/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/.idea/.idea.TP Blazor/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/.idea.TP Blazor/.idea/vcs.xml b/.idea/.idea.TP Blazor/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/.idea.TP Blazor/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..522c4a2 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,41 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/TP Blazor/TP Blazor.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/TP Blazor/TP Blazor.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/TP Blazor/TP Blazor.csproj" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/TP Blazor/Pages/Add.razor b/TP Blazor/Pages/Add.razor new file mode 100644 index 0000000..d696ca7 --- /dev/null +++ b/TP Blazor/Pages/Add.razor @@ -0,0 +1,72 @@ +@page "/add" + +

Add

+ + + +

+ +

+

+ +

+

+ +

+

+ +

+

+ Enchant categories: +

+ @foreach (var item in enchantCategories) + { + + } +
+

+

+ Repair with: +

+ @foreach (var item in repairWith) + { + + } +
+

+

+ +

+

+ +

+ + + +
+ + + diff --git a/TP Blazor/Pages/Add.razor.cs b/TP Blazor/Pages/Add.razor.cs new file mode 100644 index 0000000..8f7cf02 --- /dev/null +++ b/TP Blazor/Pages/Add.razor.cs @@ -0,0 +1,116 @@ +using System; +using System.Security.Cryptography; +using Blazored.LocalStorage; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Forms; +using TP_Blazor.Models; +using TP_Blazor.Services; + +namespace TP_Blazor.Pages; + +public partial class Add +{ + [Inject] + ILocalStorageService LocalStorage { get; set; } + + [Inject] + IWebHostEnvironment WebHostEnvironment { get; set; } + + [Inject] + public NavigationManager NavigationManager { get; set; } + + private List enchantCategories = new List() { "armor", "armor_head", "armor_chest", "weapon", "digger", "breakable", "vanishable" }; + private List repairWith = new List() { "oak_planks", "spruce_planks", "birch_planks", "jungle_planks", "acacia_planks", "dark_oak_planks", "crimson_planks", "warped_planks" }; + + [Inject] + private IDataService DataService{ get; set; } + + + + + private ItemModel itemModel = new() + { + EnchantCategories = new List(), + RepairWith = new List() + }; + + private async void OnHandleValidSubmit() + { + /*var currentData = await LocalStorage.GetItemAsync>("data"); + itemModel.Id = currentData.Max(s => s.Id) + 1; + 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 + }); + + var imagePathInfo = new DirectoryInfo($"{WebHostEnvironment.WebRootPath}/images"); + + if (!imagePathInfo.Exists) + { + imagePathInfo.Create(); + } + + var fileName = new FileInfo($"{imagePathInfo}/{itemModel.Name}.png"); + await File.WriteAllBytesAsync(fileName.FullName, itemModel.ImageContent); + + await LocalStorage.SetItemAsync("data", currentData); + NavigationManager.NavigateTo("list");*/ + await DataService.Add(itemModel); + NavigationManager.NavigateTo("list"); + } + + private async Task LoadImage(InputFileChangeEventArgs e) + { + + using (var memoryStream = new MemoryStream()) + { + await e.File.OpenReadStream().CopyToAsync(memoryStream); + itemModel.ImageContent = memoryStream.ToArray(); + } + } + + private void OnEnchantCategoriesChange(string item, object checkedValue) + { + if ((bool)checkedValue) + { + if (!itemModel.EnchantCategories.Contains(item)) + { + itemModel.EnchantCategories.Add(item); + } + + return; + } + + if (itemModel.EnchantCategories.Contains(item)) + { + itemModel.EnchantCategories.Remove(item); + } + } + + private void OnRepairWithChange(string item, object checkedValue) + { + if ((bool)checkedValue) + { + if (!itemModel.RepairWith.Contains(item)) + { + itemModel.RepairWith.Add(item); + } + + return; + } + + if (itemModel.RepairWith.Contains(item)) + { + itemModel.RepairWith.Remove(item); + } + } + +} + diff --git a/TP Blazor/wwwroot/images/default.png b/TP Blazor/wwwroot/images/default.png new file mode 100644 index 0000000000000000000000000000000000000000..a7446c9e8a8c755f1e21faf389634136d44fed6d GIT binary patch literal 2267 zcmeHIXBIq!$_ocGH~zGZI(lvb1m006)n z*5;1;HEW*%QWE<)?4{2);XtUPl_>z%dun#Sk$ecXg8~56=`uSWhX4Qxz%5&6i`?AY zyu7@(Z{OzU=NA+d6c-nll$4;+=+e^Cva+)B^74v`3JeB=#bPTfD{(knRaF%pkFTz- zCJ+dpKYy;Rt*xu8BNB=A_4N%64ULVBBoe8mrKPpCwXLnKy}iA&v$MOqyQin8x3{;i zudlzqe_&vMLZJ)}4pOPqp`jrfjYg-_hlht53FMd2nHe6BH#<8!H#f)U^XKR17Zw&47Z;b7mX?>7S5{U80>SF) z>e|}c`uh6D#>VF6rcfx{+S(F{MBCfjJ3BjKv3PfPcW-ZR-2fMBIvBA&SM#k#iJoyiib{34ADdDcA_31T)KpX{irS?~{BklHj+M+J% zdw&s15$x2E%ww_b0H zGN`Wrd|F^q*B=xc1K~Lt??CkcoFt51b6of2;ey0^_r$9zTQI|#vY7M?ow*q>9SF8- z@0iVrUJnQmYRvoR7rLH3!`KV^4KZPJv+ZSUf{CD-c{CJf7_T?DikxnFe$i3IWg0g2 z8v2|y1wY;cR@ycOa~`B6D4Xd0Y?F=Zy2WL(Sz}{QZDAy5>($Mi!c@bBwP~2}xXFM4 zuZi236Fe2m@7jC35T~iKy6(nCi6p^xq+%VK6rWTqDTU9^HVZc7N>f=YvH1%#>G~R% ztWwS$S4Cj$c|}Mt5&b?1PH1XsJ*=P*c;8XHl`h;qD`)csmh^*;Ziip9o=jM3227F8 zGZ>AGkd9ka_Ac5MHM|7lJ(R+fRS_ES7v)@X=iSMWqkq4Nk|x#Rgm$f_t*}zQ!jA|K zRz)QkD}}qV_E;EYEdSU3?oVs4d{vw@j`_P7cgT_%2??YQ!jK#rBos#}?S6pO{GJzO zSO%*hRbUDLG8fcv#_##pk;k6BOB-r6^)?$g;r~avGaYk)R-Th4hjZ1|vu#)R@`K6r z!L*z-e50v`Ks?iP*$*8`EH=wk%z6~8w~BZ<)M;hu8QxwA;?&Fi)&+0Vy{C;EyQ>^& ziS+-4nd#d=aM{pQ2suv|PKaoN*Fq>#LKsyUq)t4amGHVQh8@jG)`|u;8%Whfh_5J< zTN(*rSx-(aM+k(N5a9hTjs1}Zsax&EyR-zOwm;8l$&nN7QZ{};vtz%D6v=9-)H!P? z{bY_NSum|GVuI^xUE?OoLe*g*)SZ#ttQeoK#=uV{@mFJT2ZPmNE{%gy_uU3)(0l9x zx73I5aUQ83j};0gQ0ZxhqEjxs510W4{evv(Gw7`OBsfwDI*IqD5T{{Tv}C~r`M9YN zah2EQ*j>4xg4@A5?ZY_GR zmBeb<>8q*!FOJv@Tn9(^si4T-^I<>vLI(56kI}gtf%j20pN=VJDtS<=V}+tg$0Kbl z!!;H?``-8vO}uA81l5)Nwwb>B1i#R zUwuubIGlO9-DiKM2qM^#_tA4`D1xj!Dx_MzL$48HXY3cwwR8R_eDtd0wig> literal 0 HcmV?d00001 From 29cc79798a6c11e964a0b6ced64369b841bc799d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Victor=20P=C3=A9rez=20Ngounou?= Date: Sun, 15 Jan 2023 03:28:26 +0100 Subject: [PATCH 6/7] Commit --- .idea/.idea.TP Blazor/.idea/indexLayout.xml | 8 + .idea/.idea.TP Blazor/.idea/vcs.xml | 6 + .vscode/tasks.json | 41 +++++ TP Blazor/Pages/Add.razor | 72 +++++++++ TP Blazor/Pages/Add.razor.cs | 116 ++++++++++++++ TP Blazor/Pages/List.razor | 4 +- TP Blazor/Pages/List.razor.cs | 5 + TP Blazor/Ressources/Pages.List.fr-FR.resx | 162 +++++++++++++++++--- TP Blazor/wwwroot/images/default.png | Bin 0 -> 2267 bytes 9 files changed, 394 insertions(+), 20 deletions(-) create mode 100644 .idea/.idea.TP Blazor/.idea/indexLayout.xml create mode 100644 .idea/.idea.TP Blazor/.idea/vcs.xml create mode 100644 .vscode/tasks.json create mode 100644 TP Blazor/Pages/Add.razor create mode 100644 TP Blazor/Pages/Add.razor.cs create mode 100644 TP Blazor/wwwroot/images/default.png diff --git a/.idea/.idea.TP Blazor/.idea/indexLayout.xml b/.idea/.idea.TP Blazor/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/.idea/.idea.TP Blazor/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/.idea.TP Blazor/.idea/vcs.xml b/.idea/.idea.TP Blazor/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/.idea.TP Blazor/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..522c4a2 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,41 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/TP Blazor/TP Blazor.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/TP Blazor/TP Blazor.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/TP Blazor/TP Blazor.csproj" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/TP Blazor/Pages/Add.razor b/TP Blazor/Pages/Add.razor new file mode 100644 index 0000000..d696ca7 --- /dev/null +++ b/TP Blazor/Pages/Add.razor @@ -0,0 +1,72 @@ +@page "/add" + +

Add

+ + + +

+ +

+

+ +

+

+ +

+

+ +

+

+ Enchant categories: +

+ @foreach (var item in enchantCategories) + { + + } +
+

+

+ Repair with: +

+ @foreach (var item in repairWith) + { + + } +
+

+

+ +

+

+ +

+ + + +
+ + + diff --git a/TP Blazor/Pages/Add.razor.cs b/TP Blazor/Pages/Add.razor.cs new file mode 100644 index 0000000..8f7cf02 --- /dev/null +++ b/TP Blazor/Pages/Add.razor.cs @@ -0,0 +1,116 @@ +using System; +using System.Security.Cryptography; +using Blazored.LocalStorage; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Forms; +using TP_Blazor.Models; +using TP_Blazor.Services; + +namespace TP_Blazor.Pages; + +public partial class Add +{ + [Inject] + ILocalStorageService LocalStorage { get; set; } + + [Inject] + IWebHostEnvironment WebHostEnvironment { get; set; } + + [Inject] + public NavigationManager NavigationManager { get; set; } + + private List enchantCategories = new List() { "armor", "armor_head", "armor_chest", "weapon", "digger", "breakable", "vanishable" }; + private List repairWith = new List() { "oak_planks", "spruce_planks", "birch_planks", "jungle_planks", "acacia_planks", "dark_oak_planks", "crimson_planks", "warped_planks" }; + + [Inject] + private IDataService DataService{ get; set; } + + + + + private ItemModel itemModel = new() + { + EnchantCategories = new List(), + RepairWith = new List() + }; + + private async void OnHandleValidSubmit() + { + /*var currentData = await LocalStorage.GetItemAsync>("data"); + itemModel.Id = currentData.Max(s => s.Id) + 1; + 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 + }); + + var imagePathInfo = new DirectoryInfo($"{WebHostEnvironment.WebRootPath}/images"); + + if (!imagePathInfo.Exists) + { + imagePathInfo.Create(); + } + + var fileName = new FileInfo($"{imagePathInfo}/{itemModel.Name}.png"); + await File.WriteAllBytesAsync(fileName.FullName, itemModel.ImageContent); + + await LocalStorage.SetItemAsync("data", currentData); + NavigationManager.NavigateTo("list");*/ + await DataService.Add(itemModel); + NavigationManager.NavigateTo("list"); + } + + private async Task LoadImage(InputFileChangeEventArgs e) + { + + using (var memoryStream = new MemoryStream()) + { + await e.File.OpenReadStream().CopyToAsync(memoryStream); + itemModel.ImageContent = memoryStream.ToArray(); + } + } + + private void OnEnchantCategoriesChange(string item, object checkedValue) + { + if ((bool)checkedValue) + { + if (!itemModel.EnchantCategories.Contains(item)) + { + itemModel.EnchantCategories.Add(item); + } + + return; + } + + if (itemModel.EnchantCategories.Contains(item)) + { + itemModel.EnchantCategories.Remove(item); + } + } + + private void OnRepairWithChange(string item, object checkedValue) + { + if ((bool)checkedValue) + { + if (!itemModel.RepairWith.Contains(item)) + { + itemModel.RepairWith.Add(item); + } + + return; + } + + if (itemModel.RepairWith.Contains(item)) + { + itemModel.RepairWith.Remove(item); + } + } + +} + diff --git a/TP Blazor/Pages/List.razor b/TP Blazor/Pages/List.razor index adfbf1f..c2df1a3 100644 --- a/TP Blazor/Pages/List.razor +++ b/TP Blazor/Pages/List.razor @@ -1,6 +1,6 @@ @page "/list" @using TP_Blazor.Models -

Liste

+

@Localizer["Title"]

@*@if (items!=null) { @@ -36,7 +36,7 @@
- Ajouter + @Localizer["btnTitle"]
diff --git a/TP Blazor/Pages/List.razor.cs b/TP Blazor/Pages/List.razor.cs index 52454df..fc9879b 100644 --- a/TP Blazor/Pages/List.razor.cs +++ b/TP Blazor/Pages/List.razor.cs @@ -8,6 +8,7 @@ using Blazored.Modal; using Blazored.Modal.Services; using TP_Blazor.Modals; using TP_Blazor.Services; +using Microsoft.Extensions.Localization; namespace TP_Blazor.Pages; @@ -20,6 +21,8 @@ public partial class List private List items; private int totalItem; + [Inject] + public IStringLocalizer Localizer { get; set; } [Inject] public HttpClient HttpClient { get; set; } @@ -38,6 +41,8 @@ public partial class List [Inject] public ILocalStorageService LocalStorage { get; set; } + + private async Task OnReadData(DataGridReadDataEventArgs e) { if (e.CancellationToken.IsCancellationRequested) diff --git a/TP Blazor/Ressources/Pages.List.fr-FR.resx b/TP Blazor/Ressources/Pages.List.fr-FR.resx index a4c5284..f9387df 100644 --- a/TP Blazor/Ressources/Pages.List.fr-FR.resx +++ b/TP Blazor/Ressources/Pages.List.fr-FR.resx @@ -1,21 +1,147 @@ - - - - - - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + à propos + + + Ajouter + + + Image + + + Nom + + + Taille + + + Acceuil + + + List + + + Compteur + + + Liste d'utilisateur + \ No newline at end of file diff --git a/TP Blazor/wwwroot/images/default.png b/TP Blazor/wwwroot/images/default.png new file mode 100644 index 0000000000000000000000000000000000000000..a7446c9e8a8c755f1e21faf389634136d44fed6d GIT binary patch literal 2267 zcmeHIXBIq!$_ocGH~zGZI(lvb1m006)n z*5;1;HEW*%QWE<)?4{2);XtUPl_>z%dun#Sk$ecXg8~56=`uSWhX4Qxz%5&6i`?AY zyu7@(Z{OzU=NA+d6c-nll$4;+=+e^Cva+)B^74v`3JeB=#bPTfD{(knRaF%pkFTz- zCJ+dpKYy;Rt*xu8BNB=A_4N%64ULVBBoe8mrKPpCwXLnKy}iA&v$MOqyQin8x3{;i zudlzqe_&vMLZJ)}4pOPqp`jrfjYg-_hlht53FMd2nHe6BH#<8!H#f)U^XKR17Zw&47Z;b7mX?>7S5{U80>SF) z>e|}c`uh6D#>VF6rcfx{+S(F{MBCfjJ3BjKv3PfPcW-ZR-2fMBIvBA&SM#k#iJoyiib{34ADdDcA_31T)KpX{irS?~{BklHj+M+J% zdw&s15$x2E%ww_b0H zGN`Wrd|F^q*B=xc1K~Lt??CkcoFt51b6of2;ey0^_r$9zTQI|#vY7M?ow*q>9SF8- z@0iVrUJnQmYRvoR7rLH3!`KV^4KZPJv+ZSUf{CD-c{CJf7_T?DikxnFe$i3IWg0g2 z8v2|y1wY;cR@ycOa~`B6D4Xd0Y?F=Zy2WL(Sz}{QZDAy5>($Mi!c@bBwP~2}xXFM4 zuZi236Fe2m@7jC35T~iKy6(nCi6p^xq+%VK6rWTqDTU9^HVZc7N>f=YvH1%#>G~R% ztWwS$S4Cj$c|}Mt5&b?1PH1XsJ*=P*c;8XHl`h;qD`)csmh^*;Ziip9o=jM3227F8 zGZ>AGkd9ka_Ac5MHM|7lJ(R+fRS_ES7v)@X=iSMWqkq4Nk|x#Rgm$f_t*}zQ!jA|K zRz)QkD}}qV_E;EYEdSU3?oVs4d{vw@j`_P7cgT_%2??YQ!jK#rBos#}?S6pO{GJzO zSO%*hRbUDLG8fcv#_##pk;k6BOB-r6^)?$g;r~avGaYk)R-Th4hjZ1|vu#)R@`K6r z!L*z-e50v`Ks?iP*$*8`EH=wk%z6~8w~BZ<)M;hu8QxwA;?&Fi)&+0Vy{C;EyQ>^& ziS+-4nd#d=aM{pQ2suv|PKaoN*Fq>#LKsyUq)t4amGHVQh8@jG)`|u;8%Whfh_5J< zTN(*rSx-(aM+k(N5a9hTjs1}Zsax&EyR-zOwm;8l$&nN7QZ{};vtz%D6v=9-)H!P? z{bY_NSum|GVuI^xUE?OoLe*g*)SZ#ttQeoK#=uV{@mFJT2ZPmNE{%gy_uU3)(0l9x zx73I5aUQ83j};0gQ0ZxhqEjxs510W4{evv(Gw7`OBsfwDI*IqD5T{{Tv}C~r`M9YN zah2EQ*j>4xg4@A5?ZY_GR zmBeb<>8q*!FOJv@Tn9(^si4T-^I<>vLI(56kI}gtf%j20pN=VJDtS<=V}+tg$0Kbl z!!;H?``-8vO}uA81l5)Nwwb>B1i#R zUwuubIGlO9-DiKM2qM^#_tA4`D1xj!Dx_MzL$48HXY3cwwR8R_eDtd0wig> literal 0 HcmV?d00001 From 6ea7290f81899fd9886cb5606d3668ae2b800464 Mon Sep 17 00:00:00 2001 From: Victor Perez NGOUNOU Date: Mon, 16 Jan 2023 09:58:30 +0100 Subject: [PATCH 7/7] Add Card --- TP Blazor.sln | 2 +- TP Blazor/Components/Card.razor | 10 ++ TP Blazor/Components/Card.razor.cs | 16 +++ TP Blazor/Pages/Index.razor | 21 +++- TP Blazor/Pages/List.razor | 2 +- TP Blazor/Program.cs | 2 +- TP Blazor/Resources/Pages.List.Designer.cs | 72 ++++++++++++ TP Blazor/Resources/Pages.List.resx | 123 +++++++++++++++++++++ TP Blazor/TP Blazor.csproj | 23 ++-- TP Blazor/images/ertgetrfz.png | Bin 0 -> 15661 bytes 10 files changed, 253 insertions(+), 18 deletions(-) create mode 100644 TP Blazor/Components/Card.razor create mode 100644 TP Blazor/Components/Card.razor.cs create mode 100644 TP Blazor/Resources/Pages.List.Designer.cs create mode 100644 TP Blazor/Resources/Pages.List.resx create mode 100644 TP Blazor/images/ertgetrfz.png diff --git a/TP Blazor.sln b/TP Blazor.sln index f2dd4d1..0d42231 100644 --- a/TP Blazor.sln +++ b/TP Blazor.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.4.33205.214 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TP Blazor", "TP Blazor\TP Blazor.csproj", "{DC7DF5A3-75B4-4044-B267-88F4E7705712}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TP Blazor", "TP Blazor\TP Blazor.csproj", "{DC7DF5A3-75B4-4044-B267-88F4E7705712}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/TP Blazor/Components/Card.razor b/TP Blazor/Components/Card.razor new file mode 100644 index 0000000..e15f762 --- /dev/null +++ b/TP Blazor/Components/Card.razor @@ -0,0 +1,10 @@ +@using TP_Blazor.Models + +

Card

+ +@typeparam TItem +
+ @CardHeader(Item) + @CardBody(Item) + @CardFooter +
diff --git a/TP Blazor/Components/Card.razor.cs b/TP Blazor/Components/Card.razor.cs new file mode 100644 index 0000000..cd9a3a5 --- /dev/null +++ b/TP Blazor/Components/Card.razor.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Components; + +namespace TP_Blazor.Components +{ + public partial class Card + { + [Parameter] + public RenderFragment CardBody { get; set; } + + [Parameter] + public RenderFragment CardHeader { get; set; } + + [Parameter] + public RenderFragment CardFooter { get; set; } + } +} diff --git a/TP Blazor/Pages/Index.razor b/TP Blazor/Pages/Index.razor index 4d4e3bd..d545980 100644 --- a/TP Blazor/Pages/Index.razor +++ b/TP Blazor/Pages/Index.razor @@ -1,5 +1,6 @@ @page "/" @using System.Globalization +@using TP_Blazor.Components Index @@ -8,6 +9,20 @@ CurrentCulture: @CultureInfo.CurrentCulture

-Welcome to your new app. - - + + +
+ My templated Component Header +
+
+ +
+

Template Component Body

+
+
+ + + +
diff --git a/TP Blazor/Pages/List.razor b/TP Blazor/Pages/List.razor index c2df1a3..1656ee0 100644 --- a/TP Blazor/Pages/List.razor +++ b/TP Blazor/Pages/List.razor @@ -44,7 +44,7 @@ - @context.DisplayName + @context.DisplayName diff --git a/TP Blazor/Program.cs b/TP Blazor/Program.cs index 7261993..de0cb1a 100644 --- a/TP Blazor/Program.cs +++ b/TP Blazor/Program.cs @@ -25,7 +25,7 @@ builder.Services.AddBlazorise() builder.Services.AddBlazoredLocalStorage(); builder.Services.AddBlazoredModal(); builder.Services.AddControllers(); -builder.Services.AddLocalization(opt=>{opt.ResourcesPath="Resources";}); +builder.Services.AddLocalization(opt=>{opt.ResourcesPath= "Resources"; }); builder.Services.Configure(option => { option.DefaultRequestCulture = new RequestCulture(new CultureInfo("en-US")); diff --git a/TP Blazor/Resources/Pages.List.Designer.cs b/TP Blazor/Resources/Pages.List.Designer.cs new file mode 100644 index 0000000..33bac08 --- /dev/null +++ b/TP Blazor/Resources/Pages.List.Designer.cs @@ -0,0 +1,72 @@ +//------------------------------------------------------------------------------ +// +// Ce code a été généré par un outil. +// Version du runtime :4.0.30319.42000 +// +// Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si +// le code est régénéré. +// +//------------------------------------------------------------------------------ + +namespace TP_Blazor.Resources { + using System; + + + /// + /// Une classe de ressource fortement typée destinée, entre autres, à la consultation des chaînes localisées. + /// + // Cette classe a été générée automatiquement par la classe StronglyTypedResourceBuilder + // à l'aide d'un outil, tel que ResGen ou Visual Studio. + // Pour ajouter ou supprimer un membre, modifiez votre fichier .ResX, puis réexécutez ResGen + // avec l'option /str ou régénérez votre projet VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class Pages_List { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Pages_List() { + } + + /// + /// Retourne l'instance ResourceManager mise en cache utilisée par cette classe. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TP_Blazor.Resources.Pages.List", typeof(Pages_List).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Remplace la propriété CurrentUICulture du thread actuel pour toutes + /// les recherches de ressources à l'aide de cette classe de ressource fortement typée. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Recherche une chaîne localisée semblable à My Title. + /// + public static string btnTitle { + get { + return ResourceManager.GetString("btnTitle", resourceCulture); + } + } + } +} diff --git a/TP Blazor/Resources/Pages.List.resx b/TP Blazor/Resources/Pages.List.resx new file mode 100644 index 0000000..08603f9 --- /dev/null +++ b/TP Blazor/Resources/Pages.List.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + My Title + + \ No newline at end of file diff --git a/TP Blazor/TP Blazor.csproj b/TP Blazor/TP Blazor.csproj index 21b0de9..cef7a08 100644 --- a/TP Blazor/TP Blazor.csproj +++ b/TP Blazor/TP Blazor.csproj @@ -1,7 +1,7 @@ - + - net7.0 + net6.0 enable enable TP_Blazor @@ -15,7 +15,7 @@ - +
@@ -27,19 +27,18 @@ - - - ResXFileCodeGenerator - Pages.List.fr-FR.Designer.cs - - - - + True True - Pages.List.fr-FR.resx + Pages.List.resx + + + PublicResXFileCodeGenerator + Pages.List.Designer.cs + + diff --git a/TP Blazor/images/ertgetrfz.png b/TP Blazor/images/ertgetrfz.png new file mode 100644 index 0000000000000000000000000000000000000000..70abab6749237d353cd3a20584340f791d953959 GIT binary patch literal 15661 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