< Summary

Information
Class: Chronicis.Client.Components.Dialogs.CreateArticleDialog
Assembly: Chronicis.Client
File(s): /home/runner/work/chronicis/chronicis/src/Chronicis.Client/Components/Dialogs/CreateArticleDialog.razor
Line coverage
0%
Covered lines: 0
Uncovered lines: 53
Coverable lines: 53
Total lines: 112
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 32
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_WorldId()100%210%
get_ArticleType()100%210%
.ctor()100%210%
OnAfterRenderAsync()0%2040%
GetIcon()0%4260%
GetTitle()0%4260%
GetTitleLabel()0%620%
Cancel()0%620%
Submit()0%110100%

File(s)

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

#LineLine coverage
 1@using Chronicis.Shared.DTOs
 2@using Chronicis.Shared.Enums
 3@inject IArticleApiService ArticleApi
 4
 5<MudDialog>
 6    <TitleContent>
 7        <MudText Typo="Typo.h6">
 8            <MudIcon Icon="@GetIcon()" Class="mr-2" />
 09            @GetTitle()
 10        </MudText>
 11    </TitleContent>
 12    <DialogContent>
 13        <MudTextField @bind-Value="_title"
 14                      Label="@GetTitleLabel()"
 15                      Variant="Variant.Outlined"
 16                      Required="true"
 17                      RequiredError="Title is required"
 18                      Class="mb-3"
 019                      @ref="_titleField"
 020                      Immediate="true" />
 021    </DialogContent>
 022    <DialogActions>
 023        <MudButton OnClick="Cancel">Cancel</MudButton>
 024        <MudButton Color="Color.Primary"
 25                   Variant="Variant.Filled"
 26                   OnClick="Submit"
 27                   Disabled="@(string.IsNullOrWhiteSpace(_title) || _isSubmitting)">
 028            @if (_isSubmitting)
 29            {
 30                <MudProgressCircular Size="Size.Small" Indeterminate="true" Class="mr-2" />
 31            }
 32            Create
 33        </MudButton>
 34    </DialogActions>
 35</MudDialog>
 36
 37@code {
 38    [CascadingParameter]
 039    private MudDialogInstance? MudDialog { get; set; }
 40
 41    [Parameter]
 042    public Guid WorldId { get; set; }
 43
 44    [Parameter]
 045    public ArticleType ArticleType { get; set; } = ArticleType.WikiArticle;
 46
 047    private string _title = string.Empty;
 48    private bool _isSubmitting = false;
 49    private MudTextField<string>? _titleField;
 50
 51    protected override async Task OnAfterRenderAsync(bool firstRender)
 52    {
 053        if (firstRender && _titleField != null)
 54        {
 055            await Task.Delay(100);
 056            await _titleField.FocusAsync();
 57        }
 058    }
 59
 060    private string GetIcon() => ArticleType switch
 061    {
 062        ArticleType.Character => Icons.Material.Filled.Person,
 063        ArticleType.WikiArticle => Icons.Material.Filled.MenuBook,
 064        ArticleType.Session => Icons.Material.Filled.EventNote,
 065        _ => Icons.Material.Filled.Article
 066    };
 67
 068    private string GetTitle() => ArticleType switch
 069    {
 070        ArticleType.Character => "New Player Character",
 071        ArticleType.WikiArticle => "New Wiki Article",
 072        ArticleType.Session => "New Session",
 073        _ => "New Article"
 074    };
 75
 076    private string GetTitleLabel() => ArticleType switch
 077    {
 078        ArticleType.Character => "Character Name",
 079        _ => "Title"
 080    };
 81
 082    private void Cancel() => MudDialog?.Cancel();
 83
 84    private async Task Submit()
 85    {
 086        if (string.IsNullOrWhiteSpace(_title) || _isSubmitting) return;
 87
 088        _isSubmitting = true;
 089        StateHasChanged();
 90
 091        var createDto = new ArticleCreateDto
 092        {
 093            Title = _title.Trim(),
 094            Body = string.Empty,
 095            WorldId = WorldId,
 096            Type = ArticleType,
 097            EffectiveDate = DateTime.Now
 098        };
 99
 0100        var article = await ArticleApi.CreateArticleAsync(createDto);
 0101        if (article != null)
 102        {
 0103            MudDialog?.Close(DialogResult.Ok(article));
 104        }
 105        else
 106        {
 0107            MudDialog?.Close(DialogResult.Cancel());
 108        }
 109
 0110        _isSubmitting = false;
 0111    }
 112}