diff options
Diffstat (limited to 'BugMine.Web/Components/ScopedContainers/IssueContainer.razor')
-rw-r--r-- | BugMine.Web/Components/ScopedContainers/IssueContainer.razor | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/BugMine.Web/Components/ScopedContainers/IssueContainer.razor b/BugMine.Web/Components/ScopedContainers/IssueContainer.razor new file mode 100644 index 0000000..dac3e97 --- /dev/null +++ b/BugMine.Web/Components/ScopedContainers/IssueContainer.razor @@ -0,0 +1,101 @@ +@using System.Text.Json.Serialization +@using ArcaneLibs.Extensions +@using BugMine.Web.Classes.Exceptions +@using LibMatrix +@inject ILogger<ProjectContainer> Logger + +@if (Constants.Debug) { + <details> + <summary>IssueContainer Debug info - Debug build, here be dragons!</summary> + <p>IssueContainer debug info:</p> + @* <pre>Slug: @ProjectSlug</pre> *@ + @* <pre>Progress: @Progress.ToString()</pre> *@ + @* @if (ProjectContext is null) { *@ + @* <pre>ProjectContext is null!</pre> *@ + @* } *@ + @* else { *@ + @* <details> *@ + @* <summary>Context json dump</summary> *@ + @* <pre>@ProjectContext.ToJson()</pre> *@ + @* </details> *@ + @* @if (ProjectContext?.Project?.Room is not null) { *@ + @* <LinkButton OnClick="@ProjectContext.Project.Room.PermanentlyBrickRoomAsync">Dispose room</LinkButton> *@ + @* } *@ + @* } *@ + </details> + + <hr/> +} +@if (ProjectContext?.Client is null) { + <p>Authenticating</p> +} +else { + <CascadingValue Value="ProjectContext"> + @ChildContent + </CascadingValue> +} + +@code { + private Status? _progress = Status.Loading; + + [Parameter] + public string IssueId { get; set; } = null!; + + [Parameter, CascadingParameter] + public ProjectContainer.ProjectContainerContext? ProjectContext { get; set; } + + [Parameter] + public IssueContainerContext? IssueContext { get; set; } + + [Parameter] + public RenderFragment ChildContent { get; set; } + + [Parameter] + public Func<Task>? Loaded { get; set; } + + private Status? Progress { + get => _progress; + set { + _progress = value; + StateHasChanged(); + } + } + + protected override async Task OnInitializedAsync() { + if (ProjectContext is null) { + Logger.LogError("ProjectContext is null"); + ProjectContext = new(); + } + + if (ProjectContext.Project != null) { + Logger.LogWarning("ProjectContext.Project is not null"); + } + + ProjectContext.Client ??= await BugMineStorage.GetCurrentSessionOrNavigate(); + if (ProjectContext.Client == null) { + return; + } + + Progress = Status.Loading; + + + Progress = Status.Done; + if (Loaded != null) { + await Loaded.Invoke(); + } + + StateHasChanged(); + } + + public class IssueContainerContext { + public ProjectContainer.ProjectContainerContext ProjectContext { get; set; } + } + + private enum Status { + Loading, + NotInRoom, + RoomNotFound, + Done + } + +} \ No newline at end of file |