@page "/"
@using Microsoft.AspNetCore.Components.Authorization
@inject IRepositoryService RepositoryService
<PageTitle>All Repositories - Forge</PageTitle>
<h1 style="margin-bottom: 1.5rem;">Repositories</h1>
@if (repositories == null)
{
<p>Loading...</p>
}
else if (!repositories.Any())
{
<div class="card">
<p style="text-align: center; color: #8b949e;">No repositories yet.</p>
<div style="text-align: center; margin-top: 1rem;">
<a href="/repos/new" class="btn-primary">Create your first repository</a>
</div>
</div>
}
else
{
@foreach (var repo in repositories)
{
<div class="card" style="margin-bottom: 0.5rem; padding: 1rem;">
<div style="display: flex; justify-content: space-between; align-items: flex-start;">
<div>
<a href="/@repo.Owner/@repo.Name" style="font-weight: 600; font-size: 1.1rem;">
@repo.Owner/@repo.Name
</a>
@if (repo.IsPrivate)
{
<span class="badge">Private</span>
}
@if (!string.IsNullOrEmpty(repo.Description))
{
<p style="margin: 0.25rem 0 0 0; color: #8b949e;">@repo.Description</p>
}
</div>
<div style="color: #8b949e; font-size: 0.875rem;">
Updated @repo.UpdatedAt.ToString("yyyy-MM-dd")
</div>
</div>
</div>
}
}
@code {
[CascadingParameter] private Task<AuthenticationState>? AuthenticationStateTask { get; set; }
private IEnumerable<Repository>? repositories;
protected override async Task OnInitializedAsync()
{
var allRepositories = await RepositoryService.GetAllAsync();
var isAuthenticated = false;
if (AuthenticationStateTask != null)
{
var authState = await AuthenticationStateTask;
isAuthenticated = authState.User.Identity?.IsAuthenticated == true;
}
repositories = isAuthenticated
? allRepositories
: allRepositories.Where(r => !r.IsPrivate);
}
}