@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
{
| Title |
Tags |
Actions |
@foreach (var item in Posts)
{
 |
@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;
}
}