@using Microsoft.AspNetCore.Components.Forms @using TextLore.Models
Command >
        @currentOutput?.Text
        
            @foreach (ConsoleOutput output in consoleOutputs.Reverse())
            {
                

@output.Time.ToString("HH:mm") > @output.Command @output.Text

}
@code { [Parameter, EditorRequired] public string Name { get; set; } = "Console"; [Parameter] public string? Description { get; set; } [Parameter] public bool ShowDate { get; set; } = true; [Parameter, EditorRequired] public IEnumerable Commands { get; set; } = []; [Parameter] public Command? HelpCommand { get; set; } private string Placeholder => $"Enter a command{(HelpCommand is null ? "." : ", type 'help' for avaliable commands.")}"; private ConsoleInput ConsoleInput { get; set; } = new(); private List consoleOutputs = new(); private ConsoleOutput? currentOutput; private bool disabled { get; set; } = false; private InputText? inputText; protected override async Task OnAfterRenderAsync(bool firstRender) { if (inputText?.Element is not null) { await inputText.Element.Value.FocusAsync(); } } public async Task Execute(EditContext context) { string commandName = ConsoleInput.Text.Split(' ')[0]; string commandArgs = new string(ConsoleInput.Text.Skip(commandName.Length).ToArray()).TrimStart(' '); Command? command = Commands.FirstOrDefault(c => c.Name.Equals(commandName) || c.Aliases.Contains(commandName)); command ??= HelpCommand?.Name.Equals(commandName) == true || HelpCommand?.Aliases.Contains(commandName) == true ? HelpCommand : null; if (command is null) { await CommandNotFound(commandName); return; } disabled = true; ConsoleWriter consoleWriter = new ConsoleWriter(); ConsoleOutput consoleOutput = new ConsoleOutput(); consoleWriter.OnOutput += (_, e) => WriteOutput(consoleOutput, e); consoleWriter.OnClear += (_, _) => consoleOutputs.Clear(); consoleOutput.Command = ConsoleInput.Text; currentOutput = consoleOutput; CommandResult commandResult = await command.Execute(consoleWriter, commandArgs); currentOutput = new() { Text = $"{(commandResult.IsSuccess ? "[Success]" : "[Failed]")} {commandResult.Message}" }; if (!command.NoHistoryIfNoOutput || !string.IsNullOrWhiteSpace(consoleOutput.Text)) { consoleOutputs.Add(consoleOutput); } ConsoleInput.Text = string.Empty; disabled = false; StateHasChanged(); } public void WriteOutput(ConsoleOutput consoleOutput, ConsoleOutputEventArgs e) { consoleOutput.Text += e.Message; StateHasChanged(); } private async Task CommandNotFound(string commandName) { currentOutput = new() { Text = $"[Failed] Command '{commandName}' not found!" }; if(HelpCommand is null) { return; } ConsoleWriter consoleWriter = new ConsoleWriter(); ConsoleOutput consoleOutput = new ConsoleOutput(); consoleWriter.OnOutput += (_, e) => WriteOutput(consoleOutput, e); consoleOutput.Command = ConsoleInput.Text; consoleOutputs.Add(consoleOutput); CommandResult commandResult = await HelpCommand.Execute(consoleWriter, string.Empty); ConsoleInput.Text = string.Empty; } }