diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs index 85743a571..551e94c96 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs @@ -4,6 +4,6 @@ { public const string RegisterWebsite = "http://104.40.62.65/Account/Register"; - public const string CatalogEndpoint = "http://104.40.62.65:5101/api/v1/catalog"; + public const string CatalogEndpoint = "http://104.40.62.65:5101/"; } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Catalog/CatalogRoot.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Catalog/CatalogRoot.cs new file mode 100644 index 000000000..eef40f88b --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Catalog/CatalogRoot.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace eShopOnContainers.Core.Models.Catalog +{ + public class CatalogRoot + { + public int PageIndex { get; set; } + public int PageSize { get; set; } + public int Count { get; set; } + public List Data { get; set; } + } +} diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs index 03cc0bb4c..a629cdb58 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs @@ -3,7 +3,6 @@ using System.Collections.ObjectModel; using System.Threading.Tasks; using eShopOnContainers.Core.Models.Catalog; using eShopOnContainers.Core.Services.RequestProvider; -using System.Collections.Generic; using eShopOnContainers.Core.Extensions; namespace eShopOnContainers.Core.Services.Catalog @@ -12,6 +11,18 @@ namespace eShopOnContainers.Core.Services.Catalog { private readonly IRequestProvider _requestProvider; + private ObservableCollection MockCatalogBrand = new ObservableCollection + { + new CatalogBrand { CatalogBrandId = 1, Name = "Azure" }, + new CatalogBrand { CatalogBrandId = 2, Name = "Visual Studio" } + }; + + private ObservableCollection MockCatalogType = new ObservableCollection + { + new CatalogType { CatalogTypeId = 1, Name = "Mug" }, + new CatalogType { CatalogTypeId = 2, Name = "T-Shirt" } + }; + public CatalogService(IRequestProvider requestProvider) { _requestProvider = requestProvider; @@ -26,29 +37,35 @@ namespace eShopOnContainers.Core.Services.Catalog { UriBuilder builder = new UriBuilder(GlobalSetting.CatalogEndpoint); - builder.Path = "/items"; + builder.Path = "api/v1/catalog/items"; string uri = builder.ToString(); - IEnumerable catalogItems = - await _requestProvider.GetAsync>(uri); + System.Diagnostics.Debug.WriteLine(uri); + + CatalogRoot catalog = + await _requestProvider.GetAsync(uri); - return catalogItems.ToObservableCollection(); + return catalog?.Data?.ToObservableCollection(); } - public Task> GetCatalogBrandAsync() + public Task GetCatalogItemAsync(string id) { throw new NotImplementedException(); } - public Task GetCatalogItemAsync(string id) + public async Task> GetCatalogBrandAsync() { - throw new NotImplementedException(); + await Task.Delay(500); + + return MockCatalogBrand; } - public Task> GetCatalogTypeAsync() + public async Task> GetCatalogTypeAsync() { - throw new NotImplementedException(); + await Task.Delay(500); + + return MockCatalogType; } } } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs index 06fb1aadb..75a92ad12 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs @@ -34,7 +34,8 @@ namespace eShopOnContainers.Core.Services.RequestProvider await HandleResponse(response); string serialized = await response.Content.ReadAsStringAsync(); - TResult result = await Task.Run(() => JsonConvert.DeserializeObject(serialized, _serializerSettings)); + TResult result = await Task.Run(() => + JsonConvert.DeserializeObject(serialized, _serializerSettings)); return result; } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs index b30ac27a6..46b01ba55 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs @@ -6,11 +6,13 @@ using System; using eShopOnContainers.Core.Services.Catalog; using eShopOnContainers.Core.Services.OpenUrl; using eShopOnContainers.Core.Services.User; +using eShopOnContainers.Core.Services.RequestProvider; namespace eShopOnContainers.ViewModels.Base { public class ViewModelLocator { + private bool _useMockService; private readonly IUnityContainer _unityContainer; private static readonly ViewModelLocator _instance = new ViewModelLocator(); @@ -20,6 +22,12 @@ namespace eShopOnContainers.ViewModels.Base get { return _instance; } } + public bool UseMockService + { + get { return _useMockService; } + set { _useMockService = value; ; } + } + protected ViewModelLocator() { _unityContainer = new UnityContainer(); @@ -28,6 +36,7 @@ namespace eShopOnContainers.ViewModels.Base _unityContainer.RegisterType(); RegisterSingleton(); _unityContainer.RegisterType(); + _unityContainer.RegisterType(); _unityContainer.RegisterType(); _unityContainer.RegisterType(); @@ -44,6 +53,26 @@ namespace eShopOnContainers.ViewModels.Base _unityContainer.RegisterType(); } + public void UpdateServices(bool useMockServices) + { + if (!useMockServices) + { + _unityContainer.RegisterInstance(new CatalogMockService()); + _unityContainer.RegisterInstance(new OrdersMockService()); + _unityContainer.RegisterInstance(new UserMockService()); + + UseMockService = false; + } + else + { + var requestProvider = Resolve(); + _unityContainer.RegisterInstance(new CatalogService(requestProvider)); + + UseMockService = true; + } + } + + public T Resolve() { return _unityContainer.Resolve(); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs index 659a921c8..e1fea8416 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs @@ -1,9 +1,33 @@ using eShopOnContainers.ViewModels.Base; +using System.Windows.Input; +using Xamarin.Forms; namespace eShopOnContainers.Core.ViewModels { public class SettingsViewModel : ViewModelBase { + private bool _useMockServices; + public SettingsViewModel() + { + UseMockServices = ViewModelLocator.Instance.UseMockService; + } + + public bool UseMockServices + { + get { return _useMockServices; } + set + { + _useMockServices = value; + RaisePropertyChanged(() => UseMockServices); + } + } + + public ICommand MockServicesCommand => new Command(MockServices); + + private void MockServices() + { + ViewModelLocator.Instance.UpdateServices(UseMockServices); + } } -} +} \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml index 07940ff25..f1e431a31 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml @@ -77,7 +77,9 @@ - + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj index bca73f49f..c0ff005dd 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj @@ -65,6 +65,7 @@ + @@ -193,8 +194,8 @@ ..\..\packages\modernhttpclient.2.4.2\lib\Portable-Net45+WinRT45+WP8+WPA81\ModernHttpClient.dll True - - ..\..\packages\Newtonsoft.Json.8.0.3\lib\portable-net40+sl5+wp80+win8+wpa81\Newtonsoft.Json.dll + + ..\..\packages\Newtonsoft.Json.9.0.1\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll True diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/packages.config b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/packages.config index f6105022e..74cc37be9 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/packages.config +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/packages.config @@ -6,7 +6,7 @@ - + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/app.config b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/app.config index 056e15e6f..9f0d092be 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/app.config +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/app.config @@ -16,7 +16,7 @@ - + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj index 36e22dc99..ab4f318a0 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj @@ -93,6 +93,7 @@ ..\..\packages\Xamarin.Forms.2.3.2.127\lib\MonoAndroid10\FormsViewGroup.dll True + ..\..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll True @@ -107,8 +108,8 @@ - - ..\..\packages\Newtonsoft.Json.8.0.3\lib\portable-net40+sl5+wp80+win8+wpa81\Newtonsoft.Json.dll + + ..\..\packages\Newtonsoft.Json.9.0.2-beta1\lib\netstandard1.1\Newtonsoft.Json.dll True diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/packages.config b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/packages.config index e3796dd6d..361673552 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/packages.config +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/packages.config @@ -4,11 +4,34 @@ + - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/app.config b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/app.config index 5aab6c784..67aad9568 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/app.config +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/app.config @@ -6,6 +6,14 @@ + + + + + + + + \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/Entitlements.plist b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/Entitlements.plist index 24c310368..0c67376eb 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/Entitlements.plist +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/Entitlements.plist @@ -1,6 +1,5 @@ - - + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/app.config b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/app.config index 34e9089b4..0cfd7f7d6 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/app.config +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/app.config @@ -8,7 +8,7 @@ - + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/app.config b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/app.config new file mode 100644 index 000000000..8460dd432 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj index c21ad9366..dc309254a 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj @@ -58,6 +58,7 @@ + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/App.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/App.xaml index 74b399cba..18dd6df8e 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/App.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/App.xaml @@ -3,12 +3,22 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:eShopOnContainers.UWP" + xmlns:converters="using:eShopOnContainers.Windows.Converters" + xmlns:controls="using:eShopOnContainers.Windows.Controls" RequestedTheme="Light"> + #00A69C + #83D01B + + + + + + + + + + + + + + - + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Controls/TabItem.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Controls/TabItem.xaml index 3b961b46e..125ef87d1 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Controls/TabItem.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Controls/TabItem.xaml @@ -1,4 +1,5 @@  + +