108 lines
3.2 KiB
C#
108 lines
3.2 KiB
C#
using System.Diagnostics;
|
|
using CORP_MAUI.Models;
|
|
using CORP_MAUI.ViewModels;
|
|
|
|
namespace CORP_MAUI.Pages;
|
|
|
|
public partial class PostDetailsPage : ContentPage
|
|
{
|
|
private readonly PostDetailsViewModel _viewModel;
|
|
|
|
public PostDetailsPage(PostViewModel postViewModel)
|
|
{
|
|
InitializeComponent();
|
|
_viewModel = new PostDetailsViewModel(postViewModel);
|
|
BindingContext = _viewModel;
|
|
|
|
// Предзагружаем аватар автора поста
|
|
_ = PreloadPostAuthorAvatarAsync();
|
|
}
|
|
|
|
protected override async void OnAppearing()
|
|
{
|
|
base.OnAppearing();
|
|
if (_viewModel.Comments.Count == 0)
|
|
{
|
|
await LoadCommentsAsync();
|
|
}
|
|
}
|
|
|
|
private async Task LoadCommentsAsync()
|
|
{
|
|
_viewModel.IsLoadingComments = true;
|
|
try
|
|
{
|
|
PaginatedResponse<Comment> response = await ServiceProvider.ApiService.GetCommentsPaginatedAsync(postId: _viewModel.PostViewModel.Post.Id);
|
|
|
|
_viewModel.Comments.Clear();
|
|
if (response.Results != null)
|
|
{
|
|
foreach (Comment comment in response.Results)
|
|
{
|
|
_viewModel.Comments.Add(comment);
|
|
}
|
|
|
|
// Предзагружаем аватары авторов комментариев
|
|
_ = PreloadCommentAuthorsAvatarsAsync();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Trace.WriteLine($"[PostDetailsPage] Error loading comments: {ex.Message}");
|
|
}
|
|
finally
|
|
{
|
|
_viewModel.IsLoadingComments = false;
|
|
}
|
|
}
|
|
|
|
private async Task PreloadPostAuthorAvatarAsync()
|
|
{
|
|
try
|
|
{
|
|
var author = _viewModel.PostViewModel.Post.Author;
|
|
if (author != null)
|
|
{
|
|
await ServiceProvider.ApiService.LoadUserAvatarAsync(author);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Trace.WriteLine($"[PostDetailsPage] Ошибка предзагрузки аватара автора: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
private async Task PreloadCommentAuthorsAvatarsAsync()
|
|
{
|
|
try
|
|
{
|
|
var authors = _viewModel.Comments
|
|
.Where(c => c.Author != null)
|
|
.Select(c => c.Author!)
|
|
.Distinct()
|
|
.ToList();
|
|
|
|
if (authors.Count > 0)
|
|
{
|
|
await ServiceProvider.ApiService.PreloadUserAvatarsAsync(authors);
|
|
|
|
// Обновляем UI - переустанавливаем ItemsSource
|
|
await MainThread.InvokeOnMainThreadAsync(() =>
|
|
{
|
|
CommentsCollectionView.ItemsSource = null;
|
|
CommentsCollectionView.ItemsSource = _viewModel.Comments;
|
|
});
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Trace.WriteLine($"[PostDetailsPage] Ошибка предзагрузки аватаров комментаторов: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
private async void OnCloseClicked(object sender, EventArgs e)
|
|
{
|
|
await Navigation.PopAsync();
|
|
}
|
|
}
|