fix: route all _isMinimized mutations through SetMinimized so spacer stays in sync

Expand, ToggleMinimized, and Close now share one guarded mutator that fires
OnMinimized and renders. Fixed prerender branch left as a direct assignment.
This commit is contained in:
daniel-c-harvey
2026-06-07 16:14:55 -04:00
parent 9ead3bf2a7
commit 5bc1b63b61
@@ -115,14 +115,23 @@ public partial class AudioPlayerBar : ComponentBase, IAsyncDisposable
} }
} }
private async Task Expand() private async Task Expand() => await SetMinimized(false);
/// <summary>
/// The single assignment site for <see cref="_isMinimized"/>. Guards no-op transitions,
/// fires <see cref="OnMinimized"/> so MainLayout's spacer class stays in sync, and renders
/// so OnAfterRenderAsync re-evaluates the ResizeObserver on every transition path.
/// The <c>Fixed</c> branch in OnParametersSet intentionally bypasses this — it is a
/// prerender/parameter pass, not a user-driven transition, and the embed host has no spacer.
/// </summary>
private async Task SetMinimized(bool value)
{ {
if (_isMinimized) if (_isMinimized == value) return;
{
_isMinimized = false; _isMinimized = value;
if (OnMinimized.HasDelegate) await OnMinimized.InvokeAsync(value);
StateHasChanged(); StateHasChanged();
} }
}
private async Task TogglePlayPause() private async Task TogglePlayPause()
{ {
@@ -176,12 +185,7 @@ public partial class AudioPlayerBar : ComponentBase, IAsyncDisposable
PlayerService?.ClearError(); PlayerService?.ClearError();
} }
private async Task ToggleMinimized() private async Task ToggleMinimized() => await SetMinimized(!_isMinimized);
{
_isMinimized = !_isMinimized;
if (OnMinimized.HasDelegate) await OnMinimized.InvokeAsync(_isMinimized);
StateHasChanged();
}
private async Task Close() private async Task Close()
{ {
@@ -190,11 +194,7 @@ public partial class AudioPlayerBar : ComponentBase, IAsyncDisposable
await PlayerService.Unload(); await PlayerService.Unload();
} }
if (!_isMinimized) await SetMinimized(true);
{
_isMinimized = true;
StateHasChanged();
}
} }
public async ValueTask DisposeAsync() public async ValueTask DisposeAsync()