< Summary - Syki

Information
Class: Syki.Front.Pages.Academic.AcademicTeachersPage
Assembly: Front
File(s): /home/runner/work/syki/syki/Front/Pages/Academic/AcademicTeachersPage.razor
Tag: 21_17346963026
Line coverage
0%
Covered lines: 0
Uncovered lines: 46
Coverable lines: 46
Total lines: 143
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%210%
OnInitializedAsync()100%210%
LoadData()100%210%
CrossLogin()100%210%
OpenDisciplinesDrawer()100%210%
OpenCampiDrawer()100%210%
get__quickFilter()100%210%
OpenDialog()0%620%
GetNotFoundMessage()0%620%

File(s)

/home/runner/work/syki/syki/Front/Pages/Academic/AcademicTeachersPage.razor

#LineLine coverage
 1@using Syki.Front.Features.Academic.CreateTeacher
 2@using Syki.Front.Features.Academic.AssignCampiToTeacher
 3@using Syki.Front.Features.Academic.AssignDisciplinesToTeacher
 4
 5@namespace Syki.Front.Pages.Academic
 6
 7@page "/academic/teachers"
 8@attribute [Authorize(Roles = "Academic")]
 9
 10<SykiPageTitle Title="Professores" />
 11
 12<MudContainer Class="my-4 px-4">
 13    <SykiPageHeader Icon="@Icons.Material.Filled.Person4" Title="Professores" ButtonText="Novo Professor" OnClick="@Open
 14    <SykiPageAlert Text="Um professor pode lecionar várias disciplinas ao longo de um período, inclusive em mais de um c
 15    <MudContainer Class="px-0 mb-4">
 16        <MudTable
 17            Hover
 18            Dense
 19            Class="pa-4"
 20            Items="@_teachers"
 21            Filter="@_quickFilter"
 22            Loading="@_loading"
 23            RowsPerPage="10"
 24        >
 25            <ToolBarContent>
 26                <SykiDataGridSearchTextField @bind-Value="@_searchString" Placeholder="Busque por qualquer atributo"/>
 27            </ToolBarContent>
 28            <HeaderContent>
 29                <MudTh>Nome</MudTh>
 30                <MudTh>Email</MudTh>
 31                <MudTh>Campi</MudTh>
 32                <MudTh>Disciplinas</MudTh>
 33                <MudTh></MudTh>
 34            </HeaderContent>
 35            <RowTemplate>
 036                <MudTd DataLabel="Nome">@context.Name</MudTd>
 037                <MudTd DataLabel="Email">@context.Email</MudTd>
 038                <MudTd DataLabel="Campi">@context.Campi.ToThousandSeparated()</MudTd>
 039                <MudTd DataLabel="Disciplinas">@context.Disciplines.ToThousandSeparated()</MudTd>
 40                <MudTd>
 41                    <MudTooltip Text="Campi" Arrow Placement="Placement.Top" ShowOnFocus="false">
 042                        <MudIconButton Size="@Size.Small" Icon="@Icons.Material.Filled.GroupWork" OnClick="@(() => OpenC
 43                    </MudTooltip>
 44                    <MudTooltip Text="Disciplinas" Arrow Placement="Placement.Top" ShowOnFocus="false">
 045                        <MudIconButton Size="@Size.Small" Icon="@Icons.Material.Filled.Apps" OnClick="@(() => OpenDiscip
 46                    </MudTooltip>
 47                    <AuthorizeView Policy="@FrontPolicy.CrossLogin" Context="authContext">
 48                        <MudTooltip Text="Cross Login" Arrow Placement="Placement.Top" ShowOnFocus="false">
 049                            <MudIconButton Size="@Size.Small" Icon="@Icons.Material.Filled.Login" OnClick="@(() => Cross
 50                        </MudTooltip>
 51                    </AuthorizeView>
 52                </MudTd>
 53            </RowTemplate>
 54            <LoadingContent>
 055                @if (_breakpoint == Breakpoint.Xs)
 56                {
 57                    <MudProgressLinear Color="Color.Info" Indeterminate />
 58                }
 59            </LoadingContent>
 60            <NoRecordsContent>
 061                @(GetNotFoundMessage())
 62            </NoRecordsContent>
 63            <PagerContent>
 64                <SykiTablePager />
 65            </PagerContent>
 66        </MudTable>
 67    </MudContainer>
 68</MudContainer>
 69
 070<AssignCampiToTeacherDrawer @ref="@_campiDrawer" AfterSubmit="@LoadData" />
 071<AssignDisciplinesToTeacherDrawer @ref="@_disciplinesDrawer" AfterSubmit="@LoadData" />
 072
 073@inject NavigationManager Nav
 074@inject IDialogService DialogService
 075@inject CrossLoginClient CrossLoginClient
 076@inject GetTeachersClient GetTeachersClient
 77@inject IBrowserViewportService BrowserViewportService
 78
 79@code
 80{
 81    private bool _loading;
 82    private string _searchString;
 083    private List<TeacherOut> _teachers = [];
 84
 85    private Breakpoint _breakpoint;
 86    private AssignCampiToTeacherDrawer _campiDrawer = default!;
 87    private AssignDisciplinesToTeacherDrawer _disciplinesDrawer = default!;
 88
 89    protected override async Task OnInitializedAsync()
 90    {
 091        _breakpoint = await BrowserViewportService.GetCurrentBreakpointAsync();
 092        await LoadData();
 093    }
 94
 95    private async Task LoadData()
 96    {
 097        _loading = true;
 098        _teachers = await GetTeachersClient.Get();
 099        _loading = false;
 0100    }
 101
 102    private async Task CrossLogin(TeacherOut teacher)
 103    {
 0104        _loading = true;
 0105        await CrossLoginClient.Login(teacher.Id);
 0106        Nav.NavigateTo("/", forceLoad: true);
 0107        _loading = false;
 0108    }
 109
 110    private async Task OpenDisciplinesDrawer(TeacherOut teacher)
 111    {
 0112        await _disciplinesDrawer.Open(teacher.Id);
 0113    }
 114
 115    private async Task OpenCampiDrawer(TeacherOut teacher)
 116    {
 0117        await _campiDrawer.Open(teacher.Id);
 0118    }
 119
 0120    private Func<TeacherOut, bool> _quickFilter => x => _searchString.IsIn(x.Name, x.Email);
 121
 122    private async Task OpenDialog()
 123    {
 0124        var breakpoint = await BrowserViewportService.GetCurrentBreakpointAsync();
 0125        var options = new DialogOptions {
 0126            MaxWidth = MaxWidth.Small,
 0127            FullWidth = true,
 0128            FullScreen = breakpoint == Breakpoint.Xs,
 0129        };
 0130        var dialog = await DialogService.ShowAsync<CreateTeacherDialog>("", options);
 131
 0132        var result = await dialog.Result;
 133
 0134        if (result!.Canceled) return;
 135
 0136        await OnInitializedAsync();
 0137    }
 138
 139    private string GetNotFoundMessage()
 140    {
 0141        return (_searchString.IsEmpty()) ? "Não existem professores cadastrados ainda." : "Nenhum professor encontrado."
 142    }
 143}