@implements IDisposable @inject IJSRuntime JsRuntime
@for (int i = 0; i < Model.Level; i++) {
}
@if (IsExpaned) { @foreach (var model in Model.Folders) { } @foreach (var model in Model.Files) { } } @code { [CascadingParameter] private ScriptWorkspace Workspace { get; set; } = null!; [CascadingParameter(Name = "HierachyItemRadioName")] protected string RadioName { get; set; } = "script-explorer-item"; [Parameter, EditorRequired] public ScriptFolderModel Model { get; set; } = default!; Guid ItemId = Guid.NewGuid(); public bool IsExpaned { get; private set; } private string Icon => IsExpaned ? "mdi-chevron-down" : "mdi-chevron-right"; protected override void OnAfterRender(bool firstRender) { base.OnAfterRender(firstRender); if (firstRender) { Model.OnChildrenChanged += OnChildrenChanged; } } private void OnChildrenChanged() { this.InvokeAsync(() => { StateHasChanged(); }); } private async Task Click() { await JsRuntime.InvokeVoidAsync("SetRadioChecked", ItemId); if (Workspace.SelectFolder(this.Model)) return; if (IsExpaned) { Collapse(); } else { Expand(); } } public void Collapse() { IsExpaned = false; StateHasChanged(); } public void Expand() { IsExpaned = true; StateHasChanged(); } public void Dispose() { Model.OnChildrenChanged -= OnChildrenChanged; GC.SuppressFinalize(this); } }