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}/");
}
}
|