< 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
0%
Covered lines: 0
Uncovered lines: 34
Coverable lines: 34
Total lines: 124
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 22
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_MudDialog()100%210%
get_ArcId()100%210%
.ctor()100%210%
OnAfterRenderAsync()0%2040%
OnTitleKeyDown()0%2040%
Submit()0%110100%
Cancel()0%620%

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"
 021                      @ref="_titleField"
 022                      Immediate="true"
 023                      OnKeyDown="@OnTitleKeyDown" />
 024
 025        <MudTextField @bind-Value="_description"
 026                      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)">
 054            @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]
 065    private MudDialogInstance? MudDialog { get; set; }
 66
 67    [Parameter]
 068    public Guid ArcId { get; set; }
 69
 070    private string _title = string.Empty;
 071    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    {
 079        if (firstRender && _titleField != null)
 80        {
 081            await _titleField.FocusAsync();
 82        }
 083    }
 84
 85    private async Task OnTitleKeyDown(KeyboardEventArgs e)
 86    {
 087        if (e.Key == "Enter" && !string.IsNullOrWhiteSpace(_title))
 88        {
 089            await Submit();
 90        }
 091    }
 92
 93    private async Task Submit()
 94    {
 095        if (string.IsNullOrWhiteSpace(_title) || _isSubmitting)
 96        {
 097            return;
 98        }
 99
 0100        _isSubmitting = true;
 101
 0102        var createDto = new QuestCreateDto
 0103        {
 0104            Title = _title.Trim(),
 0105            Description = string.IsNullOrWhiteSpace(_description) ? null : _description.Trim(),
 0106            Status = _status,
 0107            IsGmOnly = _isGmOnly
 0108        };
 109
 0110        var result = await QuestApi.CreateQuestAsync(ArcId, createDto);
 111
 0112        _isSubmitting = false;
 113
 0114        if (result != null)
 115        {
 0116            MudDialog?.Close(DialogResult.Ok(result));
 117        }
 0118    }
 119
 120    private void Cancel()
 121    {
 0122        MudDialog?.Cancel();
 0123    }
 124}