@using LinkDotNet.Blog.Domain @using LinkDotNet.Blog.Web.Features.Bookmarks @using LinkDotNet.Blog.Web.Features.Bookmarks.Components @inject IBookmarkService BookmarkService @inject IOptions AppConfiguration
    @if (BlogPost.IsScheduled) {
  • Scheduled
  • } else if (!BlogPost.IsPublished) {
  • Draft
  • }
  • @BlogPost.UpdatedDate.ToShortDateString()
  • @if (BlogPost.Tags.Any()) {
    • @foreach (var tag in BlogPost.Tags) {
    • @tag
    • }
  • }
  • @BlogPost.ReadingTimeInMinutes minute read
  • @if (AppConfiguration.Value.UseMultiAuthorMode && BlogPost.AuthorName is not null) {
  • @BlogPost.AuthorName
  • }

@BlogPost.Title

@MarkdownConverter.ToMarkupString(BlogPost.ShortDescription)

Read the whole article

@code { [Parameter, EditorRequired] public required BlogPost BlogPost { get; set; } private bool isBookmarked = false; [Parameter] public bool UseAlternativeStyle { get; set; } [Parameter] public bool LazyLoadPreviewImage { get; set; } private string AltCssClass => UseAlternativeStyle ? "alt" : string.Empty; private async Task ToggleBookmark() { isBookmarked = !isBookmarked; await BookmarkService.SetBookmark(BlogPost.Id, isBookmarked); StateHasChanged(); } public override Task SetParametersAsync(ParameterView parameters) { foreach (var parameter in parameters) { switch (parameter.Name) { case nameof(BlogPost): BlogPost = (BlogPost)parameter.Value; break; case nameof(UseAlternativeStyle): UseAlternativeStyle = (bool)parameter.Value; break; case nameof(LazyLoadPreviewImage): LazyLoadPreviewImage = (bool)parameter.Value; break; } } return base.SetParametersAsync(ParameterView.Empty); } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { isBookmarked = await BookmarkService.IsBookmarked(BlogPost.Id); StateHasChanged(); } } }