diff --git a/AideDeJeu/AideDeJeu/AideDeJeu.csproj b/AideDeJeu/AideDeJeu/AideDeJeu.csproj index 3452c7fb..768084dd 100644 --- a/AideDeJeu/AideDeJeu/AideDeJeu.csproj +++ b/AideDeJeu/AideDeJeu/AideDeJeu.csproj @@ -20,6 +20,9 @@ Code + + SpellDetailPage.xaml + Code diff --git a/AideDeJeu/AideDeJeu/App.xaml b/AideDeJeu/AideDeJeu/App.xaml index df27c6c9..d28f31cd 100644 --- a/AideDeJeu/AideDeJeu/App.xaml +++ b/AideDeJeu/AideDeJeu/App.xaml @@ -23,6 +23,8 @@ #58180D #C9AD6A #9C2B1B + #000000 + #E0E5C1 @@ -68,11 +70,17 @@ + + - + @@ -81,6 +89,18 @@ + + + + + + + + + + + + @@ -88,23 +108,43 @@ - - + + + + + + + diff --git a/AideDeJeu/AideDeJeu/Services/MockDataStore.cs b/AideDeJeu/AideDeJeu/Services/MockDataStore.cs index de6e65c8..b9e35f12 100644 --- a/AideDeJeu/AideDeJeu/Services/MockDataStore.cs +++ b/AideDeJeu/AideDeJeu/Services/MockDataStore.cs @@ -65,7 +65,7 @@ namespace AideDeJeu.Services { var scrapper = new Scrappers(); var spells = await scrapper.GetSpells(await scrapper.GetSpellIds("c")); - items = spells.Select(spell => new Item() { Text = spell.Title, Description = spell.DescriptionText }).ToList(); + items = spells.Select(spell => new Item() { Text = spell.Title, Description = spell.Description }).ToList(); return await Task.FromResult(items); } } diff --git a/AideDeJeu/AideDeJeu/Services/SpellDataStore.cs b/AideDeJeu/AideDeJeu/Services/SpellDataStore.cs new file mode 100644 index 00000000..287824ed --- /dev/null +++ b/AideDeJeu/AideDeJeu/Services/SpellDataStore.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +using AideDeJeu.Models; +using AideDeJeuLib; + +[assembly: Xamarin.Forms.Dependency(typeof(AideDeJeu.Services.SpellDataStore))] +namespace AideDeJeu.Services +{ + public class SpellDataStore : IDataStore + { + List items; + + public SpellDataStore() + { + items = new List(); + var mockItems = new List + { + }; + + foreach (var item in mockItems) + { + items.Add(item); + } + } + + public async Task AddItemAsync(Spell item) + { + items.Add(item); + + return await Task.FromResult(true); + } + + public async Task UpdateItemAsync(Spell item) + { + var _item = items.Where((Spell arg) => arg.Id == item.Id).FirstOrDefault(); + items.Remove(_item); + items.Add(item); + + return await Task.FromResult(true); + } + + public async Task DeleteItemAsync(Spell item) + { + var _item = items.Where((Spell arg) => arg.Id == item.Id).FirstOrDefault(); + items.Remove(_item); + + return await Task.FromResult(true); + } + + public async Task GetItemAsync(string id) + { + return await Task.FromResult(items.FirstOrDefault(s => s.Id == id)); + } + + public async Task> GetItemsAsync(bool forceRefresh = false) + { + var scrapper = new Scrappers(); + items = (await scrapper.GetSpells(await scrapper.GetSpellIds(""))).ToList(); + + //items = spells.Select(spell => new Item() { Text = spell.Title, Description = spell.DescriptionText }).ToList(); + return await Task.FromResult(items); + } + } +} \ No newline at end of file diff --git a/AideDeJeu/AideDeJeu/ViewModels/BaseViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/BaseViewModel.cs index c58832a2..53e76a48 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/BaseViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/BaseViewModel.cs @@ -7,12 +7,14 @@ using Xamarin.Forms; using AideDeJeu.Models; using AideDeJeu.Services; +using AideDeJeuLib; namespace AideDeJeu.ViewModels { public class BaseViewModel : INotifyPropertyChanged { public IDataStore DataStore => DependencyService.Get>() ?? new MockDataStore(); + public IDataStore SpellDataStore => DependencyService.Get>() ?? new SpellDataStore(); bool isBusy = false; public bool IsBusy diff --git a/AideDeJeu/AideDeJeu/ViewModels/SpellDetailViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/SpellDetailViewModel.cs new file mode 100644 index 00000000..0aea80d7 --- /dev/null +++ b/AideDeJeu/AideDeJeu/ViewModels/SpellDetailViewModel.cs @@ -0,0 +1,17 @@ +using System; + +using AideDeJeu.Models; +using AideDeJeuLib; + +namespace AideDeJeu.ViewModels +{ + public class SpellDetailViewModel : BaseViewModel + { + public Spell Item { get; set; } + public SpellDetailViewModel(Spell item = null) + { + Title = item?.Title; + Item = item; + } + } +} diff --git a/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs new file mode 100644 index 00000000..0f8016bf --- /dev/null +++ b/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.ObjectModel; +using System.Diagnostics; +using System.Threading.Tasks; + +using Xamarin.Forms; + +using AideDeJeu.Models; +using AideDeJeu.Views; +using AideDeJeuLib; + +namespace AideDeJeu.ViewModels +{ + public class SpellsViewModel : BaseViewModel + { + public ObservableCollection Items { get; set; } + public Command LoadItemsCommand { get; set; } + + public SpellsViewModel() + { + Title = "Browse"; + Items = new ObservableCollection(); + LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommand()); + + //MessagingCenter.Subscribe(this, "AddItem", async (obj, item) => + //{ + // var _item = item as Item; + // Items.Add(_item); + // await DataStore.AddItemAsync(_item); + //}); + } + + async Task ExecuteLoadItemsCommand() + { + if (IsBusy) + return; + + IsBusy = true; + + try + { + Items.Clear(); + var items = await SpellDataStore.GetItemsAsync(true); + foreach (var item in items) + { + Items.Add(item); + } + } + catch (Exception ex) + { + Debug.WriteLine(ex); + } + finally + { + IsBusy = false; + } + } + } +} \ No newline at end of file diff --git a/AideDeJeu/AideDeJeu/Views/MainPage.xaml b/AideDeJeu/AideDeJeu/Views/MainPage.xaml index f7549fe8..9c8327e1 100644 --- a/AideDeJeu/AideDeJeu/Views/MainPage.xaml +++ b/AideDeJeu/AideDeJeu/Views/MainPage.xaml @@ -104,9 +104,9 @@ -