123 lines
5.6 KiB
Plaintext
123 lines
5.6 KiB
Plaintext
@page "/events/edit"
|
|
@attribute [Authorize]
|
|
@using Microsoft.EntityFrameworkCore
|
|
@using WebApp.Components.Shared.Components
|
|
@inject AppDbContext context
|
|
@inject NavigationManager NavigationManager
|
|
|
|
@if (EventDefinition is null)
|
|
{
|
|
<p><em>Loading...</em></p>
|
|
return;
|
|
}
|
|
|
|
<PageHeader
|
|
Title="Edit"
|
|
Subtitle="Event"
|
|
ShowBackButton="true"
|
|
BackButtonUrl="/events" />
|
|
|
|
<EditForm id="edit-event-form" Model="EventDefinition" OnValidSubmit="OnValidSubmit" Enhance>
|
|
<FormChangeTracker @ref="_formChangeTracker" />
|
|
<AntiforgeryToken />
|
|
<DataAnnotationsValidator />
|
|
<MudGrid>
|
|
<MudItem xs="12" sm="7">
|
|
<MudPaper Class="pa-4">
|
|
<MudTextField T="string" Label="Event Name" @bind-Value="EventDefinition.Name" For="@(() => EventDefinition.Name)"></MudTextField>
|
|
<MudTextField T="string" Label="Short Name" @bind-Value="EventDefinition.ShortName" For="@(() => EventDefinition.ShortName)"></MudTextField>
|
|
|
|
<MudText Typo="Typo.subtitle2" Class="mt-4 mb-2">Format</MudText>
|
|
<MudRadioGroup T="EventFormat" @bind-Value="@EventDefinition.EventFormat" For="@(() => EventDefinition.EventFormat)">
|
|
@foreach (EventFormat format in Enum.GetValues(typeof(EventFormat)))
|
|
{
|
|
<MudRadio T="EventFormat" Value="@format">@format.ToString()</MudRadio>
|
|
}
|
|
</MudRadioGroup>
|
|
|
|
<MudTextField T="string" Label="Description" AutoGrow="true" @bind-Value="EventDefinition.Description" For="@(() => EventDefinition.Description)" Class="mt-4"></MudTextField>
|
|
<MudTextField T="string" Label="Theme" AutoGrow="true" @bind-Value="EventDefinition.Theme" For="@(() => EventDefinition.Theme)"></MudTextField>
|
|
<MudTextField T="string" Label="Documentation" @bind-Value="EventDefinition.Documentation" For="@(() => EventDefinition.Documentation)"></MudTextField>
|
|
<MudNumericField T="int?" Label="Level of Effort" @bind-Value="EventDefinition.LevelOfEffort" For="@(() => EventDefinition.LevelOfEffort)"></MudNumericField>
|
|
<MudDivider></MudDivider>
|
|
<MudTextField T="string" Label="Nationals Eligibility" @bind-Value="EventDefinition.Eligibility" For="@(() => EventDefinition.Eligibility)"></MudTextField>
|
|
<MudNumericField T="int" Label="Minimum Team Size" @bind-Value="EventDefinition.MinTeamSize" For="@(() => EventDefinition.MinTeamSize)"></MudNumericField>
|
|
<MudNumericField T="int" Label="Maxiumum Team Size" @bind-Value="EventDefinition.MaxTeamSize" For="@(() => EventDefinition.MaxTeamSize)"></MudNumericField>
|
|
<MudNumericField T="int" Label="Team Count at Regionals" @bind-Value="EventDefinition.ChapterEligibilityCountRegionals" For="@(() => EventDefinition.ChapterEligibilityCountRegionals)"></MudNumericField>
|
|
<MudNumericField T="int" Label="Team Count at State" @bind-Value="EventDefinition.ChapterEligibilityCountState" For="@(() => EventDefinition.ChapterEligibilityCountState)"></MudNumericField>
|
|
<MudDivider></MudDivider>
|
|
<MudTextField T="string" Label="Semifinalist Activity" @bind-Value="EventDefinition.SemifinalistActivity" For="@(() => EventDefinition.SemifinalistActivity)"></MudTextField>
|
|
<MudCheckBox T="bool" Label="On Site Activity" @bind-Value="EventDefinition.OnSiteActivity" For="@(() => EventDefinition.OnSiteActivity)"></MudCheckBox>
|
|
<MudCheckBox T="bool" Label="Requires Presubmission" @bind-Value="EventDefinition.Presubmission" For="@(() => EventDefinition.Presubmission)"></MudCheckBox>
|
|
</MudPaper>
|
|
</MudItem>
|
|
</MudGrid>
|
|
</EditForm>
|
|
|
|
<FormActions>
|
|
<MudButton ButtonType="ButtonType.Submit" Variant="Variant.Filled" Color="Color.Primary" Form="edit-event-form">Save</MudButton>
|
|
<MudButton OnClick="HandleCancel" Variant="Variant.Text">Cancel</MudButton>
|
|
</FormActions>
|
|
|
|
@code {
|
|
[SupplyParameterFromQuery]
|
|
private int Id { get; set; }
|
|
|
|
[SupplyParameterFromForm]
|
|
private EventDefinition? EventDefinition { get; set; }
|
|
|
|
private FormChangeTracker? _formChangeTracker;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
EventDefinition ??= await context.Events.FirstOrDefaultAsync(m => m.Id == Id);
|
|
|
|
if (EventDefinition is null)
|
|
{
|
|
NavigationManager.NavigateTo("notfound");
|
|
}
|
|
}
|
|
|
|
// To protect from overposting attacks, enable the specific properties you want to bind to.
|
|
// For more information, see https://learn.microsoft.com/aspnet/core/blazor/forms/#mitigate-overposting-attacks.
|
|
private void OnValidSubmit()
|
|
{
|
|
context.Attach(EventDefinition!).State = EntityState.Modified;
|
|
|
|
try
|
|
{
|
|
context.SaveChangesAsync();
|
|
_formChangeTracker?.AllowNavigation();
|
|
NavigationManager.NavigateTo("/events");
|
|
}
|
|
catch (DbUpdateConcurrencyException)
|
|
{
|
|
if (!EventDefinitionExists(EventDefinition!.Id))
|
|
{
|
|
NavigationManager.NavigateTo("notfound");
|
|
}
|
|
else
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
|
|
private async Task HandleCancel()
|
|
{
|
|
// Discard all in-memory changes by reloading from database
|
|
if (EventDefinition != null)
|
|
{
|
|
await context.Entry(EventDefinition).ReloadAsync();
|
|
}
|
|
|
|
_formChangeTracker?.AllowNavigation();
|
|
NavigationManager.NavigateTo("/events");
|
|
}
|
|
|
|
private bool EventDefinitionExists(int id)
|
|
{
|
|
return context.Events.Any(e => e.Id == id);
|
|
}
|
|
}
|