< Summary - Syki

Information
Class: Syki.Front.Features.Teacher.CreateClassActivity.CreateClassActivityDialog
Assembly: Front
File(s): /home/runner/work/syki/syki/Front/Features/Teacher/CreateClassActivity/CreateClassActivityDialog.razor
Tag: 4_16869239191
Line coverage
0%
Covered lines: 0
Uncovered lines: 68
Coverable lines: 68
Total lines: 218
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_ClassId()100%210%
get_AfterSubmit()100%210%
.ctor()100%210%
OnInitializedAsync()100%210%
Setup()0%620%
Reset()100%210%
Close()100%210%
Submit()0%4260%
HandleNoteChanged(...)100%210%
GetWeightMaxWidth()0%7280%

File(s)

/home/runner/work/syki/syki/Front/Features/Teacher/CreateClassActivity/CreateClassActivityDialog.razor

#LineLine coverage
 1@namespace Syki.Front.Features.Teacher.CreateClassActivity
 2
 3<MudDialog Class="pb-2" DefaultFocus="DefaultFocus.None">
 4    <TitleContent>
 5        <SykiDialogTitle Text="Nova Atividade" />
 6    </TitleContent>
 7    <DialogContent>
 08        <MudForm @ref="@_form" Class="pt-1" Spacing="0">
 09            <MudGrid Spacing="2">
 010                <MudItem xs="12" sm="12" md="12" lg="12">
 011                    <SykiTextField Label="Título" AutoFocus="true" @bind-Value="@_title" MaxLength="50" />
 012                </MudItem>
 013                <MudItem xs="12" sm="12" md="12" lg="12">
 14                    <SykiTextField Label="Descrição" @bind-Value="@_description" AutoGrow="true" Lines="8" MaxLines="20"
 15                </MudItem>
 16
 17                <MudItem xs="12" sm="4" md="4" lg="4">
 18                    <MudSelect
 19                        Dense="true"
 20                        Margin="Margin.Dense"
 21                        Variant="Variant.Outlined"
 22                        T="ClassActivityType"
 23                        @bind-Value="@_type"
 24                        Label="Tipo"
 25                        Required="true"
 26                        RequiredError="Informe!"
 27                        AdornmentColor="Color.Primary"
 28                    >
 029                        @foreach (ClassActivityType type in Enum.GetValues<ClassActivityType>())
 30                        {
 031                            <MudSelectItem Value="@type">@type.GetDescription()</MudSelectItem>
 32                        }
 33                    </MudSelect>
 34                </MudItem>
 35
 36                <MudItem xs="12" sm="4" md="4" lg="4">
 37                    <MudSelect
 38                        Dense="true"
 39                        Margin="Margin.Dense"
 40                        Variant="Variant.Outlined"
 41                        T="ClassNoteType"
 42                        Value="@_note"
 043                        ValueChanged="x => HandleNoteChanged(x)"
 44                        Label="Nota"
 45                        Required="true"
 46                        RequiredError="Informe!"
 47                        AdornmentColor="Color.Primary"
 48                    >
 049                        @foreach (ClassNoteType type in Enum.GetValues<ClassNoteType>())
 50                        {
 051                            <MudSelectItem Value="@type">@type.GetDescription()</MudSelectItem>
 52                        }
 53                    </MudSelect>
 54                </MudItem>
 55
 56                <MudItem xs="12" sm="4" md="4" lg="4">
 57                    <MudNumericField
 58                        T="int"
 59                        @bind-Value="@_weight"
 60                        Max="@_maxWeight"
 61                        MaxLength="@(GetWeightMaxWidth())"
 62                        Min="0"
 63                        HideSpinButtons="true"
 64                        Variant="Variant.Outlined"
 65                        Margin="Margin.Dense"
 66                        HelperText="@($"Máx: {_maxWeight}")"
 67                        Required="true"
 68                        Label="Peso (%)"
 69                        RequiredError="Informe!"
 70                    />
 71                </MudItem>
 72
 73                <MudItem xs="12" sm="6" md="6" lg="6">
 74                    <SykiDatePicker Label="Data de entrega" @bind-Date="@_dueDate" Editable="false" />
 75                </MudItem>
 76                <MudItem xs="12" sm="6" md="6" lg="6">
 77                    <MudSelect
 78                        Dense="true"
 79                        Margin="Margin.Dense"
 80                        Variant="Variant.Outlined"
 81                        T="Hour"
 82                        @bind-Value="@_dueHour"
 83                        Label="Hora de entrega"
 84                        Required="true"
 85                        RequiredError="Informe!"
 86                        AdornmentColor="Color.Primary"
 87                    >
 088                        @foreach (Hour hour in Enum.GetValues<Hour>().Where(x => (int)x % 100 == 0))
 89                        {
 090                            <MudSelectItem Value="@hour">@hour.GetDescription()</MudSelectItem>
 91                        }
 92                    </MudSelect>
 93                </MudItem>
 94            </MudGrid>
 95        </MudForm>
 96    </DialogContent>
 97    <DialogActions>
 98        <DialogCancelButton OnClick="@Close" />
 99        <SykiProgressCircular Loading="@_loading" />
 100        <DialogSaveButton OnClick="@Submit" />
 101    </DialogActions>
 102</MudDialog>
 103
 104@inject ISnackbar Snackbar
 105@inject CreateClassActivityClient Client
 106@inject IBrowserViewportService BrowserViewportService
 107@inject GetClassNotesRemainingWeightsClient GetClassNotesRemainingWeightsClient
 108
 109@code
 110{
 111    [CascadingParameter]
 0112    IMudDialogInstance MudDialog { get; set; }
 113
 114    [Parameter]
 0115    public Guid ClassId { get; set; }
 116
 117    [Parameter]
 0118    public EventCallback AfterSubmit { get; set; }
 119
 120    private MudForm _form;
 121    private bool _loading;
 122
 0123    private List<ClassNoteRemainingWeightsOut> _remainingWeights = [];
 124
 125    private ClassNoteType _note = ClassNoteType.N1;
 126    private string _title;
 127    private string _description;
 128    private ClassActivityType _type = ClassActivityType.Exam;
 129    private int _weight;
 130    private int _maxWeight;
 0131    private DateTime? _dueDate = DateTime.UtcNow.AddDays(7);
 0132    private Hour _dueHour = Hour.H12_00;
 133
 134    protected override async Task OnInitializedAsync()
 135    {
 0136        await base.OnInitializedAsync();
 137
 0138        var breakpoint = await BrowserViewportService.GetCurrentBreakpointAsync();
 0139        var options = MudDialog.Options with
 0140        {
 0141            FullWidth = true,
 0142            CloseButton = true,
 0143            BackdropClick = false,
 0144            MaxWidth = MaxWidth.Medium,
 0145            FullScreen = breakpoint == Breakpoint.Xs
 0146        };
 0147        await MudDialog.SetOptionsAsync(options);
 148
 0149        await Setup();
 0150    }
 151
 152    private async Task Setup()
 153    {
 0154        Reset();
 0155        var response = await GetClassNotesRemainingWeightsClient.Get(ClassId);
 0156        if (response.IsSuccess)
 157        {
 0158            _remainingWeights = response.Success;
 159        }
 0160        _maxWeight = _remainingWeights.Where(x => x.Note == _note).Select(x => x.Weight).First();
 0161    }
 162
 163    private void Reset()
 164    {
 0165        _note = ClassNoteType.N1;
 0166        _title = string.Empty;
 0167        _description = string.Empty;
 0168        _type = ClassActivityType.Work;
 0169        _weight = 0;
 0170        _dueDate = DateTime.UtcNow.AddDays(7);
 0171        _dueHour = Hour.H12_00;
 0172    }
 173
 174    private void Close()
 175    {
 0176        Reset();
 0177        MudDialog.Cancel();
 0178    }
 179
 180    private async Task Submit()
 181    {
 0182        if (_loading) return;
 183
 0184        await _form.Validate();
 0185        if (!_form.IsValid) return;
 186
 0187        _loading = true;
 188
 0189        var response = await Client.Create(ClassId, _note, _title, _description, _type, _weight, _dueDate!.Value.ToDateO
 0190        if (response.IsSuccess)
 191        {
 0192            await AfterSubmit.InvokeAsync();
 0193            Close();
 0194            Snackbar.Add("Atividade criada com sucesso!", Severity.Success);
 195        }
 196        else
 197        {
 0198            Snackbar.Add(response.Error.Message, Severity.Error);
 199        }
 200
 0201        _loading = false;
 0202    }
 203
 204    private void HandleNoteChanged(ClassNoteType newValue)
 205    {
 0206        _note = newValue;
 0207        _maxWeight = _remainingWeights.Where(x => x.Note == _note).Select(x => x.Weight).First();
 0208    }
 209
 210    private int GetWeightMaxWidth()
 211    {
 0212        if (_maxWeight == 100) return 3;
 0213        if (_maxWeight > 9) return 2;
 0214        if (_maxWeight > 0 && _maxWeight <= 9) return 1;
 215
 0216        return 0;
 217    }
 218}