This commit is contained in:
2026-06-02 17:13:26 +02:00
14 changed files with 474 additions and 25 deletions
+46
View File
@@ -0,0 +1,46 @@
@* Recursive editor row for one folder in the visual builder. *@
@using SharepointToolbox.Web.Core.Models
<div class="folder-node" style="margin-left:@(Depth > 1 ? "18px" : "0")">
<div class="flex-row" style="gap:6px">
<span class="text-muted" style="font-family:monospace">📁</span>
<input class="form-input" style="width:auto;flex:1;min-width:160px"
placeholder="Folder name" value="@Node.Name"
@oninput="OnNameInput" />
@if (Depth < FolderNode.MaxDepth)
{
<button class="btn btn-secondary btn-sm" type="button" @onclick="AddChild" title="Add subfolder">+ Sub</button>
}
<button class="btn btn-danger btn-sm" type="button" @onclick="() => OnRemove.InvokeAsync(Node)" title="Remove">✕</button>
</div>
@foreach (var child in Node.Children)
{
<FolderTreeNode Node="child" Depth="Depth + 1" OnRemove="RemoveChild" OnChanged="OnChanged" />
}
</div>
@code {
[Parameter, EditorRequired] public FolderNode Node { get; set; } = default!;
[Parameter] public int Depth { get; set; } = 1;
[Parameter] public EventCallback<FolderNode> OnRemove { get; set; }
[Parameter] public EventCallback OnChanged { get; set; }
private async Task OnNameInput(ChangeEventArgs e)
{
Node.Name = e.Value?.ToString() ?? string.Empty;
await OnChanged.InvokeAsync();
}
private async Task AddChild()
{
Node.Children.Add(new FolderNode());
await OnChanged.InvokeAsync();
}
private async Task RemoveChild(FolderNode child)
{
Node.Children.Remove(child);
await OnChanged.InvokeAsync();
}
}