about summary refs log tree commit diff
path: root/BugMine.Web/Components/ScopedContainers/IssueContainer.razor
blob: dac3e973c1da0a04e9549abd89c4a1ea48228a03 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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
    }

}