diff --git a/Project/adminBlazor/adminBlazor.Api/Properties/launchSettings.json b/Project/adminBlazor/adminBlazor.Api/Properties/launchSettings.json index 53872a0..b083e63 100644 --- a/Project/adminBlazor/adminBlazor.Api/Properties/launchSettings.json +++ b/Project/adminBlazor/adminBlazor.Api/Properties/launchSettings.json @@ -1,14 +1,23 @@ { + "$schema": "https://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:51530", + "sslPort": 44598 + } + }, "profiles": { "Minecraft.Crafting.Api": { "commandName": "Project", "launchBrowser": true, "launchUrl": "swagger", + "applicationUrl": "https://localhost:7234;http://localhost:5234", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, - "dotnetRunMessages": true, - "applicationUrl": "https://localhost:7234;http://localhost:5234" + "dotnetRunMessages": true }, "IIS Express": { "commandName": "IISExpress", @@ -22,17 +31,9 @@ "commandName": "Docker", "launchBrowser": true, "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger", - "publishAllPorts": true, - "useSSL": true - } - }, - "$schema": "https://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:51530", - "sslPort": 44598 + "environmentVariables": {}, + "useSSL": true, + "publishAllPorts": true } } } \ No newline at end of file diff --git a/Project/adminBlazor/adminBlazor.Api/adminBlazor.Api.csproj b/Project/adminBlazor/adminBlazor.Api/adminBlazor.Api.csproj index ba75d66..c4d939b 100644 --- a/Project/adminBlazor/adminBlazor.Api/adminBlazor.Api.csproj +++ b/Project/adminBlazor/adminBlazor.Api/adminBlazor.Api.csproj @@ -6,9 +6,10 @@ enable + - - + + diff --git a/Project/adminBlazor/adminBlazor/Factories/VocListFactory.cs b/Project/adminBlazor/adminBlazor/Factories/VocListFactory.cs new file mode 100644 index 0000000..431e46a --- /dev/null +++ b/Project/adminBlazor/adminBlazor/Factories/VocListFactory.cs @@ -0,0 +1,45 @@ +using adminBlazor.Models; +using Blazorise; +using Blazorise.Extensions; +using System.Data; +using System.Text.RegularExpressions; +using System.Xml.Linq; + +namespace adminBlazor.Factories +{ + public static class VocListFactory + { + public static VocabularyListModel ToModel(VocabularyList voc) + { + return new VocabularyListModel + { + id = voc.id, + name = voc.name, + image = voc.image, + aut = voc.aut + }; + } + + public static VocabularyList Create(VocabularyListModel voc) + { + return new VocabularyList + { + id = voc.id, + name = voc.name, + image = voc.image, + aut = voc.aut + }; + } + public static void Update(VocabularyList item, VocabularyListModel voc) + { + if (!string.IsNullOrEmpty(voc.name)) + item.name = voc.name; + + if (!string.IsNullOrEmpty(voc.image)) + item.image = voc.image; + } + + } + +} + diff --git a/Project/adminBlazor/adminBlazor/Models/Translation.cs b/Project/adminBlazor/adminBlazor/Models/Translation.cs new file mode 100644 index 0000000..1189cc4 --- /dev/null +++ b/Project/adminBlazor/adminBlazor/Models/Translation.cs @@ -0,0 +1,12 @@ +using System; +namespace adminBlazor.Models +{ + public class Translation + { + private int id; + private string word1; + private string word2; + private int listVoc; + } +} + diff --git a/Project/adminBlazor/adminBlazor/Models/VocabularyList.cs b/Project/adminBlazor/adminBlazor/Models/VocabularyList.cs new file mode 100644 index 0000000..acd427c --- /dev/null +++ b/Project/adminBlazor/adminBlazor/Models/VocabularyList.cs @@ -0,0 +1,12 @@ +using System; +namespace adminBlazor.Models +{ + public class VocabularyList + { + public int id; + public string name; + public string image; + public int? aut; + } +} + diff --git a/Project/adminBlazor/adminBlazor/Models/VocabularyListModel.cs b/Project/adminBlazor/adminBlazor/Models/VocabularyListModel.cs new file mode 100644 index 0000000..977e4eb --- /dev/null +++ b/Project/adminBlazor/adminBlazor/Models/VocabularyListModel.cs @@ -0,0 +1,18 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace adminBlazor.Models +{ + public class VocabularyListModel + { + [Required] + public int id { get; set; } + + public string name { get; set; } + + public string image { get; set; } + + public int? aut { get; set; } + } +} + diff --git a/Project/adminBlazor/adminBlazor/Pages/EditVoc.razor b/Project/adminBlazor/adminBlazor/Pages/EditVoc.razor new file mode 100644 index 0000000..fe6710d --- /dev/null +++ b/Project/adminBlazor/adminBlazor/Pages/EditVoc.razor @@ -0,0 +1,26 @@ +@page "/editVoc/{Id:int}" +@using adminBlazor.Models + + +

Edit

+

Voc id : @Id

+ + + + +

+ +

+ +

+ +

+ + +
\ No newline at end of file diff --git a/Project/adminBlazor/adminBlazor/Pages/EditVoc.razor.cs b/Project/adminBlazor/adminBlazor/Pages/EditVoc.razor.cs new file mode 100644 index 0000000..a46d330 --- /dev/null +++ b/Project/adminBlazor/adminBlazor/Pages/EditVoc.razor.cs @@ -0,0 +1,44 @@ +using adminBlazor.Factories; +using adminBlazor.Models; +using adminBlazor.Services; +using Blazored.LocalStorage; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Hosting; + + +namespace adminBlazor.Pages +{ + public partial class EditVoc + { + [Parameter] + public int Id { get; set; } + + [Inject] + public IVocListService VocListService { get; set; } + + [Inject] + public NavigationManager NavigationManager { get; set; } + + [Inject] + public IWebHostEnvironment WebHostEnvironment { get; set; } + + public VocabularyList currVoc; + + private VocabularyListModel voc = new VocabularyListModel(); + + private async void HandleValidSubmit() + { + await VocListService.Update(Id, voc); + + NavigationManager.NavigateTo("list"); + } + + + protected async Task OnInitializedAsync() + { + var item = await VocListService.GetById(Id); + + voc = VocListFactory.ToModel(item); + } + } +} diff --git a/Project/adminBlazor/adminBlazor/Pages/Voc.razor b/Project/adminBlazor/adminBlazor/Pages/Voc.razor new file mode 100644 index 0000000..ec108a0 --- /dev/null +++ b/Project/adminBlazor/adminBlazor/Pages/Voc.razor @@ -0,0 +1,43 @@ +@page "/voc" +@using adminBlazor.Models + + + + + + +

Vocabulary Lists

+ + + + + + + + + @if (context is VocabularyList voc) + { + @if (voc.aut != null) + { + @voc.aut + } + else + { + No author + } + } + + + + + + Editer + + + diff --git a/Project/adminBlazor/adminBlazor/Pages/Voc.razor.cs b/Project/adminBlazor/adminBlazor/Pages/Voc.razor.cs new file mode 100644 index 0000000..94a73f0 --- /dev/null +++ b/Project/adminBlazor/adminBlazor/Pages/Voc.razor.cs @@ -0,0 +1,71 @@ +using adminBlazor.Modals; +using adminBlazor.Models; +using adminBlazor.Services; +using Blazored.LocalStorage; +using Blazored.Modal; +using Blazored.Modal.Services; +using Blazorise.DataGrid; +using Microsoft.AspNetCore.Components; + +namespace adminBlazor.Pages +{ + public partial class Voc + { + private List _vocList; + + private int totalVocList; + + [Inject] + public HttpClient Http { get; set; } + + [Inject] + public ILocalStorageService LocalStorage { get; set; } + + [Inject] + public NavigationManager NavigationManager { get; set; } + + [CascadingParameter] + public IModalService Modal { get; set; } + + [Inject] + public IVocListService VocListService { get; set; } + + + protected async Task OnAfterRenderAsync(bool firstRender) + { + // Do not treat this action if is not the first render + if (firstRender) + { + return; + } + + var currentData = await LocalStorage.GetItemAsync("voc"); + + // 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($"{NavigationManager.BaseUri}voc.json").Result; + await LocalStorage.SetItemAsync("voc", 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.GetJsonAsync( $"http://my-api/api/data?page={e.Page}&pageSize={e.PageSize}" ); + //var response = (await LocalStorage.GetItemAsync("data")).Skip((e.Page - 1) * e.PageSize).Take(e.PageSize).ToList(); + + if (!e.CancellationToken.IsCancellationRequested) + { + _vocList = await VocListService.List(e.Page, e.PageSize); + totalVocList = await VocListService.Count();// an actual data for the current page + } + } + } +} \ No newline at end of file diff --git a/Project/adminBlazor/adminBlazor/Program.cs b/Project/adminBlazor/adminBlazor/Program.cs index b449153..2262fec 100644 --- a/Project/adminBlazor/adminBlazor/Program.cs +++ b/Project/adminBlazor/adminBlazor/Program.cs @@ -29,7 +29,12 @@ builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddSingleton(); builder.Services.AddScoped(); +<<<<<<< HEAD builder.Services.AddScoped(); +======= +builder.Services.AddScoped(); +//builder.Services.AddScoped(); +>>>>>>> f62a4611bcbbfe0ed449a38e75f10df8ce6a5bbe builder.Services.AddHttpClient(); builder.Services.AddBlazoredLocalStorage(); diff --git a/Project/adminBlazor/adminBlazor/Services/IVocListService.cs b/Project/adminBlazor/adminBlazor/Services/IVocListService.cs new file mode 100644 index 0000000..d345522 --- /dev/null +++ b/Project/adminBlazor/adminBlazor/Services/IVocListService.cs @@ -0,0 +1,25 @@ +using adminBlazor.Models; +using Microsoft.AspNetCore.Hosting; +using Blazored.LocalStorage; +using adminBlazor.Factories; +using Microsoft.AspNetCore.Components; + +namespace adminBlazor.Services +{ + + public interface IVocListService + { + + Task Add(VocabularyListModel model); + + Task Count(); + + Task> List(int currentPage, int pageSize); + + Task GetById(int id); + + Task Update(int id, VocabularyListModel model); + + Task Delete(int id); + } +} \ No newline at end of file diff --git a/Project/adminBlazor/adminBlazor/Services/VocListLocalService.cs b/Project/adminBlazor/adminBlazor/Services/VocListLocalService.cs new file mode 100644 index 0000000..229ccb5 --- /dev/null +++ b/Project/adminBlazor/adminBlazor/Services/VocListLocalService.cs @@ -0,0 +1,92 @@ +using adminBlazor.Factories; +using adminBlazor.Models; +using Blazored.LocalStorage; +using Blazorise.Extensions; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Hosting; + +namespace adminBlazor.Services +{ + public class VocListLocalService : IVocListService + { + private readonly HttpClient _http; + private readonly ILocalStorageService _localStorage; + private readonly NavigationManager _navigationManager; + private readonly IWebHostEnvironment _webHostEnvironment; + + public VocListLocalService( + ILocalStorageService localStorage, + HttpClient http, + IWebHostEnvironment webHostEnvironment, + NavigationManager navigationManager) + { + _localStorage = localStorage; + _http = http; + _webHostEnvironment = webHostEnvironment; + _navigationManager = navigationManager; + } + public VocListLocalService(ILocalStorageService localStorage) + { + _localStorage = localStorage; // Assure-toi que LocalStorage est initialisé correctement ici + } + + public async Task Add(VocabularyListModel model) + { + var currentList = await _localStorage.GetItemAsync>("voc"); + + model.id = currentList.Max(s => s.id) + 1; + + currentList.Add(VocListFactory.Create(model)); + + await _localStorage.SetItemAsync("voc", currentList); + } + + public async Task Count() + { + var currentList = await _localStorage.GetItemAsync("voc"); + + // Check if data exist in the local storage + if (currentList == null) + { + // this code add in the local storage the fake data + var originalList = await _http.GetFromJsonAsync($"{_navigationManager.BaseUri}voc.json"); + await _localStorage.SetItemAsync("voc", originalList); + } + + return (await _localStorage.GetItemAsync("voc")).Length; + } + + public async Task> List(int currentPage, int pageSize) + { + var currentList = await _localStorage.GetItemAsync("voc"); + + // Check if data exist in the local storage + if (currentList == null) + { + // this code add in the local storage the fake data + var originalData = await _http.GetFromJsonAsync($"{_navigationManager.BaseUri}voc.json"); + await _localStorage.SetItemAsync("voc", originalData); + } + + return (await _localStorage.GetItemAsync("voc")).Skip((currentPage - 1) * pageSize).Take(pageSize).ToList(); + + } + + public async Task GetById(int id) + { + var currentLists = await _localStorage.GetItemAsync>("voc"); + + return new VocabularyList(); + } + + public Task Update(int id, VocabularyListModel model) + { + throw new NotImplementedException(); + } + + public Task Delete(int id) + { + throw new NotImplementedException(); + } + } +} diff --git a/Project/adminBlazor/adminBlazor/wwwroot/voc.json b/Project/adminBlazor/adminBlazor/wwwroot/voc.json new file mode 100644 index 0000000..fb1e289 --- /dev/null +++ b/Project/adminBlazor/adminBlazor/wwwroot/voc.json @@ -0,0 +1,14 @@ +[ + { + "id": 1, + "name": "Entreprise", + "image": "link", + "aut": null + }, + { + "id": 2, + "name": "Animaux", + "image": "link", + "aut" : 1 + } +] \ No newline at end of file