AdminPanel/Netina.AdminPanel.PWA/Pages/Personalization/PersonalizationPage.razor.cs

167 lines
6.0 KiB
C#

using System.Net.Http.Json;
namespace Netina.AdminPanel.PWA.Pages.Personalization;
public class PersonalizationPageViewModel(IDialogService dialogService, IRestWrapper restWrapper,
ISnackbar snackbar, NavigationManager navigationManager, IUserUtility userUtility)
: BaseViewModel<PersonalizationSetting>(userUtility: userUtility)
{
public override async Task InitializeAsync()
{
try
{
var token = await userUtility.GetBearerTokenAsync();
if (token == null)
throw new Exception("Token is null");
var personalizationSetting = await restWrapper.SettingRestApi.GetSettingAsync<PersonalizationSetting>(nameof(PersonalizationSetting), token);
personalizationSetting.Catalog = personalizationSetting.Catalog.OrderBy(c => c.Row).ToList();
PageDto = personalizationSetting;
}
catch (ApiException ex)
{
var exe = await ex.GetContentAsAsync<ApiResult>();
if (ex.StatusCode == HttpStatusCode.Unauthorized)
{
await userUtility.LogoutAsync();
navigationManager.NavigateTo("login", true, true);
}
snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error);
}
catch (Exception e)
{
snackbar.Add(e.Message, Severity.Error);
}
await base.InitializeAsync();
}
public async Task SubmitSettingAsync()
{
try
{
var token = await userUtility.GetBearerTokenAsync();
if (token == null)
throw new Exception("Token is null");
await restWrapper.SettingRestApi.PostSettingAsync(nameof(PersonalizationSetting), PageDto, token);
snackbar.Add("تنظیمات شخصی سازی با موفقیت تغییر یافت", Severity.Success);
}
catch (ApiException ex)
{
var exe = await ex.GetContentAsAsync<ApiResult>();
if (ex.StatusCode == HttpStatusCode.Unauthorized)
{
await userUtility.LogoutAsync();
navigationManager.NavigateTo("login", true, true);
}
snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error);
}
catch (Exception e)
{
snackbar.Add(e.Message, Severity.Error);
}
}
public BannerItemModel NewBanner { get; set; } = new();
public CatalogItemModel NewCatalogItem { get; set; } = new();
public void AddBanner()
{
try
{
if (NewBanner.ImageLocation.IsNullOrEmpty())
throw new Exception("تصویر بنر انتخاب نشده است");
if (NewBanner.Title.IsNullOrEmpty())
throw new Exception("عنوان بنر انتخاب نشده است");
PageDto.Banners.Add(NewBanner);
NewBanner = new BannerItemModel();
}
catch (Exception e)
{
snackbar.Add(e.Message, Severity.Error);
}
}
public async Task SelectFileAsync()
{
DialogOptions maxWidth = new DialogOptions() { MaxWidth = MaxWidth.Large, FullWidth = true, DisableBackdropClick = true };
var dialog = await dialogService.ShowAsync<StorageDialogBox>("انتخاب عکس", maxWidth);
var result = await dialog.Result;
var file = result.Data;
if (file is StorageFileSDto storageFile)
{
NewBanner.ImageLocation = storageFile.FileLocation;
}
}
public CatalogItemModel? SelectedCatalog { get; set; }
public async Task<IEnumerable<CatalogItemModel>> SearchCatalog(string catelogName)
{
try
{
if (catelogName.IsNullOrEmpty())
return PageDto.Catalog;
return PageDto.Catalog.Where(f => f.PersianName.Contains(catelogName));
}
catch (ApiException ex)
{
var exe = await ex.GetContentAsAsync<ApiResult>();
snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error);
return new List<CatalogItemModel>();
}
catch (Exception e)
{
snackbar.Add(e.Message, Severity.Error);
return new List<CatalogItemModel>();
}
}
public string CatalogImage { get; set; } = string.Empty;
public async Task SelectCatalogFileAsync()
{
DialogOptions maxWidth = new DialogOptions() { MaxWidth = MaxWidth.Large, FullWidth = true, DisableBackdropClick = true };
var dialog = await dialogService.ShowAsync<StorageDialogBox>("انتخاب عکس", maxWidth);
var result = await dialog.Result;
var file = result.Data;
if (file is StorageFileSDto storageFile)
{
CatalogImage = storageFile.FileLocation;
}
}
public void AddCatalogItem()
{
try
{
if (NewCatalogItem.EnglishName.IsNullOrEmpty())
throw new Exception("نام انگلیسی را وارد کنید");
if (NewCatalogItem.PersianName.IsNullOrEmpty())
throw new Exception("نام فارسی ایتم کاتالوگ را وارد کنید");
if (NewCatalogItem.Query.IsNullOrEmpty())
throw new Exception("کوئری ایتم کاتالوگ را وارد کنید");
if (SelectedCatalog != null)
{
NewCatalogItem.ParentId = SelectedCatalog.Id;
NewCatalogItem.ParentName = SelectedCatalog.PersianName;
}
else
NewCatalogItem.IsMain = true;
if (!CatalogImage.IsNullOrEmpty())
NewCatalogItem.ImageLocation = CatalogImage;
CatalogImage = string.Empty;
NewCatalogItem.Id = Guid.NewGuid();
PageDto.Catalog.Add(NewCatalogItem);
PageDto.Catalog = PageDto.Catalog.OrderBy(c => c.Row).ToList();
NewCatalogItem = new CatalogItemModel();
}
catch (Exception e)
{
snackbar.Add(e.Message, Severity.Error);
}
}
}