fix: scope startup by route
This commit is contained in:
@@ -14,19 +14,31 @@
|
||||
}
|
||||
|
||||
<div class="workspace-shell">
|
||||
<AppHeader
|
||||
User="State.User"
|
||||
ShowCampaign="true"
|
||||
CampaignName="@State.SelectedCampaignName"
|
||||
ShowConnectionState="true"
|
||||
ConnectionStateLabel="@State.ConnectionStateLabel"
|
||||
ConnectionStateCssClass="@State.ConnectionStateCssClass"
|
||||
IsMenuOpen="State.IsScreenMenuOpen"
|
||||
MenuButtonId="workspace-screen-menu-button"
|
||||
MenuId="workspace-screen-menu"
|
||||
MenuItems="HeaderMenuItems"
|
||||
ToggleMenuRequested="ToggleScreenMenu"
|
||||
LogoutRequested="Session.LogoutAsync"/>
|
||||
@if (HasSessionInitialized)
|
||||
{
|
||||
<AppHeader
|
||||
User="State.User"
|
||||
ShowCampaign="@ShowCampaignInHeader"
|
||||
CampaignName="@State.SelectedCampaignName"
|
||||
ShowConnectionState="@ShowConnectionStateInHeader"
|
||||
ConnectionStateLabel="@State.ConnectionStateLabel"
|
||||
ConnectionStateCssClass="@State.ConnectionStateCssClass"
|
||||
IsMenuOpen="State.IsScreenMenuOpen"
|
||||
MenuButtonId="workspace-screen-menu-button"
|
||||
MenuId="workspace-screen-menu"
|
||||
MenuItems="HeaderMenuItems"
|
||||
ToggleMenuRequested="ToggleScreenMenu"
|
||||
LogoutRequested="Session.LogoutAsync"/>
|
||||
}
|
||||
else
|
||||
{
|
||||
<main class="management-screen">
|
||||
<section class="card">
|
||||
<p class="empty">Loading workspace...</p>
|
||||
</section>
|
||||
</main>
|
||||
}
|
||||
|
||||
@if (ChildContent is not null)
|
||||
{
|
||||
@ChildContent(PageContext)
|
||||
|
||||
@@ -137,6 +137,8 @@ public partial class Workspace : IAsyncDisposable
|
||||
private bool IsCampaignsRoute => Route == WorkspaceRoute.Campaigns;
|
||||
private bool IsAdminRoute => Route == WorkspaceRoute.Admin;
|
||||
private string AppCssClass => IsPlayRoute ? "rr-app app-play" : "rr-app";
|
||||
private bool ShowCampaignInHeader => !IsAdminRoute;
|
||||
private bool ShowConnectionStateInHeader => IsPlayRoute;
|
||||
|
||||
private WorkspacePageContext PageContext => new(State, Play, Campaigns, Admin, Scope, Session,
|
||||
InitializeRouteAsync, HasSessionInitialized, RequestRefreshAsync, AdminDatabaseDownloadUrl, HeaderMenuItems,
|
||||
|
||||
@@ -87,9 +87,22 @@ public sealed class WorkspaceCampaignScopeCoordinator(
|
||||
try
|
||||
{
|
||||
await RefreshCampaignRosterAsync();
|
||||
await refreshSelectedCharacterSheetAsync();
|
||||
await refreshCampaignLogAsync(null);
|
||||
resetCampaignStateTracking();
|
||||
if (isPlayRoute())
|
||||
{
|
||||
await refreshSelectedCharacterSheetAsync();
|
||||
await refreshCampaignLogAsync(null);
|
||||
resetCampaignStateTracking();
|
||||
}
|
||||
else
|
||||
{
|
||||
state.SelectedCharacterSkills = [];
|
||||
state.SelectedCharacterSkillGroups = [];
|
||||
state.CampaignLog = [];
|
||||
state.ConnectionState = "offline";
|
||||
state.CurrentCampaignState = null;
|
||||
state.CampaignLogCursor = null;
|
||||
resetCampaignLogDetailState();
|
||||
}
|
||||
}
|
||||
catch (ApiRequestException ex) when (ex.StatusCode == 401)
|
||||
{
|
||||
@@ -136,4 +149,4 @@ public sealed class WorkspaceCampaignScopeCoordinator(
|
||||
|
||||
private const string CampaignSessionKey = "campaign";
|
||||
private const string MobilePanelSessionKey = "play-panel";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ public sealed class WorkspaceLiveStateController(
|
||||
|
||||
public async Task SyncStateEventsAsync()
|
||||
{
|
||||
if (state.User is null || !state.SelectedCampaignId.HasValue || isAdminRoute())
|
||||
if (state.User is null || !state.SelectedCampaignId.HasValue || isAdminRoute() || !isPlayRoute())
|
||||
{
|
||||
await StopStateEventsAsync();
|
||||
state.ConnectionState = "offline";
|
||||
@@ -109,4 +109,4 @@ public sealed class WorkspaceLiveStateController(
|
||||
return snapshot.CharacterVersions.FirstOrDefault(version => version.CharacterId == characterId.Value)
|
||||
?.Version ?? 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,12 +31,14 @@ public sealed class WorkspaceSessionCoordinator(
|
||||
state.RollVisibility = NormalizeRollVisibility(storedRollVisibility);
|
||||
|
||||
Guid? preferredCampaignId = null;
|
||||
var storedCampaignId = await js.InvokeAsync<string?>("rpgRollerApi.getSessionValue", CampaignSessionKey);
|
||||
if (Guid.TryParse(storedCampaignId, out var parsedCampaignId))
|
||||
preferredCampaignId = parsedCampaignId;
|
||||
if (!isAdminRoute())
|
||||
{
|
||||
var storedCampaignId = await js.InvokeAsync<string?>("rpgRollerApi.getSessionValue", CampaignSessionKey);
|
||||
if (Guid.TryParse(storedCampaignId, out var parsedCampaignId))
|
||||
preferredCampaignId = parsedCampaignId;
|
||||
}
|
||||
|
||||
await CheckHealthAsync();
|
||||
await LoadRulesetsAsync();
|
||||
|
||||
var reloaded = await ReloadAuthenticatedSessionAsync(preferredCampaignId);
|
||||
if (!reloaded)
|
||||
@@ -160,14 +162,20 @@ public sealed class WorkspaceSessionCoordinator(
|
||||
if (!await EnsureRouteAccessAsync())
|
||||
return true;
|
||||
|
||||
if (isAdminRoute())
|
||||
{
|
||||
await stopStateEventsAsync();
|
||||
state.ConnectionState = "offline";
|
||||
await ensureAdminUsersLoadedAsync();
|
||||
return true;
|
||||
}
|
||||
|
||||
await LoadRulesetsAsync();
|
||||
await reloadCampaignsAsync(preferredCampaignId ?? me.CurrentCampaignId);
|
||||
await reloadCharacterCampaignOptionsAsync();
|
||||
await refreshCampaignScopeAsync();
|
||||
await syncStateEventsAsync();
|
||||
|
||||
if (isAdminRoute())
|
||||
await ensureAdminUsersLoadedAsync();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user