diff options
Diffstat (limited to 'MatrixUtils.Web/Shared/RoomListComponents/RoomListSpace.razor')
-rw-r--r-- | MatrixUtils.Web/Shared/RoomListComponents/RoomListSpace.razor | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/MatrixUtils.Web/Shared/RoomListComponents/RoomListSpace.razor b/MatrixUtils.Web/Shared/RoomListComponents/RoomListSpace.razor new file mode 100644 index 0000000..895d642 --- /dev/null +++ b/MatrixUtils.Web/Shared/RoomListComponents/RoomListSpace.razor @@ -0,0 +1,60 @@ +@using System.Collections.ObjectModel +@using MatrixUtils.Abstractions +<MatrixUtils.Web.Shared.SimpleComponents.LinkButton href="@($"/Rooms/{Space.Room.RoomId}/Space")">Manage space</MatrixUtils.Web.Shared.SimpleComponents.LinkButton> + +<br/> +<details @ontoggle="SpaceChildrenOpened"> + <summary>@Children.Count children</summary> + @if (_shouldRenderChildren) { + <p>Breadcrumb: @Breadcrumbs</p> + <div style="margin-left: 8px;"> + <RoomList Rooms="Children"></RoomList> + </div> + } +</details> + +@code { + + [Parameter] + public RoomInfo Space { get; set; } + + [Parameter, CascadingParameter] + public List<RoomInfo> KnownRooms { get; set; } = new(); + + [Parameter, CascadingParameter] + public string? Breadcrumbs { + get => _breadcrumbs + Space.Room.RoomId; + set => _breadcrumbs = value; + } + + private ObservableCollection<RoomInfo> Children { get; set; } = new(); + + protected override async Task OnInitializedAsync() { + if (Breadcrumbs == null) throw new ArgumentNullException(nameof(Breadcrumbs)); + await Task.Delay(Random.Shared.Next(1000, 10000)); + var rooms = Space.Room.AsSpace.GetChildrenAsync(); + await foreach (var room in rooms) { + if (Breadcrumbs.Contains(room.RoomId)) continue; + var roomInfo = KnownRooms.FirstOrDefault(x => x.Room.RoomId == room.RoomId); + if (roomInfo is null) { + roomInfo = new RoomInfo() { + Room = room + }; + KnownRooms.Add(roomInfo); + } + Children.Add(roomInfo); + } + await base.OnInitializedAsync(); + } + + private bool _shouldRenderChildren = false; + private string? _breadcrumbs; + + private Task SpaceChildrenOpened() { + if (_shouldRenderChildren) return Task.CompletedTask; + _shouldRenderChildren = true; + Console.WriteLine($"[RoomList] Rendering children of {Space.Room.RoomId}"); + return Task.CompletedTask; + } + +} |