You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.7 KiB
136 lines
3.7 KiB
using System;
|
|
using System.Collections.ObjectModel;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
using Model;
|
|
|
|
namespace ViewModels
|
|
{
|
|
[ObservableObject]
|
|
public partial class SkinsMgrVM
|
|
{
|
|
internal IDataManager DataMgr { get; set; }
|
|
|
|
[ObservableProperty]
|
|
private ChampionVM champion;
|
|
|
|
public SkinsMgrVM(IDataManager dataManager)
|
|
{
|
|
DataMgr = dataManager;
|
|
}
|
|
|
|
[ObservableProperty]
|
|
[NotifyCanExecuteChangedFor(nameof(NextPageCommand))]
|
|
[NotifyCanExecuteChangedFor(nameof(PreviousPageCommand))]
|
|
private int index = 0;
|
|
|
|
[ObservableProperty]
|
|
[NotifyPropertyChangedFor(nameof(NbPages))]
|
|
[NotifyCanExecuteChangedFor(nameof(NextPageCommand))]
|
|
[NotifyCanExecuteChangedFor(nameof(PreviousPageCommand))]
|
|
private int count = 5;
|
|
|
|
public int NbPages
|
|
{
|
|
get
|
|
{
|
|
if(Count == 0 || NbSkins == 0)
|
|
{
|
|
return 0;
|
|
}
|
|
return (NbSkins-1) / Count + 1;
|
|
}
|
|
}
|
|
|
|
[ObservableProperty]
|
|
[NotifyPropertyChangedFor(nameof(NbPages))]
|
|
[NotifyCanExecuteChangedFor(nameof(NextPageCommand))]
|
|
[NotifyCanExecuteChangedFor(nameof(PreviousPageCommand))]
|
|
private int nbSkins = 0;
|
|
|
|
[ObservableProperty]
|
|
private ObservableCollection<SkinVM> skins = new ObservableCollection<SkinVM>();
|
|
|
|
[RelayCommand]
|
|
async Task LoadSkins()
|
|
{
|
|
Skins.Clear();
|
|
IEnumerable<Skin?> skins;
|
|
if(Champion != null)
|
|
{
|
|
skins = await DataMgr.SkinsMgr.GetItemsByChampion(Champion.Model, Index, Count,"Name");
|
|
|
|
}
|
|
else
|
|
{
|
|
skins = await DataMgr.SkinsMgr.GetItems(Index, Count, "Name");
|
|
}
|
|
|
|
foreach(var skin in skins)
|
|
{
|
|
if(skin != null)
|
|
Skins.Add(new SkinVM(skin));
|
|
}
|
|
}
|
|
|
|
[RelayCommand(CanExecute =nameof(CanPreviousPage))]
|
|
async Task PreviousPage()
|
|
{
|
|
if(Index > 0)
|
|
{
|
|
Index--;
|
|
await LoadSkins();
|
|
}
|
|
}
|
|
bool CanPreviousPage() => Index > 0;
|
|
|
|
[RelayCommand(CanExecute =nameof(CanNextPage))]
|
|
async Task NextPage()
|
|
{
|
|
if(Index < NbPages-1)
|
|
{
|
|
Index++;
|
|
await LoadSkins();
|
|
}
|
|
}
|
|
bool CanNextPage() => Index < NbPages-1;
|
|
|
|
[RelayCommand(CanExecute =nameof(CanDeleteSkin))]
|
|
public async Task<bool> DeleteSkin(object skinVM)
|
|
{
|
|
SkinVM svm = skinVM as SkinVM;
|
|
if(svm == null || !Skins.Contains(svm)) return false;
|
|
bool result = await DataMgr.SkinsMgr.DeleteItem(svm.Model);
|
|
if(result)
|
|
{
|
|
Skins.Remove(svm);
|
|
await LoadSkins();
|
|
}
|
|
return result;
|
|
}
|
|
bool CanDeleteSkin(object svm)
|
|
=> svm!= null && svm is SkinVM && Skins.Contains(svm);
|
|
|
|
public async Task AddSkin(SkinVM skinVM)
|
|
{
|
|
var added = await DataMgr.SkinsMgr.AddItem(skinVM.Model);
|
|
if(added != null)
|
|
{
|
|
Skins.Add(skinVM);
|
|
await LoadSkins();
|
|
}
|
|
}
|
|
|
|
public async Task EditSkin(SkinVM oldSkin, SkinVM newSkin)
|
|
{
|
|
var edited = await DataMgr.SkinsMgr.UpdateItem(oldSkin.Model, newSkin.Model);
|
|
oldSkin.Model = newSkin.Model;
|
|
if(edited != null)
|
|
{
|
|
await LoadSkins();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|