Initial commit

This commit is contained in:
2026-07-13 09:25:40 +07:00
parent c08ff54676
commit bccfb156d7
1938 changed files with 641646 additions and 0 deletions

View File

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