@inject IJSRuntime JSRuntime @inject HttpClient Http @code { [PersistentState(AllowUpdates = true)] public string? PersistentCompanyName { get; set; } [Parameter] public EventCallback OnToggleDrawer { get; set; } private bool _showVersionBadge; private string _companyName = "Hauptdomain"; protected override async Task OnInitializedAsync() { if (PersistentCompanyName != null) { _companyName = PersistentCompanyName; } else { try { var tenantInfo = await Http.GetFromJsonAsync("api/tenant/current"); if (tenantInfo?.IsTenant == true && !string.IsNullOrEmpty(tenantInfo.Name)) { _companyName = tenantInfo.Name; PersistentCompanyName = _companyName; } } catch { // Ignore background error } } } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { try { var lastSeen = await JSRuntime.InvokeAsync("localStorage.getItem", "lastSeenVersion"); var latest = timetracker.Client.Components.Pages.Changelog.LatestVersion; var isHighlighted = timetracker.Client.Components.Pages.Changelog.IsLatestHighlighted; _showVersionBadge = isHighlighted && lastSeen != latest; StateHasChanged(); } catch { // Ignored in SSR } } } private async Task ClearBadge() { _showVersionBadge = false; try { await JSRuntime.InvokeVoidAsync("localStorage.setItem", "lastSeenVersion", timetracker.Client.Components.Pages.Changelog.LatestVersion); } catch { // Ignored } } private string GetInitials(string? name) { if (string.IsNullOrWhiteSpace(name)) return "U"; var parts = name.Split(' ', StringSplitOptions.RemoveEmptyEntries); if (parts.Length == 1) return parts[0][..Math.Min(2, parts[0].Length)].ToUpper(); return $"{parts[0][0]}{parts[1][0]}".ToUpper(); } private string GetUserStatus(string? username) { if (string.IsNullOrWhiteSpace(username)) return ""; if (username.Equals("marc", StringComparison.OrdinalIgnoreCase)) return "SuperAdmin"; if (_companyName == "Hauptdomain") return "Einzelnutzer"; return _companyName; } }