< Summary - Syki

Information
Class: Syki.Front.Shared.MainLayout
Assembly: Front
File(s): /home/runner/work/syki/syki/Front/Shared/MainLayout.razor
Tag: 4_16869239191
Line coverage
0%
Covered lines: 0
Uncovered lines: 53
Coverable lines: 53
Total lines: 177
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 18
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_AuthState()100%210%
.ctor()100%210%
IsAnonymous()0%4260%
ToggleLeftOpen()100%210%
ToggleRightOpen()100%210%
OnInitializedAsync()0%620%
OnParametersSetAsync()0%620%
OnAfterRenderAsync()100%210%
ToggleTheme()100%210%
UpdateChartsTheme()0%620%
Logout()100%210%

File(s)

/home/runner/work/syki/syki/Front/Shared/MainLayout.razor

#LineLine coverage
 1@using Syki.Front.Features.Cross.GetUserNotifications
 2
 3@namespace Syki.Front.Shared
 4
 5@inherits LayoutComponentBase
 6
 7<MudPopoverProvider />
 8<MudSnackbarProvider />
 9<MudThemeProvider IsDarkMode="@_isDark" Theme="@SykiTheme" />
 10<MudDialogProvider CloseOnEscapeKey="true" CloseButton="true" />
 11
 12<AuthorizeView>
 13    <Authorized>
 14        <MudLayout>
 15            <MudAppBar Elevation="0" Dense="true" ToolBarClass="pl-1 pr-1">
 016                @if (_breakpoint != Breakpoint.Xs)
 17                {
 18                    <MudIconButton OnClick="@ToggleLeftOpen" Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" />
 19                }
 20                <HomeButton />
 21                <MudSpacer />
 22                <AuthorizeView Roles="Teacher, Student" Context="authContext">
 23                    <NotificationsIconButton />
 24                </AuthorizeView>
 25                <ThemeIconButton @bind-IsDark="@_isDark" OnClick="@ToggleTheme" />
 26                <MudIconButton OnClick="@ToggleRightOpen" Icon="@Icons.Material.Filled.Settings" Color="Color.Inherit" /
 27            </MudAppBar>
 28            <MudDrawer @bind-Open="@_leftOpen" ClipMode="DrawerClipMode.Always" Elevation="2">
 29                <NavMenu />
 30            </MudDrawer>
 31            <MudDrawer Anchor="Anchor.Right" @bind-Open="@_rightOpen" ClipMode="DrawerClipMode.Always" Variant="DrawerVa
 32                <SettingsMenu OnLogoutClick="@Logout" />
 33            </MudDrawer>
 34            <MudMainContent Class="pb-12">
 035                @Body
 036                @if (_breakpoint == Breakpoint.Xs)
 37                {
 38                    <MudFab OnClick="@ToggleLeftOpen" Size="@Size.Large" Style="position:fixed; bottom:15px; right:25px;
 39                }
 40            </MudMainContent>
 41        </MudLayout>
 42    </Authorized>
 43    <NotAuthorized>
 044        @if (IsAnonymous())
 45        {
 46            <MudAppBar Elevation="1" Dense="true">
 47                <MudStack Row="true" Class="d-flex justify-space-around flex-grow-1">
 48                    <HomeButton />
 49                    <MudSpacer />
 50                    <ThemeIconButton @bind-IsDark="@_isDark" OnClick="@ToggleTheme" />
 51                    <LoginButton />
 52                    <MudButton
 53                        Href="/register"
 54                        Target="_self"
 55                        IconSize="Size.Large"
 56                        Variant="Variant.Text"
 57                        Style="color: white; margin-left: -11px;"
 58                    >
 59                        Cadastro
 60                    </MudButton>
 61                </MudStack>
 62            </MudAppBar>
 63            <CascadingValue Name="IsDarkTheme" Value="@_isDark">
 64                <MudMainContent>
 065                    @Body
 66                </MudMainContent>
 67            </CascadingValue>
 68        }
 69        else
 70        {
 71            <SykiRedirect />
 72        }
 73    </NotAuthorized>
 74</AuthorizeView>
 75
 76@inject NavigationManager Nav
 77@inject AuthManager AuthManager
 78@inject LogoutClient LogoutClient
 79@inject SignalRConnectionManager SignalR
 80@inject ILocalStorageService LocalStorage
 81@inject SykiAuthStateProvider AuthStateProvider
 82@inject ApexCharts.IApexChartService ApexChartService
 83@inject IBrowserViewportService BrowserViewportService
 84
 85@code
 86{
 87    [CascadingParameter]
 088    public Task<AuthenticationState> AuthState { get; set; }
 89
 090    private MudTheme SykiTheme = new MudTheme()
 091    {
 092        LayoutProperties = new LayoutProperties()
 093        {
 094            DrawerWidthLeft = "180px"
 095        }
 096    };
 97
 098    private bool _isDark = true;
 099    private bool _leftOpen = true;
 100    private bool _rightOpen = false;
 101    private Breakpoint _breakpoint;
 102
 103    private bool IsAnonymous()
 104    {
 0105        var uri = Nav.Uri.ToLower();
 0106        return uri.EndsWith("/") || uri.Contains("register") || uri.Contains("login") || uri.Contains("reset-password");
 107    }
 108
 109    private void ToggleLeftOpen()
 110    {
 0111        _leftOpen = !_leftOpen;
 0112    }
 113
 114    private void ToggleRightOpen()
 115    {
 0116        _rightOpen = !_rightOpen;
 0117    }
 118
 119    protected override async Task OnInitializedAsync()
 120    {
 0121        _breakpoint = await BrowserViewportService.GetCurrentBreakpointAsync();
 0122        var isDark = await LocalStorage.GetItemAsync<string>("IsDark");
 0123        _isDark = isDark == null || bool.Parse(isDark);
 0124    }
 125
 126    protected override async Task OnParametersSetAsync()
 127    {
 0128        var user = await AuthManager.GetUser();
 0129        if (user.Role.IsIn(UserRole.Teacher, UserRole.Student))
 130        {
 0131            SykiTheme.LayoutProperties.DrawerWidthLeft = "260px";
 132        }
 133        else
 134        {
 0135            SykiTheme.LayoutProperties.DrawerWidthLeft = "180px";
 136        }
 0137    }
 138
 139    protected override async Task OnAfterRenderAsync(bool firstRender)
 140    {
 0141        await base.OnAfterRenderAsync(firstRender);
 142
 0143        await UpdateChartsTheme();
 0144    }
 145
 146    private async Task ToggleTheme()
 147    {
 0148        _isDark = !_isDark;
 149
 0150        await UpdateChartsTheme();
 151
 0152        await LocalStorage.SetItemAsync("IsDark", _isDark.ToString());
 0153    }
 154
 155    private async Task UpdateChartsTheme()
 156    {
 0157        var options = new ApexCharts.ApexChartBaseOptions
 0158        {
 0159            Theme = new ApexCharts.Theme
 0160            {
 0161                Mode = _isDark ? ApexCharts.Mode.Dark : ApexCharts.Mode.Light
 0162            }
 0163        };
 164
 0165        await ApexChartService.SetGlobalOptionsAsync(options, true);
 0166    }
 167
 168    private async Task Logout()
 169    {
 0170        _rightOpen = false;
 0171        await LogoutClient.Logout();
 0172        await LocalStorage.RemoveItemAsync("User");
 0173        await SignalR.StopAsync();
 0174        AuthStateProvider.MarkUserAsLoggedOut();
 0175        Nav.NavigateTo("/");
 0176    }
 177}