@page "/borrowings" @using LibraryManagement.Shared.Models @using BlazorWebAssembly.Services @inject LibraryApiClient ApiClient @inject NavigationManager Navigation @inject IJSRuntime JS

My Loans

Keep track of your reading journey and manage your active borrowings.

@if (_isLoading) {
@for (int i = 0; i < 3; i++) {
}
} else if (!_borrowings.Any()) {

No active loans

You haven't borrowed any books yet. Explore our collection to get started.

Go to Catalog
} else {
@foreach (var loan in _borrowings) {

@loan.BookTitle

ID: @loan.BookId

@(loan.Status == "PendingReturn" ? "Pending" : loan.Status) @if (loan.Status == "Borrowed") { }
}
}
@code { private bool _isLoading = true; private List _borrowings = new(); protected override async Task OnInitializedAsync() { await LoadData(); } private async Task LoadData() { _isLoading = true; try { _borrowings = (await ApiClient.GetMyBorrowingsAsync()).ToList(); } catch { } finally { _isLoading = false; } } private async Task ReturnRequestAsync(BorrowingDto loan) { bool confirmed = await JS.InvokeAsync("confirm", $"Request return for \"{loan.BookTitle}\"? It will be marked as pending until approved by a librarian."); if (!confirmed) return; var success = await ApiClient.RequestReturnAsync(loan.Id); if (success) { await JS.InvokeVoidAsync("alert", "Return request submitted successfully!"); await LoadData(); } else { await JS.InvokeVoidAsync("alert", "Failed to submit return request."); } } private string GetStatusColor(string status) => status switch { "Borrowed" => "bg-blue-500/10 text-blue-500", "Returned" => "bg-green-500/10 text-green-500", "PendingReturn" => "bg-orange-500/10 text-orange-500", _ => "bg-body text-muted" }; }