@namespace MidrandBooks.Components @using Microsoft.AspNetCore.Components @using MidrandBooks.Models
Bestsellers & Monthly Trending
@if (FeaturedBooks != null && FeaturedBooks.Count > 0) { var book = FeaturedBooks[ActiveIndex]; var isEbookOwned = Purchases.Any(p => p.BookId == book.Id && p.Format == "ebook"); var isAudioowned = Purchases.Any(p => p.BookId == book.Id && p.Format == "audiobook"); var ebookInCart = Cart.Any(i => i.Book.Id == book.Id && i.Format == "ebook"); var audioInCart = Cart.Any(i => i.Book.Id == book.Id && i.Format == "audiobook");
@if (!string.IsNullOrEmpty(book.CoverUrl)) { @book.Title } else {
@book.Category @book.Title By @book.Author
}
@book.Category
@if (book.Bestseller) {
Bestseller
}
@for (int i = 0; i < 5; i++) { }
(@book.ReviewsCount reviews)

@book.Title

By @book.Author • Published @book.PublishedYear

@book.Description

@if (isEbookOwned) { } else { } @if (isAudioowned) { } else { }
@for (int idx = 0; idx < FeaturedBooks.Count; idx++) { var i = idx;
}
@code { [Parameter] public List FeaturedBooks { get; set; } = new(); [Parameter] public List Purchases { get; set; } = new(); [Parameter] public List Cart { get; set; } = new(); [Parameter] public EventCallback OnSelectBook { get; set; } [Parameter] public EventCallback OnReadEbook { get; set; } [Parameter] public EventCallback OnStreamAudiobook { get; set; } [Parameter] public EventCallback<(BookModel Book, string Format)> OnAddToCart { get; set; } private int ActiveIndex { get; set; } = 0; private System.Threading.Timer? AutoRotationTimer { get; set; } protected override void OnInitialized() { AutoRotationTimer = new System.Threading.Timer(_ => { InvokeAsync(() => { if (FeaturedBooks.Count > 0) { ActiveIndex = (ActiveIndex + 1) % FeaturedBooks.Count; StateHasChanged(); } }); }, null, 8000, 8000); } private void HandleNext() { ActiveIndex = (ActiveIndex + 1) % FeaturedBooks.Count; } private void HandlePrev() { ActiveIndex = (ActiveIndex - 1 + FeaturedBooks.Count) % FeaturedBooks.Count; } private void SetActive(int index) { ActiveIndex = index; } private void SelectBook(BookModel book) { OnSelectBook.InvokeAsync(book); } private void ReadEbook(BookModel book) { OnReadEbook.InvokeAsync(book); } private void StreamAudiobook(BookModel book) { OnStreamAudiobook.InvokeAsync(book); } private void AddToCart(BookModel book, string format) { OnAddToCart.InvokeAsync((book, format)); } public void Dispose() { AutoRotationTimer?.Dispose(); } }