Update and delete games #48

Merged
Egamorf merged 10 commits from feature/update-and-delete-games into main 2025-05-13 14:13:31 +02:00
7 changed files with 40 additions and 19 deletions
Showing only changes of commit e78f29ffac - Show all commits

View File

@@ -24,13 +24,13 @@
<div class="input-game">
<div class="label">@ResourcesKey.Developer :</div>
<SelectSearch TItem="DeveloperDto" Theme="Theme" GetLabel="@(i => i.Name)" QuickAdd=true
Items="Categories?.Developers" ValuesChanged="HandleDeveloperChanged"
Items="Categories?.Developers" ValuesChanged="HandleDeveloperChanged" Values="@(GameDto.Developer != null ? [GameDto.Developer] : [])"
AddItem="@(str => new DeveloperDto() { Name = str })" SelectType="SelectType.Single" />
</div>
<div class="input-game">
<div class="label">@ResourcesKey.Publisher :</div>
<SelectSearch TItem="PublisherDto" Theme="Theme" GetLabel="@(i => i.Name)" QuickAdd=true
Items="Categories?.Publishers" ValuesChanged="HandlePublisherChanged"
Items="Categories?.Publishers" ValuesChanged="HandlePublisherChanged" Values="@(GameDto.Publisher != null ? [GameDto.Publisher] : [])"
AddItem="@(str => new PublisherDto() { Name = str })" SelectType="SelectType.Single" />
</div>
</div>

View File

@@ -21,7 +21,7 @@ public partial class GameCreationForm
[CascadingParameter] private Popup? Popup { get; set; }
[Parameter] public CategoriesDto? Categories { get; set; }
[Parameter] public EventCallback OnSubmit { get; set; }
[Parameter] public int? GameIdToUpdate { get; set; }
[Parameter] public EventCallback OnRender { get; set; }
private GameDetailDto GameDto = new();
private EditContext? EditContext;
@@ -32,14 +32,16 @@ public partial class GameCreationForm
protected override void OnInitialized()
{
EditContext = new(GameDto);
IsLoading = GameIdToUpdate != null;
base.OnInitialized();
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await Js.InvokeVoidAsync("resizeGameForm");
await SetGameToUpdate();
if (firstRender)
{
await OnRender.InvokeAsync();
}
}
private void HandleOnCancel()
@@ -101,18 +103,13 @@ public partial class GameCreationForm
GameDto.Developer = devs.FirstOrDefault();
}
private async Task SetGameToUpdate()
public async Task SetGameToUpdateAsync(int gameId)
{
if (GameIdToUpdate == null)
{
return;
}
try
{
IsLoading = true;
GameDto = await GameGateway.GetGameById(GameIdToUpdate ?? 0);
GameDto = await GameGateway.GetGameById(gameId);
}
catch (Exception)
{
@@ -121,9 +118,9 @@ public partial class GameCreationForm
finally
{
IsLoading = false;
StateHasChanged();
}
EditContext = new(GameDto);
StateHasChanged();
}
}

View File

@@ -42,7 +42,7 @@
</div>
<Popup @ref=ManualAddPopup BackdropFilterClicked="HandleBackdropManualAddClicked" Closable=false>
<GameCreationForm GameIdToUpdate="@GameIdToUpdate" Categories="Categories" OnSubmit="() => HandleFetchDatas()" />
<GameCreationForm @ref="CreationForm" Categories="Categories" OnSubmit="() => HandleFetchDatas()" OnRender="HandleRenderCreationForm" />
</Popup>
<Popup @ref=DeletePopup Closable=false>

View File

@@ -17,6 +17,7 @@ public partial class Games : GameBaseComponent
private Popup? DeletePopup;
private GameDto? GameToDelete;
private int? GameIdToUpdate;
private GameCreationForm? CreationForm;
protected override async Task OnInitializedAsync()
{
@@ -101,4 +102,13 @@ public partial class Games : GameBaseComponent
GameToDelete = null;
}
private async Task HandleRenderCreationForm()
{
if (GameIdToUpdate != null && CreationForm != null)
{
await CreationForm.SetGameToUpdateAsync(GameIdToUpdate ?? 0);
}
GameIdToUpdate = null;
}
}

View File

@@ -27,9 +27,9 @@
@if (Params.Headers != null)
{
@foreach (var header in Params.Headers.Union(HeaderValues ?? []))
@foreach (var header in Params.Headers.UnionBy(HeaderValues ?? [], Params.GetHeaderLabel).OrderBy(Params.GetHeaderLabel))
{
<SelectRow IsSelected=HeaderValues?.Contains(header)
<SelectRow IsSelected=@(HeaderValues?.Any(val => Params.GetHeaderLabel(val) == Params.GetHeaderLabel(header)))
Label="@Params.GetHeaderLabel(header)" Theme=Theme
OnClick="_ => HandleHeaderClicked(header)" />
}
@@ -42,9 +42,9 @@
@if (Params.Items != null)
{
@foreach (var item in Params.Items.Union(Values ?? []))
@foreach (var item in Params.Items.UnionBy(Values ?? [], Params.GetItemLabel).OrderBy(Params.GetItemLabel))
{
<SelectRow IsSelected=Values?.Contains(item)
<SelectRow IsSelected=@(Values?.Any(val => Params.GetItemLabel(val) == Params.GetItemLabel(item)))
Label="@Params.GetItemLabel(item)" Theme=Theme
OnClick="_ => HandleValueClicked(item)" />
}

View File

@@ -89,8 +89,13 @@ public partial class Select<TItem, THeader>
if (Params.AddItem != null)
{
Values ??= [];
Values.Add(Params.AddItem(AddLabel));
if (Type != SelectType.Multiple)
{
Values = [];
}
Values.Add(Params.AddItem(AddLabel));
AddLabel = string.Empty;
await ValuesChanged.InvokeAsync(Values);

View File

@@ -32,6 +32,15 @@ public partial class SelectSearch<TItem>
base.OnParametersSet();
}
protected override void OnAfterRender(bool firstRender)
{
if (Values != null)
{
SearchInput?.SetText(string.Join(", ", Values.Select(GetLabel)));
}
}
private async Task HandleValuesChanged(IEnumerable<TItem> values)
{
Values = [.. values];