@page "/events/create"
@attribute [Authorize]
@using WebApp.Components.Shared.Components
@using Core.Utility
@using Microsoft.EntityFrameworkCore
@using MudBlazor
@using WebApp.Services
@inject AppDbContext context
@inject NavigationManager NavigationManager
@inject ISnackbar Snackbar
@inject FormValidationService ValidationService
@inject EventDefinitionService EventDefinitionService
Basic Information
Event Format
@foreach (EventFormat format in Enum.GetValues(typeof(EventFormat)))
{
@format.ToString()
}
Event Details
Team Configuration
Competition Details
Create
Cancel
@code {
[SupplyParameterFromQuery]
private string? ReturnUrl { get; set; }
[SupplyParameterFromForm]
private EventDefinition EventDefinition { get; set; } = new();
private FormChangeTracker? _formChangeTracker;
private EditContext? _editContext;
private List _validationErrors = new();
protected override void OnInitialized()
{
_editContext = new EditContext(EventDefinition);
}
private void OnInvalidSubmit(EditContext editContext)
{
_validationErrors = ValidationService.HandleInvalidSubmit(editContext, EventDefinition, errors => _validationErrors = errors);
StateHasChanged();
}
private async Task OnValidSubmit()
{
_validationErrors.Clear();
try
{
// Normalize and process related careers
await EventDefinitionService.ProcessRelatedCareersAsync(EventDefinition);
context.Events.Add(EventDefinition);
await context.SaveChangesAsync();
Snackbar.Add($"Event '{EventDefinition.Name}' created successfully.", Severity.Success);
_formChangeTracker?.AllowNavigation();
NavigationManager.NavigateTo(ReturnUrl ?? "/events");
}
catch (DbUpdateException ex)
{
ValidationService.HandleDbUpdateException(
ex,
"An error occurred while creating the event.",
"event",
"creating",
"name");
}
catch (Exception ex)
{
ValidationService.HandleException(ex);
}
}
private void HandleCancel()
{
_formChangeTracker?.AllowNavigation();
NavigationManager.NavigateTo(ReturnUrl ?? "/events");
}
}