96 lines
3.0 KiB
Plaintext
96 lines
3.0 KiB
Plaintext
@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
|
|
|
|
<div class="mission-item">
|
|
<div class="mission-info">
|
|
<div class="mission-name">@Mission.Name</div>
|
|
<div class="mission-parameter-count">
|
|
@(Mission.Parameters?.Length ?? 0) @((Mission.Parameters?.Length ?? 0) == 1 ? "parameter" : "parameters")
|
|
</div>
|
|
</div>
|
|
<IconButton Icon="play" Title="Create Mission Instance" Disabled="@CreateDisabled" OnClick="HandleCreateMission" />
|
|
</div>
|
|
|
|
@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<InstantiateMissionDialog>
|
|
{
|
|
{ x => x.Model, Mission }
|
|
};
|
|
|
|
var options = new DialogOptions
|
|
{
|
|
CloseOnEscapeKey = true,
|
|
MaxWidth = MaxWidth.Small,
|
|
FullWidth = true
|
|
};
|
|
|
|
var dialog = await DialogService.ShowAsync<InstantiateMissionDialog>("Create Mission", parameters, options);
|
|
var result = await dialog.Result;
|
|
|
|
if (result is not null && !result.Canceled && result.Data is Dictionary<string, string> 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;
|
|
}
|
|
}
|
|
|