Files
I150/srcs/RobotNet10/Components/RobotNet10.ScriptEditor/Components/MissionItem.razor
2026-07-03 16:37:12 +07:00

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