RobotNet/RobotNet.WebApp/Scripts/Components/EditorHierachy.razor
2025-10-15 15:15:53 +07:00

114 lines
3.3 KiB
Plaintext

@using RobotNet.WebApp.Scripts.Components.Dialogs
@implements IDisposable
@inject IJSRuntime JsRuntime
@inject ISnackbar Snackbar
@inject IDialogService DialogService
<MudMenu Class="w-100 h-100" Dense ActivationEvent="@MouseEvent.RightClick" Size="@Size.Small" PositionAtCursor>
<ActivatorContent>
<div class="editor-hierachy" @onclick="ResetSelect">
<div>
<CascadingValue Value="ItemRadioName" Name="HierachyItemRadioName">
@foreach (var model in Workspace.Folders)
{
<FolderItem Model="model" />
}
@foreach (var model in Workspace.Files)
{
<FileItem Model="model" />
}
</CascadingValue>
</div>
</div>
</ActivatorContent>
<ChildContent>
<MudMenuItem Label="Save" OnClick="SaveSelect" />
<MudMenuItem Label="Rename" OnClick="RenameSelect" />
<MudDivider />
<MudMenuItem Label="Delete" Class="text-danger" OnClick="DeleteSelect" />
</ChildContent>
</MudMenu>
@code {
[CascadingParameter]
private ScriptWorkspace Workspace { get; set; } = null!;
readonly string ItemRadioName = $"script-{Guid.NewGuid()}";
protected override void OnInitialized()
{
base.OnInitialized();
Workspace.RootChanged += OnRootChanged;
}
private void OnRootChanged()
{
this.InvokeAsync(() =>
{
StateHasChanged();
});
}
private async Task ResetSelect()
{
Workspace.SelectFolder(null);
await JsRuntime.InvokeVoidAsync("UncheckRadioAll", ItemRadioName);
}
private async Task SaveSelect()
{
if (Workspace.IsReadOnly)
{
Snackbar.Add($"Hệ thống đang ở trạng thái {Workspace.ProcessorState}, Không thể thay đổi script", Severity.Warning);
return;
}
var results = await Workspace.SaveSelectAsync();
foreach (var result in results)
{
if (!result.IsSuccess)
{
Snackbar.Add(result.Message, Severity.Error);
}
}
}
private async Task DeleteSelect()
{
if (Workspace.IsReadOnly)
{
Snackbar.Add($"Hệ thống đang ở trạng thái {Workspace.ProcessorState}, Không thể thay đổi script", Severity.Warning);
return;
}
// Truyền Workspace vào DeleteFileOrFolderDialog qua parameters
var parameters = new DialogParameters
{
{ "Workspace", Workspace }
};
await DialogService.ShowAsync<DeleteFileOrFolderDialog>("", parameters: parameters);
}
private async Task RenameSelect()
{
if (Workspace.IsReadOnly)
{
Snackbar.Add($"Hệ thống đang ở trạng thái {Workspace.ProcessorState}, Không thể thay đổi script", Severity.Warning);
return;
}
var parameters = new DialogParameters
{
{ "Workspace", Workspace }
};
await DialogService.ShowAsync<RenameFileOrFolderDialog>("", parameters: parameters);
}
public void Dispose()
{
Workspace.RootChanged -= OnRootChanged;
GC.SuppressFinalize(this);
}
}