Initial commit
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
@using RobotNet10.ScriptEditor.Clients
|
||||
@using RobotNet10.ScriptEditor.Components
|
||||
@using RobotNet10.ScriptEngine.Shared
|
||||
@using RobotNet10.Shared
|
||||
@using MudBlazor
|
||||
@inject ScriptManagerHubClient ScriptManagerClient
|
||||
@inject ISnackbar Snackbar
|
||||
@implements IDisposable
|
||||
|
||||
<SidebarAccordionItem TabName="tasks" Label="TASKS">
|
||||
<HeaderActions>
|
||||
<IconButton Icon="refresh" Title="Refresh" OnClick="HandleRefresh" />
|
||||
</HeaderActions>
|
||||
<ChildContent>
|
||||
@if (_tasks == null || _tasks.Count == 0)
|
||||
{
|
||||
<div class="tasks-empty-state">
|
||||
<MudText Typo="Typo.body2" Class="text-secondary">
|
||||
@if (_isLoading)
|
||||
{
|
||||
<span>Loading tasks...</span>
|
||||
}
|
||||
else if (_currentState == ScriptEngineState.Ready || _currentState == ScriptEngineState.Running)
|
||||
{
|
||||
<span>No tasks available</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span>Tasks available when engine is Ready or Running</span>
|
||||
}
|
||||
</MudText>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="tasks-list">
|
||||
@foreach (var task in _tasks)
|
||||
{
|
||||
<TaskItem @key="@task.Name"
|
||||
Task="@task"/>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</ChildContent>
|
||||
</SidebarAccordionItem>
|
||||
|
||||
@code {
|
||||
private List<ScriptTaskDto> _tasks = new();
|
||||
private ScriptEngineState _currentState = ScriptEngineState.Initializing;
|
||||
private bool _isLoading = false;
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
// Subscribe to state changes
|
||||
ScriptManagerClient.StateChanged += OnStateChanged;
|
||||
_currentState = ScriptManagerClient.State;
|
||||
|
||||
// Load tasks if state is already Ready or Running
|
||||
if (_currentState == ScriptEngineState.Ready || _currentState == ScriptEngineState.Running)
|
||||
{
|
||||
_ = LoadTasksAsync();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnAfterRender(bool firstRender)
|
||||
{
|
||||
if (firstRender)
|
||||
{
|
||||
// Ensure we have the latest state
|
||||
_currentState = ScriptManagerClient.State;
|
||||
if (_currentState == ScriptEngineState.Ready || _currentState == ScriptEngineState.Running)
|
||||
{
|
||||
_ = LoadTasksAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async void OnStateChanged(ScriptEngineState newState)
|
||||
{
|
||||
_currentState = newState;
|
||||
|
||||
if (newState == ScriptEngineState.Ready || newState == ScriptEngineState.Running)
|
||||
{
|
||||
await LoadTasksAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Clear tasks when not in Ready or Running state
|
||||
_tasks.Clear();
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task LoadTasksAsync()
|
||||
{
|
||||
if (!ScriptManagerClient.IsConnected)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
_isLoading = true;
|
||||
StateHasChanged();
|
||||
|
||||
var tasks = await ScriptManagerClient.GetScriptTasksAsync();
|
||||
_tasks = tasks?.ToList() ?? new List<ScriptTaskDto>();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Snackbar.Add($"Failed to load tasks: {ex.Message}", Severity.Error);
|
||||
_tasks = new List<ScriptTaskDto>();
|
||||
}
|
||||
finally
|
||||
{
|
||||
_isLoading = false;
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task HandleRefresh(MouseEventArgs e)
|
||||
{
|
||||
if (_currentState == ScriptEngineState.Ready || _currentState == ScriptEngineState.Running)
|
||||
{
|
||||
await LoadTasksAsync();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
ScriptManagerClient.StateChanged -= OnStateChanged;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user