@page "/sysadmin/blogs" @using TIAMWebApp.Shared.Application.Models @using TIAMWebApp.Shared.Application.Services @using TIAMSharedUI.Shared @layout AdminLayout @inject BlogService BlogService

Manage Blog Posts

@if (IsEditMode) { }
@if (SaveSuccess) {
Post saved successfully!
}

Existing Posts

@if (Posts.Count == 0) {

No blog posts found.

} else { @foreach (var item in Posts) { }
Title Tags Actions
@item.Title @string.Join(", ", item.Tags)
}
@code { private BlogPostMetadata Post = new(); private List Posts = new(); private IBrowserFile? CoverImage; private string TagsCsv = ""; private bool IsSaving = false; private bool SaveSuccess = false; private bool IsEditMode = false; protected override async Task OnInitializedAsync() { await LoadPosts(); } private async Task LoadPosts() { Posts = await BlogService.GetAllPostsAsync(); } private async Task HandleFileSelected(InputFileChangeEventArgs e) { CoverImage = e.File; } private async Task SavePost() { IsSaving = true; SaveSuccess = false; Post.Tags = TagsCsv.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries).ToList(); if (IsEditMode) { await BlogService.UpdatePostAsync(Post, CoverImage); } else { await BlogService.CreatePostAsync(Post, CoverImage); } IsSaving = false; SaveSuccess = true; await LoadPosts(); ResetForm(); } private void EditPost(BlogPostMetadata post) { Post = new BlogPostMetadata { Id = post.Id, Title = post.Title, Lead = post.Lead, DriveLink = post.DriveLink, Tags = new List(post.Tags), CoverImage = post.CoverImage }; TagsCsv = string.Join(", ", post.Tags); IsEditMode = true; SaveSuccess = false; } private async Task DeletePost(string id) { if (await ConfirmDeleteAsync()) { await BlogService.DeletePostAsync(id); await LoadPosts(); } } private async Task ConfirmDeleteAsync() { return await Task.FromResult(true); // Replace with real confirmation popup later } private void CancelEdit() { ResetForm(); } private void ResetForm() { Post = new BlogPostMetadata(); TagsCsv = ""; CoverImage = null; IsEditMode = false; } }