@implements IDisposable @inject SocialRealtimeService Realtime @inject NavigationManager Navigation @if (Realtime.IncomingPlayInvite is not null) {
} @code { private string RecipientColorLabel => string.Equals(Realtime.IncomingPlayInvite?.RecipientColor, "white", StringComparison.Ordinal) ? "blanc" : "noir"; protected override async Task OnInitializedAsync() { Realtime.Changed += HandleRealtimeChanged; await Realtime.EnsureStartedAsync(); } private void HandleRealtimeChanged() => _ = InvokeAsync(StateHasChanged); private async Task AcceptAsync() { await Realtime.RespondToIncomingPlayInviteAsync(accept: true); var currentPath = new Uri(Navigation.Uri).AbsolutePath.Trim('/'); if (!string.Equals(currentPath, "application", StringComparison.OrdinalIgnoreCase) && !string.Equals(currentPath, "application.html", StringComparison.OrdinalIgnoreCase)) { Navigation.NavigateTo("/application.html"); } } private Task DeclineAsync() => Realtime.RespondToIncomingPlayInviteAsync(accept: false); public void Dispose() => Realtime.Changed -= HandleRealtimeChanged; }