refactor: split workspace routes
This commit is contained in:
@@ -27,149 +27,9 @@
|
||||
MenuItems="HeaderMenuItems"
|
||||
ToggleMenuRequested="ToggleScreenMenu"
|
||||
LogoutRequested="Session.LogoutAsync"/>
|
||||
|
||||
@if (IsPlayRoute)
|
||||
@if (ChildContent is not null)
|
||||
{
|
||||
<main class="play-screen @(State.MobilePanel == "log" ? "mobile-log" : "mobile-character")">
|
||||
<CharacterPanel
|
||||
IsCampaignDataLoading="State.IsCampaignDataLoading"
|
||||
SelectedCampaign="State.PlaySelectedCampaign"
|
||||
SelectedCharacterId="State.PlaySelectedCharacterId"
|
||||
SelectedCharacter="State.PlaySelectedCharacter"
|
||||
IsMutating="State.IsMutating"
|
||||
SelectedCharacterSkills="State.PlaySelectedCharacterSkills"
|
||||
SelectedCharacterSkillGroups="State.PlaySelectedCharacterSkillGroups"
|
||||
SelectedCampaignRulesetId="@(State.PlaySelectedCampaign?.RulesetId ?? string.Empty)"
|
||||
RollVisibility="State.RollVisibility"
|
||||
EnableInteractiveControls="EnableCharacterControls"
|
||||
RollVisibilityChanged="Session.OnRollVisibilityChangedAsync"
|
||||
OwnerLabel="State.OwnerLabel"
|
||||
SkillDefinitionLabel="State.SkillDefinitionLabel"
|
||||
CanEditCharacter="Campaigns.CanEditCharacter"
|
||||
CanEditSkill="Play.CanEditSkill"
|
||||
CharacterSelected="Play.SelectCharacterAsync"
|
||||
EditCharacterRequested="Campaigns.OpenEditCharacterModal"
|
||||
SkillCreated="Play.OnSkillCreatedAsync"
|
||||
SkillUpdated="Play.OnSkillUpdatedAsync"
|
||||
SkillGroupCreated="Play.OnSkillGroupCreatedAsync"
|
||||
SkillGroupUpdated="Play.OnSkillGroupUpdatedAsync"
|
||||
SkillDeleted="Play.OnSkillDeletedAsync"
|
||||
SkillGroupDeleted="Play.OnSkillGroupDeletedAsync"
|
||||
ErrorOccurred="Play.OnCharacterPanelErrorAsync"
|
||||
RollRequested="Play.RollSkillAsync"/>
|
||||
|
||||
<CampaignLogPanel
|
||||
IsCampaignDataLoading="State.IsCampaignDataLoading"
|
||||
CampaignLog="State.PlayVisibleCampaignLog"
|
||||
ExpandedRollId="State.ExpandedCampaignLogRollId"
|
||||
FreshRollId="State.FreshCampaignLogRollId"
|
||||
SelectedCharacterId="State.PlaySelectedCharacterId"
|
||||
SelectedCharacterName="@(State.PlaySelectedCharacter?.Name)"
|
||||
SelectedCampaignRulesetId="@(State.PlaySelectedCampaign?.RulesetId ?? string.Empty)"
|
||||
RollVisibility="State.RollVisibility"
|
||||
EnableCustomRollComposer="EnableCustomRollComposer"
|
||||
IsMutating="State.IsMutating"
|
||||
ToggleRollDetailRequested="Play.ToggleRollDetailAsync"
|
||||
ResolveRollDetail="Play.ResolveRollDetail"
|
||||
IsRollDetailLoading="Play.IsRollDetailLoading"
|
||||
GetRollDetailError="Play.GetRollDetailError"
|
||||
CustomRollCreated="Play.OnCustomRollCreatedAsync"
|
||||
ErrorOccurred="Play.OnCampaignLogPanelErrorAsync"/>
|
||||
</main>
|
||||
<nav class="mobile-bottom-nav" aria-label="Play panel selector">
|
||||
<button type="button" class="switch @(State.MobilePanel == "character" ? "active" : string.Empty)"
|
||||
@onclick='() => Scope.SetMobilePanelAsync("character")'>
|
||||
Character
|
||||
</button>
|
||||
<button type="button" class="switch @(State.MobilePanel == "log" ? "active" : string.Empty)"
|
||||
@onclick='() => Scope.SetMobilePanelAsync("log")'>
|
||||
Log
|
||||
</button>
|
||||
</nav>
|
||||
}
|
||||
else if (IsCampaignsRoute)
|
||||
{
|
||||
<CampaignManagementPanel
|
||||
Campaigns="State.Campaigns"
|
||||
SelectedCampaignId="State.SelectedCampaignId"
|
||||
SelectedCampaign="State.SelectedCampaign"
|
||||
Rulesets="State.Rulesets"
|
||||
IsMutating="State.IsMutating"
|
||||
OwnerLabel="State.OwnerLabel"
|
||||
CanEditCharacter="Campaigns.CanEditCharacter"
|
||||
CanDeleteCharacter="Campaigns.CanDeleteCharacter"
|
||||
CanDeleteCampaign="State.CanDeleteSelectedCampaign"
|
||||
CampaignSelectionChanged="Campaigns.OnCampaignSelectionChangedAsync"
|
||||
CampaignCreated="Campaigns.OnCampaignCreatedAsync"
|
||||
DeleteCampaignRequested="Campaigns.DeleteSelectedCampaignAsync"
|
||||
CreateCharacterRequested="Campaigns.OpenCreateCharacterModal"
|
||||
EditCharacterRequested="Campaigns.OpenEditCharacterModal"
|
||||
DeleteCharacterRequested="Campaigns.DeleteCharacterAsync"/>
|
||||
}
|
||||
else if (IsAdminRoute)
|
||||
{
|
||||
<main class="management-screen">
|
||||
@if (State.IsCurrentUserAdmin)
|
||||
{
|
||||
<section class="card">
|
||||
<div class="section-head">
|
||||
<h2>Database</h2>
|
||||
</div>
|
||||
<p class="muted">Download the current SQLite file for backup or offline inspection.</p>
|
||||
<div class="management-actions">
|
||||
<a class="action-link" href="@AdminDatabaseDownloadUrl" download>Download SQLite database</a>
|
||||
</div>
|
||||
</section>
|
||||
}
|
||||
<section class="card">
|
||||
<div class="section-head">
|
||||
<h2>User Management</h2>
|
||||
</div>
|
||||
@if (State.IsAdminDataLoading)
|
||||
{
|
||||
<p class="empty">Loading users...</p>
|
||||
}
|
||||
else if (!State.IsCurrentUserAdmin)
|
||||
{
|
||||
<p class="empty">Admin role is required to manage users.</p>
|
||||
}
|
||||
else if (State.AdminUsers.Count == 0)
|
||||
{
|
||||
<p class="empty">No users found.</p>
|
||||
}
|
||||
else
|
||||
{
|
||||
<ul class="management-list">
|
||||
@foreach (var user in State.AdminUsers)
|
||||
{
|
||||
<li>
|
||||
<div>
|
||||
<strong>@user.Username</strong>
|
||||
<p class="muted">@user.DisplayName</p>
|
||||
<p class="muted">Roles: @(user.Roles.Count == 0 ? "none" : string.Join(", ", user.Roles))</p>
|
||||
</div>
|
||||
<div class="skill-chip-actions">
|
||||
<button type="button"
|
||||
class="chip-button"
|
||||
disabled="@(State.IsMutating || user.Id == State.User?.Id)"
|
||||
@onclick="() => Admin.ToggleAdminRoleAsync(user)">
|
||||
<span aria-hidden="true" class="emoji">🛡️</span>
|
||||
<span class="sr-only">Toggle admin role for @user.Username</span>
|
||||
</button>
|
||||
<button type="button"
|
||||
class="chip-button"
|
||||
disabled="@(State.IsMutating || user.Id == State.User?.Id)"
|
||||
@onclick="() => Admin.DeleteUserAsync(user)">
|
||||
<span aria-hidden="true" class="emoji">🗑️</span>
|
||||
<span class="sr-only">Delete user @user.Username</span>
|
||||
</button>
|
||||
</div>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
</section>
|
||||
</main>
|
||||
@ChildContent(PageContext)
|
||||
}
|
||||
</div>
|
||||
|
||||
@@ -185,49 +45,3 @@
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<CharacterFormModal
|
||||
Visible="State.ShowCreateCharacterModal"
|
||||
Title="Create Character"
|
||||
SubmitLabel="Create Character"
|
||||
NameInputId="character-create-name"
|
||||
CampaignInputId="character-create-campaign"
|
||||
OwnerUsernameInputId="character-create-owner"
|
||||
InitialModel="State.CreateCharacterInitialModel"
|
||||
FormVersion="State.CreateCharacterFormVersion"
|
||||
EditingCharacterId="null"
|
||||
CampaignOptions="State.CharacterCampaignOptions"
|
||||
IsMutating="State.IsMutating"
|
||||
AllowOwnerEdit="false"
|
||||
AvailableUsernames="State.KnownUsernames"
|
||||
CharacterSaved="Campaigns.OnCharacterCreatedAsync"
|
||||
CancelRequested="Campaigns.CloseCharacterModals"/>
|
||||
|
||||
<CharacterFormModal
|
||||
Visible="State.ShowEditCharacterModal"
|
||||
Title="Edit Character"
|
||||
SubmitLabel="Save Character"
|
||||
NameInputId="character-edit-name"
|
||||
CampaignInputId="character-edit-campaign"
|
||||
OwnerUsernameInputId="character-edit-owner"
|
||||
InitialModel="State.EditCharacterInitialModel"
|
||||
FormVersion="State.EditCharacterFormVersion"
|
||||
EditingCharacterId="State.EditingCharacterId"
|
||||
CampaignOptions="State.CharacterCampaignOptions"
|
||||
IsMutating="State.IsMutating"
|
||||
AllowOwnerEdit="State.CanEditCharacterOwner"
|
||||
AvailableUsernames="State.KnownUsernames"
|
||||
CharacterSaved="Campaigns.OnCharacterUpdatedAsync"
|
||||
CancelRequested="Campaigns.CloseCharacterModals"/>
|
||||
|
||||
<RolemasterSkillRollModal
|
||||
Visible="State.ShowRolemasterSkillRollModal"
|
||||
SkillName="@(State.PendingRolemasterSkillRoll?.Name ?? string.Empty)"
|
||||
Expression="@(State.PendingRolemasterSkillRoll?.DiceRollDefinition ?? string.Empty)"
|
||||
ModifierText="@State.PendingRolemasterSituationalModifier"
|
||||
ModifierTextChanged="@(text => State.PendingRolemasterSituationalModifier = text)"
|
||||
ErrorMessage="@State.PendingRolemasterSkillRollError"
|
||||
IsMutating="State.IsMutating"
|
||||
IsSubmitting="State.IsSubmittingRolemasterSkillRoll"
|
||||
ConfirmRequested="Play.SubmitRolemasterSkillRollAsync"
|
||||
CancelRequested="Play.CancelRolemasterSkillRollAsync"/>
|
||||
|
||||
Reference in New Issue
Block a user