@page "/catalog" @attribute [Authorize] @implements IDisposable @using NexusReader.UI.Shared.Components.Organisms @using NexusReader.Application.DTOs.User @using NexusReader.UI.Shared.Services @using System.Net.Http.Json @inject HttpClient Http @inject IReaderNavigationService ReaderNavigation @inject NavigationManager NavigationManager @inject ILibraryStateService LibraryStateService

Katalog Kursów

Rozwijaj swoje kompetencje techniczne z interaktywnymi kursami zintegrowanymi z asystentem Nexus AI

@if (_isLoading) {
Wczytywanie katalogu...
@for (int i = 0; i < 3; i++) {
}
} else {
@* Render real books first *@ @if (_books != null && _books.Any()) { @foreach (var book in _books) {
@book.Title
Uruchom kurs
E-Book

@book.Title

Autor: @book.Author.Name

@(string.IsNullOrEmpty(book.Description) ? "Rozpocznij naukę i buduj strukturę pojęć w oparciu o autorskie algorytmy ekstrakcji wiedzy Nexus AI." : book.Description)

} } @* Curated Showcase Mock Courses to look extremely premium *@
<.NET 10>
Zarejestruj się
Architektura

.NET 10 & Blazor SaaS Architecture

Autor: Nexus Architect

Zaawansowany kurs budowania skalowalnych SaaS z Native AOT, CQRS, MediatR, FluentResults i izolowanym systemem stylów Blazor CSS.

BLAZOR
Zarejestruj się
Performance

Blazor State & Rendering Masterclass

Autor: Nexus Architect

Techniki optymalizacji renderowania, zarządzanie stanem w aplikacjach rozproszonych oraz głęboka integracja JavaScript Interop.

D3.JS GRAPH
Zarejestruj się
Wizualizacja

D3.js & interactive Knowledge Graphs

Autor: Nexus Architect

Projektowanie interaktywnych grafów pojęć i dynamicznych map myśli 2D/3D zsynchronizowanych z modelem językowym AI.

}
@code { private bool _isLoading = true; private List? _books; protected override void OnInitialized() { LibraryStateService.OnBooksChanged += HandleBooksChanged; } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { await LoadBooksAsync(); } } private void HandleBooksChanged() { _ = InvokeAsync(LoadBooksAsync); } private async Task LoadBooksAsync() { _isLoading = true; StateHasChanged(); try { _books = await Http.GetFromJsonAsync>("api/library/books"); _isLoading = false; } catch (Exception ex) { Console.WriteLine($"[Catalog] Failed to load books: {ex.Message}"); if (OperatingSystem.IsBrowser()) { _isLoading = false; } } finally { StateHasChanged(); } } private void OpenBook(Guid bookId) { ReaderNavigation.NavigateToBook(bookId); } private void ShowPremiumAlert() { // Showcase callback NavigationManager.NavigateTo("/profile"); } public void Dispose() { LibraryStateService.OnBooksChanged -= HandleBooksChanged; } }