< Summary - Syki

Information
Class: Syki.Front.Features.Academic.CreateDiscipline.CreateDisciplineDialog
Assembly: Front
File(s): /home/runner/work/syki/syki/Front/Features/Academic/CreateDiscipline/CreateDisciplineDialog.razor
Tag: 4_16869239191
Line coverage
0%
Covered lines: 0
Uncovered lines: 31
Coverable lines: 31
Total lines: 94
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 12
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%
.ctor()100%210%
get_SelectedCourses()100%210%
OnInitializedAsync()100%210%
GetMultiSelectionText(...)0%2040%
Submit()0%4260%
Cancel()100%210%

File(s)

/home/runner/work/syki/syki/Front/Features/Academic/CreateDiscipline/CreateDisciplineDialog.razor

#LineLine coverage
 1@using Syki.Front.Features.Academic.GetCourses
 2
 3@namespace Syki.Front.Features.Academic.CreateDiscipline
 4
 5<MudDialog Class="pb-2" DefaultFocus="DefaultFocus.None">
 6    <TitleContent>
 7        <SykiDialogTitle Text="Nova Disciplina" />
 8    </TitleContent>
 9    <DialogContent>
 010        <MudForm @ref="@_form" Class="pt-1">
 011            <SykiTextField Label="Nome" AutoFocus @bind-Value="@_name" />
 012            <MudSelect
 013                Dense
 014                Margin="Margin.Dense"
 015                Variant="Variant.Outlined"
 16                Class="mb-2"
 17                T="CourseOut"
 18                Label="Cursos"
 19                MultiSelection
 20                Required
 21                RequiredError="Informe!"
 22                @bind-SelectedValues="@SelectedCourses"
 23                MultiSelectionTextFunc="@(new Func<List<string>, string>(GetMultiSelectionText))"
 24            >
 025                @foreach (var course in _courses)
 26                {
 027                    <MudSelectItem Class="d-flex align-start gap-0" T="CourseOut" Value="@course">@course.Name</MudSelec
 28                }
 29            </MudSelect>
 30        </MudForm>
 31    </DialogContent>
 32    <DialogActions>
 33        <DialogCancelButton OnClick="@Cancel" />
 34        <SykiProgressCircular Loading="@_loading" />
 35        <DialogSaveButton OnClick="@Submit" />
 36    </DialogActions>
 37</MudDialog>
 38
 39@inject ISnackbar Snackbar
 40@inject GetCoursesClient GetCoursesClient
 41@inject CreateDisciplineClient CreateDisciplineClient
 42
 43@code
 44{
 45    [CascadingParameter]
 046    IMudDialogInstance MudDialog { get; set; }
 47
 48    MudForm _form;
 49    private bool _loading;
 50    private string _name;
 51
 052    private List<CourseOut> _courses = [];
 053    IEnumerable<CourseOut> SelectedCourses { get; set; } = new HashSet<CourseOut>();
 54
 55    protected override async Task OnInitializedAsync()
 56    {
 057        _courses = await GetCoursesClient.Get();
 058    }
 59
 60    private string GetMultiSelectionText(List<string> selected)
 61    {
 062        if (selected.Count == 1)
 063            return selected.First();
 64
 065        if (selected.Count > 1)
 066            return $"{selected.Count} cursos selecionados";
 67
 068        return "";
 69    }
 70
 71    private async Task Submit()
 72    {
 073        if (_loading) return;
 74
 075        await _form.Validate();
 076        if (!_form.IsValid) return;
 77
 078        _loading = true;
 079        var response = await CreateDisciplineClient.Create(_name, SelectedCourses.ToList().ConvertAll(c => c.Id));
 080        if (response.IsSuccessStatusCode)
 81        {
 082            MudDialog.Close(DialogResult.Ok(true));
 083            Snackbar.Add("Disciplina cadastrada com sucesso!", Severity.Success);
 84        }
 85        else
 86        {
 087            var error = await response.ToError();
 088            Snackbar.Add(error.Message, Severity.Error);
 89        }
 090        _loading = false;
 091    }
 92
 093    void Cancel() => MudDialog.Cancel();
 94}