fix: sync custom roll visibility

This commit is contained in:
2026-05-05 00:56:41 +02:00
parent 6b18051073
commit 777befdbf0
3 changed files with 31 additions and 3 deletions

View File

@@ -171,6 +171,8 @@ public partial class CampaignLogPanel
[Parameter] public string RollVisibility { get; set; } = "public"; [Parameter] public string RollVisibility { get; set; } = "public";
[Parameter] public Func<string>? ResolveRollVisibility { get; set; }
[Parameter] public bool IsMutating { get; set; } [Parameter] public bool IsMutating { get; set; }
[Parameter] public EventCallback<RollResult> CustomRollCreated { get; set; } [Parameter] public EventCallback<RollResult> CustomRollCreated { get; set; }
@@ -214,7 +216,9 @@ public partial class CampaignLogPanel
string.Equals(NormalizedRollVisibility, "private", StringComparison.OrdinalIgnoreCase) ? "Private" : "Public"; string.Equals(NormalizedRollVisibility, "private", StringComparison.OrdinalIgnoreCase) ? "Private" : "Public";
private string NormalizedRollVisibility => private string NormalizedRollVisibility =>
string.Equals(RollVisibility, "private", StringComparison.OrdinalIgnoreCase) ? "private" : "public"; string.Equals(ResolveRollVisibility?.Invoke() ?? RollVisibility, "private", StringComparison.OrdinalIgnoreCase)
? "private"
: "public";
private string CustomRollExpression private string CustomRollExpression
{ {

View File

@@ -12,7 +12,7 @@
SelectedCharacterSkillGroups="Workspace.State.PlaySelectedCharacterSkillGroups" SelectedCharacterSkillGroups="Workspace.State.PlaySelectedCharacterSkillGroups"
SelectedCampaignRulesetId="@(Workspace.State.PlaySelectedCampaign?.RulesetId ?? string.Empty)" SelectedCampaignRulesetId="@(Workspace.State.PlaySelectedCampaign?.RulesetId ?? string.Empty)"
RollVisibility="Workspace.State.RollVisibility" RollVisibility="Workspace.State.RollVisibility"
RollVisibilityChanged="Workspace.Session.OnRollVisibilityChangedAsync" RollVisibilityChanged="OnRollVisibilityChangedAsync"
OwnerLabel="Workspace.State.OwnerLabel" OwnerLabel="Workspace.State.OwnerLabel"
SkillDefinitionLabel="Workspace.State.SkillDefinitionLabel" SkillDefinitionLabel="Workspace.State.SkillDefinitionLabel"
CanEditCharacter="Workspace.Campaigns.CanEditCharacter" CanEditCharacter="Workspace.Campaigns.CanEditCharacter"
@@ -37,6 +37,7 @@
SelectedCharacterName="@(Workspace.State.PlaySelectedCharacter?.Name)" SelectedCharacterName="@(Workspace.State.PlaySelectedCharacter?.Name)"
SelectedCampaignRulesetId="@(Workspace.State.PlaySelectedCampaign?.RulesetId ?? string.Empty)" SelectedCampaignRulesetId="@(Workspace.State.PlaySelectedCampaign?.RulesetId ?? string.Empty)"
RollVisibility="Workspace.State.RollVisibility" RollVisibility="Workspace.State.RollVisibility"
ResolveRollVisibility="ResolveRollVisibility"
IsMutating="Workspace.State.IsMutating" IsMutating="Workspace.State.IsMutating"
ToggleRollDetailRequested="Workspace.Play.ToggleRollDetailAsync" ToggleRollDetailRequested="Workspace.Play.ToggleRollDetailAsync"
ResolveRollDetail="Workspace.Play.ResolveRollDetail" ResolveRollDetail="Workspace.Play.ResolveRollDetail"
@@ -74,4 +75,20 @@
[Parameter, EditorRequired] public WorkspacePageContext Workspace { get; set; } = null!; [Parameter, EditorRequired] public WorkspacePageContext Workspace { get; set; } = null!;
private bool IsCampaignDataLoading => !Workspace.HasSessionInitialized || Workspace.State.IsCampaignDataLoading; private bool IsCampaignDataLoading => !Workspace.HasSessionInitialized || Workspace.State.IsCampaignDataLoading;
private async Task OnRollVisibilityChangedAsync(string visibility)
{
var normalizedVisibility = string.Equals(visibility, "private", StringComparison.OrdinalIgnoreCase)
? "private"
: "public";
Workspace.State.RollVisibility = normalizedVisibility;
await Workspace.Session.OnRollVisibilityChangedAsync(visibility);
await InvokeAsync(StateHasChanged);
}
private string ResolveRollVisibility()
{
return Workspace.State.RollVisibility;
}
} }

View File

@@ -505,6 +505,13 @@ const tests = [
); );
assert.match(await elementText(driver, ".custom-roll-composer-head .muted"), /uses public visibility/i); assert.match(await elementText(driver, ".custom-roll-composer-head .muted"), /uses public visibility/i);
await fillInput(driver, "#roll-visibility", "private");
await waitFor(
driver,
() => elementText(driver, ".custom-roll-composer-head .muted").then((text) => /uses private visibility/i.test(text)),
"Expected custom roll status text to reflect private visibility."
);
await fillInput(driver, "#custom-roll-expression", "bad"); await fillInput(driver, "#custom-roll-expression", "bad");
await clickText(driver, ".custom-roll-composer button", "Roll"); await clickText(driver, ".custom-roll-composer button", "Roll");
@@ -529,7 +536,7 @@ const tests = [
const firstLogEntry = document.querySelector(".log-panel .log-entry"); const firstLogEntry = document.querySelector(".log-panel .log-entry");
return !/error/.test(className) && return !/error/.test(className) &&
Boolean(firstLogEntry?.textContent.includes("Custom roll")) && Boolean(firstLogEntry?.textContent.includes("Custom roll")) &&
Boolean(firstLogEntry?.textContent.includes("Public")); Boolean(firstLogEntry?.textContent.includes("Private"));
}), }),
"Expected successful custom roll entry." "Expected successful custom roll entry."
); );