@inject ToolService ToolService @inject NavigationManager NavigationManager @inject MessageService MessageService @inject ILogger Logger @if (Id != Guid.Empty) { General Actions Archives Scripts } else { @* Add button without RouterLink, prevents routing on disabled/inactive menu item *@ General } @if (TitleTemplate != null) { @TitleTemplate(Tool) } else { @Title } @TitleExtraTemplate?.Invoke(Tool)
@ChildContent?.Invoke(Tool)
@code { [Parameter] public Guid Id { get; set; } [Parameter] public string Title { get; set; } [Parameter] public RenderFragment? TitleTemplate { get; set; } [Parameter] public RenderFragment? TitleExtraTemplate { get; set; } [Parameter] public RenderFragment? ChildContent { get; set; } Tool Tool { get; set; } = new(); Guid _id; protected override async Task OnParametersSetAsync() { if (_id != Id) { _id = Id; if (_id != Guid.Empty) Tool = await ToolService .Include(r => r.Games) .Include(r => r.CreatedBy) .Include(r => r.UpdatedBy) .GetAsync(_id); else Tool = new(); if (Tool == null) NavigationManager.NavigateTo("/Tools"); } } public async Task Save() { try { if (_id != Guid.Empty) { await ToolService.UpdateAsync(Tool); MessageService.Success("Tool updated!"); } else { Tool = await ToolService.AddAsync(Tool); NavigationManager.LocationChanged += NotifyToolAdded; NavigationManager.NavigateTo($"/Tools/{Tool.Id}"); } } catch (Exception ex) { Logger?.LogError(ex, "Tool could not be saved!"); MessageService.Error("Tool could not be saved!"); } } private void NotifyToolAdded(object? sender, LocationChangedEventArgs e) { NavigationManager.LocationChanged -= NotifyToolAdded; MessageService.Success("Tool added!"); } }