@implements IDisposable @using RobotNet10.ScriptEditor.Clients @using RobotNet10.ScriptEditor.Dialogs @using RobotNet10.Components @using RobotNet10.ScriptEngine.Shared @using RobotNet10.Shared @using MudBlazor @inject ScriptManagerHubClient ScriptManagerClient @inject IDialogService DialogService @inject ISnackbar Snackbar
@Mission.Name
@(Mission.Parameters?.Length ?? 0) @((Mission.Parameters?.Length ?? 0) == 1 ? "parameter" : "parameters")
@code { [Parameter, EditorRequired] public ScriptMissionDto Mission { get; set; } = null!; private bool CreateDisabled => ScriptManagerClient.State != ScriptEngineState.Running; protected override void OnAfterRender(bool firstRender) { base.OnAfterRender(firstRender); if(firstRender) { ScriptManagerClient.StateChanged += OnEngineStateChanged; } } private void OnEngineStateChanged(ScriptEngineState _) { StateHasChanged(); } private async Task HandleCreateMission() { if (!ScriptManagerClient.IsConnected) { Snackbar.Add($"Cannot create mission: Not connected to server", Severity.Warning); return; } var parameters = new DialogParameters { { x => x.Model, Mission } }; var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = await DialogService.ShowAsync("Create Mission", parameters, options); var result = await dialog.Result; if (result is not null && !result.Canceled && result.Data is Dictionary missionParams) { try { var createResult = await ScriptManagerClient.CreateMissionAsync(Mission.Name, missionParams); if (createResult != null && createResult.IsSuccess) { Snackbar.Add($"Mission '{Mission.Name}' created successfully (ID: {createResult.Data})", Severity.Success); } else { var errorMessage = createResult?.Message ?? "Unknown error"; Snackbar.Add($"Failed to create mission: {errorMessage}", Severity.Error); } } catch (Exception ex) { Snackbar.Add($"Error creating mission: {ex.Message}", Severity.Error); } } } public void Dispose() { ScriptManagerClient.StateChanged -= OnEngineStateChanged; } }