< Summary

Information
Class: Chronicis.Client.Components.Dialogs.CreateQuestDialog
Assembly: Chronicis.Client
File(s): /home/runner/work/chronicis/chronicis/src/Chronicis.Client/Components/Dialogs/CreateQuestDialog.razor
Line coverage
100%
Covered lines: 4
Uncovered lines: 0
Coverable lines: 4
Total lines: 124
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%
Cancel()100%22100%

File(s)

/home/runner/work/chronicis/chronicis/src/Chronicis.Client/Components/Dialogs/CreateQuestDialog.razor

#LineLine coverage
 1@using Chronicis.Shared.DTOs.Quests
 2@using Chronicis.Shared.Enums
 3@using MudBlazor
 4@inject IQuestApiService QuestApi
 5
 6<MudDialog>
 7    <TitleContent>
 8        <MudText Typo="Typo.h6">
 9            <MudIcon Icon="@Icons.Material.Filled.Flag" Class="mr-2" />
 10            New Quest
 11        </MudText>
 12    </TitleContent>
 13    <DialogContent>
 14        <MudTextField @bind-Value="_title"
 15                      Label="Quest Title"
 16                      Variant="Variant.Outlined"
 17                      Required="true"
 18                      RequiredError="Title is required"
 19                      Placeholder="e.g., Find the Lost Artifact"
 20                      Class="mb-3"
 21                      @ref="_titleField"
 22                      Immediate="true"
 23                      OnKeyDown="@OnTitleKeyDown" />
 24
 25        <MudTextField @bind-Value="_description"
 26                      Label="Description (optional)"
 27                      Variant="Variant.Outlined"
 28                      Lines="3"
 29                      Placeholder="Brief summary of the quest..."
 30                      Class="mb-3" />
 31
 32        <MudSelect T="QuestStatus"
 33                   @bind-Value="_status"
 34                   Label="Status"
 35                   Variant="Variant.Outlined"
 36                   Class="mb-3">
 37            <MudSelectItem T="QuestStatus" Value="QuestStatus.Active">Active</MudSelectItem>
 38            <MudSelectItem T="QuestStatus" Value="QuestStatus.Completed">Completed</MudSelectItem>
 39            <MudSelectItem T="QuestStatus" Value="QuestStatus.Failed">Failed</MudSelectItem>
 40            <MudSelectItem T="QuestStatus" Value="QuestStatus.Abandoned">Abandoned</MudSelectItem>
 41        </MudSelect>
 42
 43        <MudSwitch @bind-Value="_isGmOnly"
 44                   Label="GM Only"
 45                   Color="Color.Warning"
 46                   Class="mb-3" />
 47    </DialogContent>
 48    <DialogActions>
 49        <MudButton OnClick="Cancel">Cancel</MudButton>
 50        <MudButton Color="Color.Primary"
 51                   Variant="Variant.Filled"
 52                   OnClick="Submit"
 53                   Disabled="@(string.IsNullOrWhiteSpace(_title) || _isSubmitting)">
 54            @if (_isSubmitting)
 55            {
 56                <MudProgressCircular Size="Size.Small" Indeterminate="true" Class="mr-2" />
 57            }
 58            Create
 59        </MudButton>
 60    </DialogActions>
 61</MudDialog>
 62
 63@code {
 64    [CascadingParameter]
 65    private MudDialogInstance? MudDialog { get; set; }
 66
 67    [Parameter]
 68    public Guid ArcId { get; set; }
 69
 1270    private string _title = string.Empty;
 1271    private string _description = string.Empty;
 72    private QuestStatus _status = QuestStatus.Active;
 73    private bool _isGmOnly = false;
 74    private bool _isSubmitting;
 75    private MudTextField<string>? _titleField;
 76
 77    protected override async Task OnAfterRenderAsync(bool firstRender)
 78    {
 79        if (firstRender && _titleField != null)
 80        {
 81            await _titleField.FocusAsync();
 82        }
 83    }
 84
 85    private async Task OnTitleKeyDown(KeyboardEventArgs e)
 86    {
 87        if (e.Key == "Enter" && !string.IsNullOrWhiteSpace(_title))
 88        {
 89            await Submit();
 90        }
 91    }
 92
 93    private async Task Submit()
 94    {
 95        if (string.IsNullOrWhiteSpace(_title) || _isSubmitting)
 96        {
 97            return;
 98        }
 99
 100        _isSubmitting = true;
 101
 102        var createDto = new QuestCreateDto
 103        {
 104            Title = _title.Trim(),
 105            Description = string.IsNullOrWhiteSpace(_description) ? null : _description.Trim(),
 106            Status = _status,
 107            IsGmOnly = _isGmOnly
 108        };
 109
 110        var result = await QuestApi.CreateQuestAsync(ArcId, createDto);
 111
 112        _isSubmitting = false;
 113
 114        if (result != null)
 115        {
 116            MudDialog?.Close(DialogResult.Ok(result));
 117        }
 118    }
 119
 120    private void Cancel()
 121    {
 2122        MudDialog?.Cancel();
 1123    }
 124}

Methods/Properties

.ctor()
Cancel()