Update and delete games #48
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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)" />
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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];
|
||||
|
||||
Reference in New Issue
Block a user