< Summary

Information
Class: AspNetCoreGeneratedDocument.Areas_Admin_Views_Shared__AdminSidebar
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Admin/Views/Shared/_AdminSidebar.cshtml
Line coverage
0%
Covered lines: 0
Uncovered lines: 28
Coverable lines: 28
Total lines: 77
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 44
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ExecuteAsync()0%1806420%
<ExecuteAsync()0%620%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Admin/Views/Shared/_AdminSidebar.cshtml

#LineLine coverage
 1@using System.Security.Claims
 2@using System.Text.Json
 3@using OzonOrdersWeb.WebServices.Sidebar
 4@using Services.CacheServices.Cache.UserCacheService
 5@inject IUserCacheService UserCache
 6@inject IUserSidebarSettingsService SidebarSettings
 7@*
 8    Боковое меню /Admin: то же меню на AG Grid, что в Studio2 (_SidebarStructuredNav + sidebar-navigation.js),
 9    со своим деревом SidebarNavigationCatalog.Admin и настройками под префиксом «admin.».
 10*@
 11@{
 012    var currentUser = await UserCache.GetCachedUserAsync(User);
 013    var displayName = currentUser?.GoogleDisplayName ?? currentUser?.UserName ?? User.Identity?.Name ?? "User";
 014    var avatarUrl = currentUser?.GoogleAvatarUrl;
 015    var safeName = displayName.Trim();
 016    var userInitials = safeName.Length >= 2 ? safeName[..2].ToUpperInvariant() : safeName.ToUpperInvariant();
 17
 018    var sidebarUserId = User.FindFirstValue(ClaimTypes.NameIdentifier);
 019    var sidebarSettings = string.IsNullOrEmpty(sidebarUserId)
 020        ? new Dictionary<string, string>()
 021        : await SidebarSettings.GetAllAsync(sidebarUserId, Context.RequestAborted);
 022    var prefix = SidebarNavigationCatalog.AdminKeyPrefix;
 023    var sidebarPinned = false;
 024    if (sidebarSettings.TryGetValue(prefix + "prefs", out var prefsJson))
 25    {
 26        try
 27        {
 028            using var prefs = JsonDocument.Parse(prefsJson);
 029            sidebarPinned = prefs.RootElement.TryGetProperty("pinned", out var pinnedEl) && pinnedEl.ValueKind == JsonVa
 030        }
 031        catch (JsonException) { /* битые настройки — как будто их нет */ }
 32    }
 033    var sidebarNav = new SidebarNavViewModel
 034    {
 035        Tree = SidebarNavigationCatalog.Admin,
 036        Settings = sidebarSettings,
 037        SaveUrl = Url.Action("SaveSetting", "SidebarSettings", new { area = "" }) ?? "/Sidebar/SaveSetting",
 038        Pinned = sidebarPinned,
 039        KeyPrefix = prefix
 040    };
 41}
 42
 043<aside class="app-sidebar app-sidebar--quartz @(sidebarPinned ? "is-pinned" : "")" id="appSidebar" data-sidebar-pinned="
 44    <div class="sidebar-header">
 45        <a class="sidebar-logo" asp-area="Admin" asp-controller="Home" asp-action="Index" title="Обзор администрирования
 46            <div class="sidebar-logo-icon"><i class="fas fa-user-shield" aria-hidden="true"></i></div>
 47            <div class="sidebar-logo-meta">
 48                <span class="sidebar-logo-text">Studio2 Admin</span>
 49                <span class="sidebar-build-info">Права доступа</span>
 50            </div>
 51        </a>
 52        <button class="sidebar-pin-toggle @(sidebarPinned ? "is-active" : "")" id="sidebarPinToggle" type="button"
 53                aria-pressed="@(sidebarPinned ? "true" : "false")" title="@(sidebarPinned ? "Открепить меню" : "Закрепит
 54            <span class="ag-icon @(sidebarPinned ? "ag-icon-un-pin" : "ag-icon-pin")" role="presentation"></span>
 55            <span class="visually-hidden">Закрепить раскрытое меню</span>
 56        </button>
 57    </div>
 58
 59    <partial name="~/Views/Shared/_SidebarStructuredNav.cshtml" model="sidebarNav" />
 60
 61    <div class="sidebar-footer">
 62        <a class="sidebar-user" asp-area="Studio2" asp-controller="Profile" asp-action="Index" title="Открыть профиль">
 063            @if (!string.IsNullOrWhiteSpace(avatarUrl))
 64            {
 65                <img class="sidebar-user-avatar" src="@avatarUrl" alt="@displayName" referrerpolicy="no-referrer" />
 66            }
 67            else
 68            {
 069                <div class="sidebar-user-avatar">@userInitials</div>
 70            }
 71            <div class="sidebar-user-info">
 072                <div class="sidebar-user-name">@displayName</div>
 73                <div class="sidebar-user-role">Администратор</div>
 74            </div>
 75        </a>
 76    </div>
 77</aside>

Methods/Properties

ExecuteAsync()
<ExecuteAsync()