@inject ISessionCredentialStore CredStore @inject IUserSessionService Session @inject ISessionManager SessionManager @inject NavigationManager Nav @using SharepointToolbox.Web.Core.Models @using SharepointToolbox.Web.Services.Session @if (_visible) { } @code { [Parameter] public EventCallback OnConnected { get; set; } private bool _visible; private bool _connecting; private string _error = string.Empty; public async Task ShowAsync() { _error = string.Empty; _connecting = false; _visible = true; await InvokeAsync(StateHasChanged); } private async Task ConnectAsync() { var profile = Session.CurrentProfile; if (profile is null) { _error = "No client profile selected."; return; } _connecting = true; _error = string.Empty; // Clear any stale CSOM contexts await SessionManager.ClearAllAsync(); var currentUrl = Nav.Uri; var connectUrl = $"/connect/initiate?profileId={Uri.EscapeDataString(profile.Id)}" + $"&returnUrl={Uri.EscapeDataString(currentUrl)}"; // Force full HTTP navigation to break out of the Blazor SignalR circuit Nav.NavigateTo(connectUrl, forceLoad: true); } private void Cancel() { _visible = false; _connecting = false; } }