travail sur la page d'edit

blazor
Patrick BRUGIERE 1 year ago
parent a6130fe49e
commit ce2e96d4d1

@ -0,0 +1,59 @@
using adminBlazor.Models;
using Blazorise;
using System.Data;
using System.Text.RegularExpressions;
using System.Xml.Linq;
namespace adminBlazor.Factories
{
public static class UserFactory
{
public static User ToModel(User user, byte[] imageContent)
{
return new User
{
Id = user.Id,
Name = user.Name,
Surname = user.Surname,
Nickname = user.Nickname,
ExtraTime = user.ExtraTime,
Image = user.Image,
Group = user.Group,
Password = user.Password,
Email = user.Email,
Roles = user.Roles
};
}
public static User Create(User user)
{
return new User
{
Id = user.Id,
Name = user.Name,
Surname = user.Surname,
Nickname = user.Nickname,
ExtraTime = user.ExtraTime,
Image = user.Image,
Group = user.Group,
Password = user.Password,
Email = user.Email,
Roles = user.Roles
};
}
public static void Update(User item, User user)
{
item.Id = user.Id;
item.Name = user.Name;
item.Surname = user.Surname;
item.Nickname = user.Nickname;
item.ExtraTime = user.ExtraTime;
item.Image = user.Image;
item.Group = user.Group;
item.Password = user.Password;
item.Email = user.Email;
item.Roles = user.Roles;
}
}
}

@ -3,4 +3,95 @@
<h3>Edit</h3> <h3>Edit</h3>
<div>My parameter: @Id</div> <EditForm Model="@user" OnValidSubmit="@HandleValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<p>
<label for="name">
Name:
<InputText id="name" @bind-Value="user.Name" />
</label>
</p>
<p>
<label for="password">
Password:
<InputText id="password" @bind-Value="user.Password" type="password" />
</label>
</p>
<p>
<label for="max-durability">
Email:
<InputText id="max-durability" @bind-Value="user.Email" />
</label>
</p>
@*
<p>
Roles categories:
<div>
@foreach (var item in roles)
{
<label>
<input type="checkbox" @onchange="@(e => RolesCategoriesChange(item, e.Value))"
checked="@user.Roles.Contains(item)" />@item
</label>
}
</div>
</p>
*@
<p>
roles
<div>
@foreach (var role in roles)
{
var currentItem = role; // Capturer la variable locale pour éviter les problèmes de fermeture
@if (currentItem == "student")
{
<label>
<input type="checkbox" @onchange="@(e => RolesCategoriesChange(role, e.Value))" checked="@(user.Roles.Contains(currentItem) ? "checked" : null)" />
Student
</label>
break;
}
<label>
<input type="checkbox" @onchange="@(e => RolesCategoriesChange(role, e.Value))" disabled="@disableOtherCheckboxes" checked="@(user.Roles.Contains(currentItem) ? "checked" : null)" />
@currentItem
</label>
<br />
}
</div>
</p>
<p>
<label>
Nickname
<InputText @bind-Value="user.Nickname" />
</label>
</p>
<p>
<label>
Surname
<InputText @bind-Value="user.Surname" />
</label>
</p>
<p>
<label>
Image
<InputText @bind-Value="user.Image" />
</label>
</p>
<p>
<label>
ExtraTime
<InputCheckbox @bind-Value="user.ExtraTime" />
</label>
</p>
<p>
<label>
Group
<InputNumber @bind-Value="user.Group" />
</label>
</p>
<button type="submit">Submit</button>
</EditForm>

@ -1,4 +1,9 @@
using Microsoft.AspNetCore.Components; using adminBlazor.Models;
using adminBlazor.Services;
using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Hosting;
namespace adminBlazor.Pages namespace adminBlazor.Pages
{ {
@ -7,5 +12,163 @@ namespace adminBlazor.Pages
[Parameter] [Parameter]
public int Id { get; set; } public int Id { get; set; }
//IDataService
public IDataService DataService { get; set; }
//public ILocalStorageService LocalStorage { get; set; }
[Inject]
public NavigationManager NavigationManager { get; set; }
[Inject]
public IWebHostEnvironment WebHostEnvironment { get; set; }
/// <summary>
/// The default enchant categories.
/// </summary>
private List<string> roles = new List<string>() { "admin", "teacher", "student" };
/// <summary>
/// The current item model
/// </summary>
private Models.User user = new Models.User()
{
Roles = new List<string>()
};
private async void HandleValidSubmit()
{
await DataService.Update(Id, user);
NavigationManager.NavigateTo("list");
}
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/{user.Name}.png"))
{
fileContent = await File.ReadAllBytesAsync($"{WebHostEnvironment.WebRootPath}/images/{item.Name}.png");
}
// Set the model with the item
user = new User
{
Id = user.Id,
Name = user.Name,
Surname = user.Surname,
Nickname = user.Nickname,
ExtraTime = user.ExtraTime,
Image = user.Image,
Group = user.Group,
Password = user.Password,
Email = user.Email,
Roles = user.Roles
};
}
/*
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);
user.Image = memoryStream.ToArray();
}
}
*/
private bool isStudentChecked = false;
private bool disableOtherCheckboxes = false;
private void StudentCheckboxChange(string currentItem, object checkedValue)
{
if (currentItem == "student")
{
if (isStudentChecked)
{
// Activer les autres cases à cocher si "Étudiant" est cochée
disableOtherCheckboxes = true;
if (!user.Roles.Contains(currentItem))
{
user.Roles.Add(currentItem);
}
}
else
{
// Désactiver les autres cases à cocher si "Étudiant" est décochée
disableOtherCheckboxes = false;
user.Roles.Remove(currentItem);
}
}
}
private void OtherCheckboxChange(string currentItem)
{
if (isStudentChecked && currentItem != "student")
{
// Si "Étudiant" est coché, désactiver les autres cases
disableOtherCheckboxes = true;
if (!user.Roles.Contains(currentItem))
{
user.Roles.Add(currentItem);
}
}
else
{
// Sinon, activer les autres cases
disableOtherCheckboxes = false;
user.Roles.Remove(currentItem);
}
}
private void RolesCategoriesChange(string item, object checkedValue)
{
if (item == "student")
{
isStudentChecked = (bool)checkedValue;
if (isStudentChecked)
{
// Activer les autres cases à cocher si "Étudiant" est cochée
disableOtherCheckboxes = true;
if (!user.Roles.Contains(item))
{
user.Roles.Add(item);
}
}
else
{
// Désactiver les autres cases à cocher si "Étudiant" est décochée
disableOtherCheckboxes = false;
user.Roles.Remove(item);
}
}
else
{
if (disableOtherCheckboxes)
{
//la case student a été coché ducoup on n'ajoute pas les autres rôles cochés
return;
if ((bool)checkedValue)
{
if (!user.Roles.Contains(item))
{
user.Roles.Add(item);
}
}
else
{
user.Roles.Remove(item);
}
}
}
}
} }
} }

@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Http.Features;
using adminBlazor.Models; using adminBlazor.Models;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Json; using System.Net.Http.Json;
using adminBlazor.Services;
namespace adminBlazor.Pages namespace adminBlazor.Pages
{ {
@ -23,6 +24,7 @@ namespace adminBlazor.Pages
[Inject] [Inject]
public NavigationManager NavigationManager { get; set; } public NavigationManager NavigationManager { get; set; }
protected override async Task OnAfterRenderAsync(bool firstRender) protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
// Do not treat this action if is not the first render // Do not treat this action if is not the first render

@ -1,4 +1,5 @@
using adminBlazor.Models; using adminBlazor.Factories;
using adminBlazor.Models;
using Blazored.LocalStorage; using Blazored.LocalStorage;
using Blazorise.Extensions; using Blazorise.Extensions;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
@ -6,13 +7,26 @@ using Microsoft.AspNetCore.Hosting;
namespace adminBlazor.Services namespace adminBlazor.Services
{ {
public class DataLocalService public class DataLocalService : IDataService
{ {
[Inject]
public required ILocalStorageService LocalStorage { get; set; } public required ILocalStorageService LocalStorage { get; set; }
[Inject] [Inject]
public required IWebHostEnvironment WebHostEnvironment { get; set; } public required IWebHostEnvironment WebHostEnvironment { get; set; }
public DataLocalService dataLocalService => throw new NotImplementedException();
public Task Add(User model)
{
throw new NotImplementedException();
}
public Task<int> Count()
{
throw new NotImplementedException();
}
public async Task<User> GetById(int id) public async Task<User> GetById(int id)
{ {
// Get the current data // Get the current data
@ -28,6 +42,11 @@ namespace adminBlazor.Services
return user; return user;
} }
public Task<List<User>> List(int currentPage, int pageSize)
{
throw new NotImplementedException();
}
public async Task Update(int id, User model) public async Task Update(int id, User model)
{ {
// Get the current data // Get the current data
@ -64,7 +83,8 @@ namespace adminBlazor.Services
var fileName = new FileInfo($"{imagePathInfo}/{model.Name}.png"); var fileName = new FileInfo($"{imagePathInfo}/{model.Name}.png");
// Write the file content // Write the file content
// await File.WriteAllBytesAsync(fileName.FullName, model.Image); //await File.WriteAllBytesAsync(fileName.FullName, model.Image);
UserFactory.Update(user, model);
// Modify the content of the item // Modify the content of the item
user.Nickname = model.Nickname; user.Nickname = model.Nickname;

@ -3,8 +3,10 @@ using Microsoft.AspNetCore.Hosting;
using Blazored.LocalStorage; using Blazored.LocalStorage;
namespace adminBlazor.Services namespace adminBlazor.Services
{ {
public interface IDataService public interface IDataService
{ {
Task Add(User model); Task Add(User model);
Task<int> Count(); Task<int> Count();

Loading…
Cancel
Save