about summary refs log tree commit diff
path: root/BugMine.Web/Pages/Projects/Index.razor
blob: 8f46d02c5e280651305eb2cee870bfe8bbf9d38c (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
@page "/Projects"
@using LibMatrix.Homeservers
<h3>Projects</h3>

@if (Client == null) {
    <p>Authenticating... <SimpleSpinner/></p>
}
else if (Projects is null) {
    <p>Loading projects... <SimpleSpinner/></p>
}
else if (Projects.Count == 0) {
    <p>There are no projects to display.</p>
}
else {
    <div class="projects">
        @foreach (var project in Projects) {
            <div class="card project-card" @onclick="@(()=>Navigate(project))">
                @if (string.IsNullOrWhiteSpace(project.Info.ProjectIcon)) {
                    <img class="project-icon" src="/icon-512.png">
                }
                else {
                    <img class="project-icon" src="/icon-512.png">
                }
                <span class="project-name">@project.Info.Name</span>
            </div>
            @* <p>@project.Info.Name</p> *@
        }
    </div>
}

<p>Did not find the project board you are looking for?</p>
<LinkButton href="/Projects/New">Create new board</LinkButton>

@code {

    private BugMineClient? Client { get; set; }
    private List<BugMineProject>? Projects { get; set; }
    private CancellationTokenSource? _cts = new();

    protected override async Task OnInitializedAsync() {
        Client = await BugMineStorage.GetCurrentSessionOrNavigate();
        if (Client == null) {
            return;
        }
        StateHasChanged();

        int count = 0;
        SemaphoreSlim semaphore = new(16, 16);
        await foreach (var project in Client.GetProjects(semaphore)) {
            Projects ??= [];
            Projects.Add(project);
            if(count++ <= 250 || count % 4 == 0)
                StateHasChanged();
        }

        Projects ??= [];
        StateHasChanged();
    }

    private async Task Navigate(BugMineProject project) {
        Console.WriteLine($"Navigating to {project.ProjectSlug}");
        NavigationManager.NavigateTo($"/Projects/{project.ProjectSlug}/");
    }

}