using Netina.Domain.Entities.Blogs; namespace Netina.AdminPanel.PWA.Dialogs; public class BlogActionDialogBoxViewModel : BaseViewModel { private readonly ISnackbar _snackbar; private readonly IRestWrapper _restWrapper; private readonly IUserUtility _userUtility; private readonly IDialogService _dialogService; private readonly MudDialogInstance _mudDialog; public BlogActionDialogBoxViewModel(ISnackbar snackbar, IRestWrapper restWrapper, IUserUtility userUtility, IDialogService dialogService, MudDialogInstance mudDialog) { _snackbar = snackbar; _restWrapper = restWrapper; _userUtility = userUtility; _dialogService = dialogService; _mudDialog = mudDialog; } public BlogActionDialogBoxViewModel(ISnackbar snackbar, IRestWrapper restWrapper, IUserUtility userUtility, IDialogService dialogService, MudDialogInstance mudDialog, BlogSDto blog) { _snackbar = snackbar; _restWrapper = restWrapper; _userUtility = userUtility; _dialogService = dialogService; _mudDialog = mudDialog; Blog = blog; } private BlogSDto? _blog = null; public BlogSDto? Blog { get => _blog; set { _blog = value; if (_blog != null) { IsEditing = true; } } } public bool IsEditing = false; public string Title { get; set; } = string.Empty; public string Content { get; set; } = string.Empty; public int ReadingTime { get; set; } public string Tags { get; set; } = string.Empty; public string Summery { get; set; } = string.Empty; public bool IsSuggested { get; set; } public readonly ObservableCollection Files = new ObservableCollection(); public override async Task InitializeAsync() { if (IsEditing && _blog != null) { try { IsProcessing = true; var blogLDto = await _restWrapper.CrudDtoApiRest(Address.BlogController).ReadOne(_blog.Id); Title = blogLDto.Title; Content = blogLDto.Content; ReadingTime = blogLDto.ReadingTime; Tags = blogLDto.Tags; Summery = blogLDto.Summery; Tags = blogLDto.Tags; IsSuggested = blogLDto.IsSuggested; blogLDto.Files.ForEach(f => Files.Add(f)); SelectedCategory = new BlogCategorySDto() { Id = blogLDto.CategoryId, Name = blogLDto.CategoryName }; } catch (ApiException ex) { var exe = await ex.GetContentAsAsync(); _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); _mudDialog.Cancel(); } catch (Exception e) { _snackbar.Add(e.Message, Severity.Error); _mudDialog.Cancel(); } finally { IsProcessing = false; } }; } public void Cancel() => _mudDialog.Cancel(); public async Task SubmitEditAsync() { try { IsProcessing = true; if (Blog == null || Blog.Id == default) throw new Exception("بلاگ اشتباه است"); if (SelectedCategory == null) throw new Exception("لطفا یک دسته بندی انتخاب کنید"); var token = await _userUtility.GetBearerTokenAsync(); if (token == null) throw new Exception("Token is null"); var request = new BlogLDto { Id = Blog.Id, Title = Title, CategoryId = SelectedCategory.Id, Content = Content, Files = this.Files.ToList(), IsSuggested = IsSuggested, ReadingTime = ReadingTime, Summery = Summery, Tags = Tags }; await _restWrapper.CrudApiRest(Address.BlogController).Update(request, token); _snackbar.Add($"ویرایش بلاگ {Title} با موفقیت انجام شد", Severity.Success); _mudDialog.Close(); } catch (ApiException ex) { var exe = await ex.GetContentAsAsync(); _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); _mudDialog.Cancel(); } catch (Exception e) { _snackbar.Add(e.Message, Severity.Error); _mudDialog.Cancel(); } finally { IsProcessing = false; } } public async Task SubmitCreateAsync() { try { IsProcessing = true; if (SelectedCategory == null) throw new Exception("لطفا یک دسته بندی انتخاب کنید"); var token = await _userUtility.GetBearerTokenAsync(); var request = new BlogLDto { Title = Title, CategoryId = SelectedCategory.Id, Content = Content, Files = this.Files.ToList(), IsSuggested = IsSuggested, ReadingTime = ReadingTime, Summery = Summery, Tags = Tags }; await _restWrapper.CrudApiRest(Address.BlogController).Create(request, token); _snackbar.Add($"ساخت بلاگ {Title} با موفقیت انجام شد", Severity.Success); _mudDialog.Close(); } catch (ApiException ex) { var exe = await ex.GetContentAsAsync(); _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); _mudDialog.Cancel(); } catch (Exception e) { _snackbar.Add(e.Message, Severity.Error); _mudDialog.Cancel(); } finally { IsProcessing = false; } } private List _blogCategories = new List(); public BlogCategorySDto? SelectedCategory; public async Task> SearchBlogCategory(string category) { try { if (category.IsNullOrEmpty()) _blogCategories = await _restWrapper.BlogCategoryRestApi.ReadAll(0); else _blogCategories = await _restWrapper.BlogCategoryRestApi.ReadAll(category); return _blogCategories; } catch (ApiException ex) { var exe = await ex.GetContentAsAsync(); _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); return _blogCategories; } catch (Exception e) { _snackbar.Add(e.Message, Severity.Error); return _blogCategories; } } public async Task SelectFileAsync() { DialogOptions maxWidth = new DialogOptions() { MaxWidth = MaxWidth.Medium, FullWidth = true, DisableBackdropClick = true }; var dialog = await _dialogService.ShowAsync("انتخاب عکس", maxWidth); var result = await dialog.Result; var file = result.Data; if (file is StorageFileSDto storageFile) Files.Add(storageFile); } public void RemoveFile(StorageFileSDto file) { Files.Remove(file); } }