@using Microsoft.Extensions.Logging @using XtermBlazor @inherits MoonCore.Blazor.FlyonUi.Modals.Components.BaseModal @inject IJSRuntime JsRuntime @inject ILogger Logger @implements IAsyncDisposable
@if (IsInitialized) { }
@code { [Parameter] public XtermConsole Parent { get; set; } private bool IsInitialized = false; private bool IsReadyToWrite = false; private Xterm Terminal; protected override async Task OnAfterRenderAsync(bool firstRender) { if (!firstRender) return; // Initialize addons try { await JsRuntime.InvokeVoidAsync("moonlightServers.loadAddons"); } catch (Exception e) { Logger.LogError("An error occured while initializing addons: {e}", e); } // Subscribe to parent events Parent.OnWrite += HandleWriteAsync; IsInitialized = true; await InvokeAsync(StateHasChanged); } private async Task HandleFirstRenderAsync() { IsReadyToWrite = true; try { await Terminal.Addon("addon-fit").InvokeVoidAsync("fit"); } catch (Exception e) { Logger.LogError("An error occured while calling addons: {e}", e); } var outputToWrite = string.Concat(Parent.OutputCache.ToArray()); await Terminal.Write(outputToWrite); } private async Task HandleWriteAsync(string content) { if (!IsReadyToWrite) return; await Terminal.Write(content); } public async ValueTask DisposeAsync() { Parent.OnWrite -= HandleWriteAsync; await Terminal.DisposeAsync(); } }