@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;
}
}