Move form state ownership from Home to leaf controls
This commit is contained in:
@@ -29,7 +29,7 @@
|
||||
{
|
||||
<p class="form-error">@CampaignState.ErrorMessage</p>
|
||||
}
|
||||
<form class="form-grid" @onsubmit="CreateCampaignSubmitted" @onsubmit:preventDefault>
|
||||
<form class="form-grid" @onsubmit="SubmitCreateCampaignAsync" @onsubmit:preventDefault>
|
||||
<label for="campaign-name">Campaign name</label>
|
||||
<input id="campaign-name" @bind="CampaignState.Model.Name" @bind:event="oninput" />
|
||||
@if (CampaignState.Errors.TryGetValue("name", out var campaignNameError))
|
||||
@@ -98,6 +98,8 @@
|
||||
</main>
|
||||
|
||||
@code {
|
||||
private FormState<CampaignFormModel> CampaignState { get; } = new();
|
||||
|
||||
[Parameter]
|
||||
public IReadOnlyList<CampaignSummary> Campaigns { get; set; } = [];
|
||||
|
||||
@@ -110,9 +112,6 @@
|
||||
[Parameter]
|
||||
public CampaignDetails? SelectedCampaign { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public FormState<CampaignFormModel> CampaignState { get; set; } = new();
|
||||
|
||||
[Parameter]
|
||||
public IReadOnlyList<RulesetDefinition> Rulesets { get; set; } = [];
|
||||
|
||||
@@ -129,11 +128,42 @@
|
||||
public EventCallback<ChangeEventArgs> CampaignSelectionChanged { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback CreateCampaignSubmitted { get; set; }
|
||||
public Func<CampaignFormModel, Task<FormSubmissionResult>> CreateCampaignSubmitted { get; set; } = _ => Task.FromResult(new FormSubmissionResult());
|
||||
|
||||
[Parameter]
|
||||
public EventCallback CreateCharacterRequested { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<CharacterSummary> EditCharacterRequested { get; set; }
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(CampaignState.Model.RulesetId) && Rulesets.Count > 0)
|
||||
{
|
||||
CampaignState.Model.RulesetId = Rulesets[0].Id;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task SubmitCreateCampaignAsync()
|
||||
{
|
||||
CampaignState.ResetValidation();
|
||||
|
||||
var result = await CreateCampaignSubmitted.Invoke(new CampaignFormModel
|
||||
{
|
||||
Name = CampaignState.Model.Name,
|
||||
RulesetId = CampaignState.Model.RulesetId
|
||||
});
|
||||
|
||||
CampaignState.Errors.Clear();
|
||||
foreach (var (key, value) in result.Errors)
|
||||
{
|
||||
CampaignState.Errors[key] = value;
|
||||
}
|
||||
|
||||
CampaignState.ErrorMessage = result.ErrorMessage;
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
CampaignState.Model.Name = string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user