Changes in mobile apps:
- Filters - Added Checkout View
This commit is contained in:
		
							parent
							
								
									b9223b34c2
								
							
						
					
					
						commit
						515ba92fd6
					
				| @ -103,6 +103,7 @@ | ||||
|             <converters:ImageConverter x:Key="ImageConverter" /> | ||||
|             <converters:ItemTappedEventArgsConverter x:Key="ItemTappedEventArgsConverter" /> | ||||
|             <converters:InverseCountToBoolConverter x:Key="InverseCountToBoolConverter" /> | ||||
|             <converters:InverseBoolConverter x:Key="InverseBoolConverter" /> | ||||
|             <converters:ToUpperConverter x:Key="ToUpperConverter" /> | ||||
|              | ||||
|             <!-- STYLES --> | ||||
|  | ||||
| @ -101,10 +101,12 @@ namespace eShopOnContainers.Core.Controls | ||||
|         private static void OnSelectedItemChanged(BindableObject bindable, object oldValue, object newValue) | ||||
|         { | ||||
|             var boundPicker = (BindablePicker)bindable; | ||||
| 
 | ||||
|             if (boundPicker.ItemSelected != null) | ||||
|             { | ||||
|                 boundPicker.ItemSelected(boundPicker, new SelectedItemChangedEventArgs(newValue)); | ||||
|             } | ||||
| 
 | ||||
|             boundPicker.InternalUpdateSelectedIndex(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -0,0 +1,24 @@ | ||||
| using System; | ||||
| using System.Globalization; | ||||
| using Xamarin.Forms; | ||||
| 
 | ||||
| namespace eShopOnContainers.Core.Converters | ||||
| { | ||||
|     public class InverseBoolConverter : IValueConverter | ||||
|     { | ||||
|         public object Convert(object value, Type targetType, object parameter, CultureInfo culture) | ||||
|         { | ||||
|             if (!(value is bool)) | ||||
|             { | ||||
|                 throw new InvalidOperationException("The target must be a boolean"); | ||||
|             } | ||||
| 
 | ||||
|             return !(bool)value; | ||||
|         } | ||||
| 
 | ||||
|         public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) | ||||
|         { | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,20 @@ | ||||
| using System.Collections.Generic; | ||||
| using System.Collections.ObjectModel; | ||||
| 
 | ||||
| namespace eShopOnContainers.Core.Extensions | ||||
| { | ||||
|     public static class ObservableExtension | ||||
|     { | ||||
|         public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> source) | ||||
|         { | ||||
|             ObservableCollection<T> collection = new ObservableCollection<T>(); | ||||
| 
 | ||||
|             foreach (T item in source) | ||||
|             { | ||||
|                 collection.Add(item); | ||||
|             } | ||||
| 
 | ||||
|             return collection; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,18 @@ | ||||
| using System.Collections.ObjectModel; | ||||
| 
 | ||||
| namespace eShopOnContainers.Core.Helpers | ||||
| { | ||||
|     public class NumericHelper | ||||
|     { | ||||
|         public static ObservableCollection<int> GetNumericList(int count = 100) | ||||
|         { | ||||
|             var result = new ObservableCollection<int>(); | ||||
|             for (int i = 0; i < count; i++) | ||||
|             { | ||||
|                 result.Add(i); | ||||
|             } | ||||
| 
 | ||||
|             return result; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,13 @@ | ||||
| namespace eShopOnContainers.Core.Models.Catalog | ||||
| { | ||||
|     public class CatalogBrand | ||||
|     { | ||||
|         public int CatalogBrandId { get; set; } | ||||
|         public string Name { get; set; } | ||||
| 
 | ||||
|         public override string ToString() | ||||
|         { | ||||
|             return Name; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -11,6 +11,5 @@ | ||||
|         public string CatalogBrand { get; set; } | ||||
|         public int CatalogTypeId { get; set; } | ||||
|         public string CatalogType { get; set; } | ||||
| 
 | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,13 @@ | ||||
| namespace eShopOnContainers.Core.Models.Catalog | ||||
| { | ||||
|     public class CatalogType | ||||
|     { | ||||
|         public int CatalogTypeId { get; set; } | ||||
|         public string Name { get; set; } | ||||
| 
 | ||||
|         public override string ToString() | ||||
|         { | ||||
|             return Name; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,7 @@ | ||||
| namespace eShopOnContainers.Core.Models.Navigation | ||||
| { | ||||
|     public class TabParameter | ||||
|     { | ||||
|         public int TabIndex { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -6,7 +6,7 @@ namespace eShopOnContainers.Core.Models.Orders | ||||
|     public class Order | ||||
|     { | ||||
|         public int SequenceNumber { get; set; } | ||||
|         public double Total { get; set; } | ||||
|         public decimal Total { get; set; } | ||||
|         public DateTime OrderDate { get; set; } | ||||
|         public OrderStatus Status { get; set; } | ||||
|         public User.User ShippingAddress { get; set; } | ||||
|  | ||||
| @ -1,5 +1,9 @@ | ||||
| using eShopOnContainers.ViewModels.Base; | ||||
| using eShopOnContainers.Core.Helpers; | ||||
| using eShopOnContainers.Core.ViewModels.Base; | ||||
| using eShopOnContainers.ViewModels.Base; | ||||
| using System; | ||||
| using System.Collections.ObjectModel; | ||||
| using Xamarin.Forms; | ||||
| 
 | ||||
| namespace eShopOnContainers.Core.Models.Orders | ||||
| { | ||||
| @ -12,6 +16,12 @@ namespace eShopOnContainers.Core.Models.Orders | ||||
|         private decimal _unitPrice; | ||||
|         private int _quantity; | ||||
|         private decimal _discount; | ||||
|         private ObservableCollection<int> _numbers; | ||||
| 
 | ||||
|         public OrderItem() | ||||
|         { | ||||
|             Numbers = NumericHelper.GetNumericList(); | ||||
|         } | ||||
| 
 | ||||
|         public int ProductId | ||||
|         { | ||||
| @ -60,6 +70,9 @@ namespace eShopOnContainers.Core.Models.Orders | ||||
|             { | ||||
|                 _quantity = value; | ||||
|                 RaisePropertyChanged(() => Quantity); | ||||
|                 RaisePropertyChanged(() => Total); | ||||
| 
 | ||||
|                 MessagingCenter.Send(this, MessengerKeys.UpdateProduct); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| @ -85,9 +98,19 @@ namespace eShopOnContainers.Core.Models.Orders | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public ObservableCollection<int> Numbers | ||||
|         { | ||||
|             get { return _numbers; } | ||||
|             set | ||||
|             { | ||||
|                 _numbers = value; | ||||
|                 RaisePropertyChanged(() => Numbers); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public override string ToString() | ||||
|         { | ||||
|             return String.Format("Product Id: {0}, Quantity: {1}", ProductId, Quantity); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
| @ -1,4 +1,5 @@ | ||||
| using eShopOnContainers.Core.Models.Catalog; | ||||
| using eShopOnContainers.Core.Extensions; | ||||
| using eShopOnContainers.Core.Models.Catalog; | ||||
| using System; | ||||
| using System.Collections.ObjectModel; | ||||
| using System.Linq; | ||||
| @ -9,11 +10,25 @@ namespace eShopOnContainers.Core.Services.Catalog | ||||
| { | ||||
|     public class CatalogMockService : ICatalogService | ||||
|     { | ||||
|         private ObservableCollection<CatalogBrand> MockCatalogBrand = new ObservableCollection<CatalogBrand> | ||||
|         { | ||||
|             new CatalogBrand { CatalogBrandId = 1, Name = "Azure" }, | ||||
|             new CatalogBrand { CatalogBrandId = 2, Name = "Visual Studio" } | ||||
|         }; | ||||
| 
 | ||||
|         private ObservableCollection<CatalogType> MockCatalogType = new ObservableCollection<CatalogType> | ||||
|         { | ||||
|             new CatalogType { CatalogTypeId = 1, Name = "Mug" }, | ||||
|             new CatalogType { CatalogTypeId = 2, Name = "T-Shirt" } | ||||
|         }; | ||||
| 
 | ||||
|         private ObservableCollection<CatalogItem> MockCatalog = new ObservableCollection<CatalogItem> | ||||
|         { | ||||
|             new CatalogItem { Id = "1", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_01" : "Assets/fake_product_01.png", Name = ".NET Bot Blue Sweatshirt (M)", Price = 19.50M }, | ||||
|             new CatalogItem { Id = "2", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_02": "Assets/fake_product_02.png", Name = ".NET Bot Purple Sweatshirt (M)", Price = 19.50M }, | ||||
|             new CatalogItem { Id = "3", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_03": "Assets/fake_product_03.png", Name = ".NET Bot Black Sweatshirt (M)", Price = 19.95M } | ||||
|             new CatalogItem { Id = "1", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_01" : "Assets/fake_product_01.png", Name = ".NET Bot Blue Sweatshirt (M)", Price = 19.50M, CatalogBrand = "Visual Studio", CatalogType = "T-Shirt" }, | ||||
|             new CatalogItem { Id = "2", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_02": "Assets/fake_product_02.png", Name = ".NET Bot Purple Sweatshirt (M)", Price = 19.50M, CatalogBrand = "Visual Studio", CatalogType = "T-Shirt" }, | ||||
|             new CatalogItem { Id = "3", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_03": "Assets/fake_product_03.png", Name = ".NET Bot Black Sweatshirt (M)", Price = 19.95M, CatalogBrand = "Visual Studio", CatalogType = "T-Shirt" }, | ||||
|             new CatalogItem { Id = "4", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_04": "Assets/fake_product_04.png", Name = ".NET Black Cupt", Price = 17.00M, CatalogBrand = "Visual Studio", CatalogType = "Mug" }, | ||||
|             new CatalogItem { Id = "5", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_05": "Assets/fake_product_05.png", Name = "Azure Black Sweatshirt (M)", Price = 19.50M, CatalogBrand = "Azure", CatalogType = "T-Shirt" } | ||||
|         }; | ||||
| 
 | ||||
|         public async Task<ObservableCollection<CatalogItem>> GetCatalogAsync() | ||||
| @ -23,6 +38,30 @@ namespace eShopOnContainers.Core.Services.Catalog | ||||
|             return MockCatalog; | ||||
|         } | ||||
| 
 | ||||
|         public async Task<ObservableCollection<CatalogItem>> FilterAsync(string catalogBrand, string catalogType) | ||||
|         { | ||||
|             await Task.Delay(500); | ||||
| 
 | ||||
|             return MockCatalog | ||||
|                 .Where(c => c.CatalogBrand.Equals(catalogBrand, StringComparison.CurrentCultureIgnoreCase) && | ||||
|                 c.CatalogType.Equals(catalogType, StringComparison.CurrentCultureIgnoreCase)) | ||||
|                 .ToObservableCollection(); | ||||
|         } | ||||
| 
 | ||||
|         public async Task<ObservableCollection<CatalogBrand>> GetCatalogBrandAsync() | ||||
|         { | ||||
|             await Task.Delay(500); | ||||
| 
 | ||||
|             return MockCatalogBrand; | ||||
|         } | ||||
| 
 | ||||
|         public async Task<ObservableCollection<CatalogType>> GetCatalogTypeAsync() | ||||
|         { | ||||
|             await Task.Delay(500); | ||||
| 
 | ||||
|             return MockCatalogType; | ||||
|         } | ||||
| 
 | ||||
|         public async Task<CatalogItem> GetCatalogItemAsync(string id) | ||||
|         { | ||||
|             await Task.Delay(500); | ||||
|  | ||||
| @ -6,6 +6,9 @@ namespace eShopOnContainers.Core.Services.Catalog | ||||
| { | ||||
|     public interface ICatalogService | ||||
|     { | ||||
|         Task<ObservableCollection<CatalogBrand>> GetCatalogBrandAsync(); | ||||
|         Task<ObservableCollection<CatalogItem>> FilterAsync(string catalogBrand, string catalogType); | ||||
|         Task<ObservableCollection<CatalogType>> GetCatalogTypeAsync(); | ||||
|         Task<ObservableCollection<CatalogItem>> GetCatalogAsync(); | ||||
|         Task<CatalogItem> GetCatalogItemAsync(string id); | ||||
|     } | ||||
|  | ||||
| @ -149,6 +149,7 @@ namespace eShopOnContainers.Services | ||||
|         { | ||||
|             _mappings.Add(typeof(CartViewModel), typeof(CartView)); | ||||
|             _mappings.Add(typeof(CatalogViewModel), typeof(CatalogView)); | ||||
|             _mappings.Add(typeof(CheckoutViewModel), typeof(CheckoutView)); | ||||
|             _mappings.Add(typeof(LoginViewModel), typeof(LoginView)); | ||||
|             _mappings.Add(typeof(MainViewModel), typeof(MainView)); | ||||
|             _mappings.Add(typeof(OrderDetailViewModel), typeof(OrderDetailView)); | ||||
|  | ||||
| @ -14,9 +14,9 @@ namespace eShopOnContainers.Core.Services.Orders | ||||
| 
 | ||||
|             return new ObservableCollection<Order> | ||||
|             { | ||||
|                 new Order { SequenceNumber = 123, Total = 56.40, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = GetOrderItems() }, | ||||
|                 new Order { SequenceNumber = 132, Total = 56.40, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = GetOrderItems() }, | ||||
|                 new Order { SequenceNumber = 231, Total = 56.40, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = GetOrderItems() }, | ||||
|                 new Order { SequenceNumber = 123, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = GetOrderItems() }, | ||||
|                 new Order { SequenceNumber = 132, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = GetOrderItems() }, | ||||
|                 new Order { SequenceNumber = 231, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = GetOrderItems() }, | ||||
|             }; | ||||
|         } | ||||
| 
 | ||||
| @ -24,7 +24,7 @@ namespace eShopOnContainers.Core.Services.Orders | ||||
|         { | ||||
|             await Task.Delay(500); | ||||
| 
 | ||||
|             return new Order { SequenceNumber = 0123456789, Total = 56.40, OrderDate = DateTime.Now, Status = OrderStatus.Pending, OrderItems = GetOrderItems() }; | ||||
|             return new Order { SequenceNumber = 0123456789, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Pending, OrderItems = GetOrderItems() }; | ||||
|         } | ||||
| 
 | ||||
|         private List<OrderItem> GetOrderItems() | ||||
|  | ||||
| @ -0,0 +1,9 @@ | ||||
| using System.Threading.Tasks; | ||||
| 
 | ||||
| namespace eShopOnContainers.Core.Services.User | ||||
| { | ||||
|     public interface IUserService | ||||
|     { | ||||
|         Task<Models.User.User> GetUserAsync(); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,24 @@ | ||||
| using System.Threading.Tasks; | ||||
| 
 | ||||
| namespace eShopOnContainers.Core.Services.User | ||||
| { | ||||
|     public class UserMockService : IUserService | ||||
|     { | ||||
|         private Models.User.User MockUser = new Models.User.User | ||||
|         { | ||||
|             Name = "Jhon", | ||||
|             LastName = "Doe", | ||||
|             City = "Seattle, WA", | ||||
|             Street = "120 E 87th Street", | ||||
|             CountryCode = "98122", | ||||
|             Country = "United States" | ||||
|         }; | ||||
| 
 | ||||
|         public async Task<Models.User.User> GetUserAsync() | ||||
|         { | ||||
|             await Task.Delay(500); | ||||
| 
 | ||||
|             return MockUser; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -4,5 +4,14 @@ | ||||
|     { | ||||
|         // Add product to cart | ||||
|         public const string AddProduct = "AddProduct"; | ||||
| 
 | ||||
|         // Update product cart | ||||
|         public const string UpdateProduct = "UpdateProduct"; | ||||
| 
 | ||||
|         // Filter | ||||
|         public const string Filter = "Filter"; | ||||
| 
 | ||||
|         // Change selected Tab programmatically | ||||
|         public const string ChangeTab = "ChangeTab"; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -5,6 +5,7 @@ using eShopOnContainers.Services; | ||||
| using System; | ||||
| using eShopOnContainers.Core.Services.Catalog; | ||||
| using eShopOnContainers.Core.Services.OpenUrl; | ||||
| using eShopOnContainers.Core.Services.User; | ||||
| 
 | ||||
| namespace eShopOnContainers.ViewModels.Base | ||||
| { | ||||
| @ -16,10 +17,7 @@ namespace eShopOnContainers.ViewModels.Base | ||||
| 
 | ||||
|         public static ViewModelLocator Instance | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|                 return _instance; | ||||
|             } | ||||
|             get { return _instance; } | ||||
|         } | ||||
| 
 | ||||
|         protected ViewModelLocator() | ||||
| @ -30,12 +28,15 @@ namespace eShopOnContainers.ViewModels.Base | ||||
|             _unityContainer.RegisterType<IDialogService, DialogService>(); | ||||
|             RegisterSingleton<INavigationService, NavigationService>(); | ||||
|             _unityContainer.RegisterType<IOpenUrlService, OpenUrlService>(); | ||||
| 
 | ||||
|             _unityContainer.RegisterType<ICatalogService, CatalogMockService>(); | ||||
|             _unityContainer.RegisterType<IOrdersService, OrdersMockService>(); | ||||
|             _unityContainer.RegisterType<IUserService, UserMockService>(); | ||||
| 
 | ||||
|             // view models | ||||
|             _unityContainer.RegisterType<CartViewModel>(); | ||||
|             _unityContainer.RegisterType<CatalogViewModel>(); | ||||
|             _unityContainer.RegisterType<CheckoutViewModel>(); | ||||
|             _unityContainer.RegisterType<LoginViewModel>(); | ||||
|             _unityContainer.RegisterType<MainViewModel>(); | ||||
|             _unityContainer.RegisterType<OrderDetailViewModel>(); | ||||
| @ -67,4 +68,4 @@ namespace eShopOnContainers.ViewModels.Base | ||||
|             _unityContainer.RegisterType<TInterface, T>(new ContainerControlledLifetimeManager()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
| @ -1,4 +1,5 @@ | ||||
| using eShopOnContainers.Core.Models.Catalog; | ||||
| using eShopOnContainers.Core.Helpers; | ||||
| using eShopOnContainers.Core.Models.Catalog; | ||||
| using eShopOnContainers.Core.Models.Orders; | ||||
| using eShopOnContainers.Core.Services.Orders; | ||||
| using eShopOnContainers.Core.ViewModels.Base; | ||||
| @ -7,6 +8,7 @@ using System; | ||||
| using System.Collections.ObjectModel; | ||||
| using System.Linq; | ||||
| using System.Threading.Tasks; | ||||
| using System.Windows.Input; | ||||
| using Xamarin.Forms; | ||||
| 
 | ||||
| namespace eShopOnContainers.Core.ViewModels | ||||
| @ -43,7 +45,7 @@ namespace eShopOnContainers.Core.ViewModels | ||||
|                 RaisePropertyChanged(() => OrderItems); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|           | ||||
|         public decimal Total | ||||
|         { | ||||
|             get { return _total; } | ||||
| @ -54,6 +56,8 @@ namespace eShopOnContainers.Core.ViewModels | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public ICommand CheckoutCommand => new Command(Checkout); | ||||
| 
 | ||||
|         public override Task InitializeAsync(object navigationData) | ||||
|         { | ||||
|             MessagingCenter.Subscribe<CatalogViewModel, CatalogItem>(this, MessengerKeys.AddProduct, (sender, arg) => | ||||
| @ -62,6 +66,11 @@ namespace eShopOnContainers.Core.ViewModels | ||||
| 
 | ||||
|                 AddCartItem(arg); | ||||
|             }); | ||||
|              | ||||
|             MessagingCenter.Subscribe<OrderItem>(this, MessengerKeys.UpdateProduct, (sender) => | ||||
|             { | ||||
|                 ReCalculateTotal(); | ||||
|             }); | ||||
| 
 | ||||
|             OrderItems = new ObservableCollection<OrderItem>(); | ||||
| 
 | ||||
| @ -99,5 +108,10 @@ namespace eShopOnContainers.Core.ViewModels | ||||
|                 Total += orderItem.Total; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private void Checkout() | ||||
|         { | ||||
|             NavigationService.NavigateToAsync<CheckoutViewModel>(OrderItems); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
| @ -12,6 +12,10 @@ namespace eShopOnContainers.Core.ViewModels | ||||
|     public class CatalogViewModel : ViewModelBase | ||||
|     { | ||||
|         private ObservableCollection<CatalogItem> _products; | ||||
|         private ObservableCollection<CatalogBrand> _brands; | ||||
|         private CatalogBrand _brand; | ||||
|         private ObservableCollection<CatalogType> _types; | ||||
|         private CatalogType _type; | ||||
| 
 | ||||
|         private ICatalogService _productsService; | ||||
| 
 | ||||
| @ -30,13 +34,63 @@ namespace eShopOnContainers.Core.ViewModels | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public ObservableCollection<CatalogBrand> Brands | ||||
|         { | ||||
|             get { return _brands; } | ||||
|             set | ||||
|             { | ||||
|                 _brands = value; | ||||
|                 RaisePropertyChanged(() => Brands); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public CatalogBrand Brand | ||||
|         { | ||||
|             get { return _brand; } | ||||
|             set | ||||
|             { | ||||
|                 _brand = value; | ||||
|                 RaisePropertyChanged(() => Brand); | ||||
|                 RaisePropertyChanged(() => IsFilter); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public ObservableCollection<CatalogType> Types | ||||
|         { | ||||
|             get { return _types; } | ||||
|             set | ||||
|             { | ||||
|                 _types = value; | ||||
|                 RaisePropertyChanged(() => Types); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public CatalogType Type | ||||
|         { | ||||
|             get { return _type; } | ||||
|             set | ||||
|             { | ||||
|                 _type = value; | ||||
|                 RaisePropertyChanged(() => Type); | ||||
|                 RaisePropertyChanged(() => IsFilter); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public bool IsFilter { get { return Brand != null || Type != null; } } | ||||
| 
 | ||||
|         public ICommand AddCatalogItemCommand => new Command<CatalogItem>(AddCatalogItem); | ||||
| 
 | ||||
|         public ICommand FilterCommand => new Command(Filter); | ||||
| 
 | ||||
|         public ICommand ClearFilterCommand => new Command(ClearFilter); | ||||
| 
 | ||||
|         public override async Task InitializeAsync(object navigationData) | ||||
|         { | ||||
|             IsBusy = true; | ||||
| 
 | ||||
|             Products = await _productsService.GetCatalogAsync(); | ||||
|             Brands = await _productsService.GetCatalogBrandAsync(); | ||||
|             Types = await _productsService.GetCatalogTypeAsync(); | ||||
| 
 | ||||
|             IsBusy = false; | ||||
|         } | ||||
| @ -45,5 +99,31 @@ namespace eShopOnContainers.Core.ViewModels | ||||
|         { | ||||
|             MessagingCenter.Send(this, MessengerKeys.AddProduct, catalogItem); | ||||
|         } | ||||
| 
 | ||||
|         private async void Filter() | ||||
|         { | ||||
|             if(Brand == null && Type == null) | ||||
|             { | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             IsBusy = true; | ||||
| 
 | ||||
|             MessagingCenter.Send(this, MessengerKeys.Filter); | ||||
|             Products = await _productsService.FilterAsync(Brand.Name, Type.Name); | ||||
| 
 | ||||
|             IsBusy = false; | ||||
|         } | ||||
| 
 | ||||
|         private async void ClearFilter() | ||||
|         { | ||||
|             IsBusy = true; | ||||
| 
 | ||||
|             Brand = null; | ||||
|             Type = null; | ||||
|             Products = await _productsService.GetCatalogAsync(); | ||||
| 
 | ||||
|             IsBusy = false; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
| @ -0,0 +1,106 @@ | ||||
| using eShopOnContainers.Core.Models.Navigation; | ||||
| using eShopOnContainers.Core.Services.User; | ||||
| using eShopOnContainers.ViewModels.Base; | ||||
| using System.Windows.Input; | ||||
| using Xamarin.Forms; | ||||
| using System.Threading.Tasks; | ||||
| using eShopOnContainers.Core.Models.User; | ||||
| using eShopOnContainers.Core.Models.Orders; | ||||
| using System; | ||||
| using System.Collections.ObjectModel; | ||||
| using System.Linq; | ||||
| 
 | ||||
| namespace eShopOnContainers.Core.ViewModels | ||||
| { | ||||
|     public class CheckoutViewModel : ViewModelBase | ||||
|     { | ||||
|         private ObservableCollection<OrderItem> _orderItems; | ||||
|         private Order _order; | ||||
|         private User _user; | ||||
| 
 | ||||
|         private IUserService _userService; | ||||
| 
 | ||||
|         public CheckoutViewModel(IUserService userService) | ||||
|         { | ||||
|             _userService = userService; | ||||
|         } | ||||
| 
 | ||||
|         public ObservableCollection<OrderItem> OrderItems | ||||
|         { | ||||
|             get { return _orderItems; } | ||||
|             set | ||||
|             { | ||||
|                 _orderItems = value; | ||||
|                 RaisePropertyChanged(() => OrderItems); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public Order Order | ||||
|         { | ||||
|             get { return _order; } | ||||
|             set | ||||
|             { | ||||
|                 _order = value; | ||||
|                 RaisePropertyChanged(() => Order); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public User User | ||||
|         { | ||||
|             get { return _user; } | ||||
|             set | ||||
|             { | ||||
|                 _user = value; | ||||
|                 RaisePropertyChanged(() => User); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public ICommand CheckoutCommand => new Command(Checkout); | ||||
| 
 | ||||
|         public override async Task InitializeAsync(object navigationData) | ||||
|         { | ||||
|             if (navigationData is ObservableCollection<OrderItem>) | ||||
|             { | ||||
|                 IsBusy = true; | ||||
| 
 | ||||
|                 var orderItems = ((ObservableCollection<OrderItem>)navigationData); | ||||
| 
 | ||||
|                 OrderItems = orderItems; | ||||
| 
 | ||||
|                 User = await _userService.GetUserAsync(); | ||||
| 
 | ||||
|                 Order = new Order | ||||
|                 { | ||||
|                     ShippingAddress = User, | ||||
|                     OrderItems = orderItems.ToList(), | ||||
|                     Status = OrderStatus.Pending, | ||||
|                     OrderDate = DateTime.Now, | ||||
|                     Total = GetOrderTotal() | ||||
|                 }; | ||||
| 
 | ||||
|                 IsBusy = false; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private async void Checkout() | ||||
|         { | ||||
|             await NavigationService.NavigateToAsync<MainViewModel>(new TabParameter { TabIndex = 1 }); | ||||
|             await NavigationService.RemoveLastFromBackStackAsync(); | ||||
| 
 | ||||
|             await DialogService.ShowAlertAsync("Order sent successfully", string.Format("Order {0}", Order.OrderNumber), "Ok"); | ||||
|             await NavigationService.RemoveLastFromBackStackAsync(); | ||||
|         } | ||||
| 
 | ||||
|         private decimal GetOrderTotal() | ||||
|         { | ||||
|             decimal total = 0; | ||||
| 
 | ||||
|             foreach (var orderItem in OrderItems) | ||||
|             { | ||||
|                 total += orderItem.Total; | ||||
|             } | ||||
| 
 | ||||
|             return total; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,9 +1,22 @@ | ||||
| using eShopOnContainers.ViewModels.Base; | ||||
| using System.Threading.Tasks; | ||||
| using eShopOnContainers.ViewModels.Base; | ||||
| using eShopOnContainers.Core.Models.Navigation; | ||||
| using Xamarin.Forms; | ||||
| using eShopOnContainers.Core.ViewModels.Base; | ||||
| 
 | ||||
| namespace eShopOnContainers.Core.ViewModels | ||||
| { | ||||
|     public class MainViewModel : ViewModelBase | ||||
|     { | ||||
|        | ||||
|         public override Task InitializeAsync(object navigationData) | ||||
|         { | ||||
|             if (navigationData is TabParameter) | ||||
|             { | ||||
|                 var tabIndex = ((TabParameter)navigationData).TabIndex; | ||||
|                 MessagingCenter.Send(this, MessengerKeys.ChangeTab, tabIndex); | ||||
|             } | ||||
| 
 | ||||
|             return base.InitializeAsync(navigationData); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
| @ -3,21 +3,27 @@ using eShopOnContainers.Core.Models.Orders; | ||||
| using eShopOnContainers.ViewModels.Base; | ||||
| using eShopOnContainers.Core.Services.Orders; | ||||
| using eShopOnContainers.Core.Services.Catalog; | ||||
| using eShopOnContainers.Core.Services.User; | ||||
| using eShopOnContainers.Core.Models.User; | ||||
| 
 | ||||
| namespace eShopOnContainers.Core.ViewModels | ||||
| { | ||||
|     public class OrderDetailViewModel : ViewModelBase | ||||
|     { | ||||
|         private Order _order; | ||||
|         private User _user; | ||||
| 
 | ||||
|         private IOrdersService _orderService; | ||||
|         private ICatalogService _catalogService; | ||||
|         private IUserService _userService; | ||||
| 
 | ||||
|         public OrderDetailViewModel(IOrdersService orderService, | ||||
|             ICatalogService catalogService) | ||||
|             ICatalogService catalogService, | ||||
|             IUserService userService) | ||||
|         { | ||||
|             _orderService = orderService; | ||||
|             _catalogService = catalogService; | ||||
|             _userService = userService; | ||||
|         } | ||||
| 
 | ||||
|         public Order Order | ||||
| @ -30,6 +36,16 @@ namespace eShopOnContainers.Core.ViewModels | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public User User | ||||
|         { | ||||
|             get { return _user; } | ||||
|             set | ||||
|             { | ||||
|                 _user = value; | ||||
|                 RaisePropertyChanged(() => User); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public override async Task InitializeAsync(object navigationData) | ||||
|         { | ||||
|             if(navigationData is Order) | ||||
| @ -45,6 +61,7 @@ namespace eShopOnContainers.Core.ViewModels | ||||
|                 } | ||||
| 
 | ||||
|                 Order = order; | ||||
|                 User = await _userService.GetUserAsync(); | ||||
| 
 | ||||
|                 IsBusy = false; | ||||
|             } | ||||
|  | ||||
| @ -81,7 +81,7 @@ | ||||
|                         <ListView.ItemTemplate> | ||||
|                             <DataTemplate> | ||||
|                                 <ViewCell> | ||||
|                                     <templates:OrderItemTemplate /> | ||||
|                                     <templates:CartOrderItemTemplate /> | ||||
|                                 </ViewCell> | ||||
|                             </DataTemplate> | ||||
|                         </ListView.ItemTemplate> | ||||
|  | ||||
| @ -30,7 +30,6 @@ | ||||
|                 <Setter Property="VerticalOptions" | ||||
|                         Value="Center" /> | ||||
|             </Style> | ||||
| 
 | ||||
|              | ||||
|             <animations:StoryBoard  | ||||
|                 x:Key="ProductsAnimation"     | ||||
| @ -70,28 +69,39 @@ | ||||
|             </Grid.GestureRecognizers> | ||||
|         </Grid> | ||||
|         <!-- CATALOG --> | ||||
|         <ListView  | ||||
|             x:Name="Products" | ||||
|             Grid.Row="1" | ||||
|             ItemsSource="{Binding Products}" | ||||
|             HasUnevenRows="True" | ||||
|             SeparatorVisibility="None" | ||||
|             CachingStrategy="RecycleElement" | ||||
|             Style="{StaticResource ProductsListStyle}"> | ||||
|             <ListView.Behaviors> | ||||
|                 <behaviors:EventToCommandBehavior                     | ||||
|                     EventName="ItemTapped" | ||||
|                     Command="{Binding AddCatalogItemCommand}" | ||||
|                     EventArgsConverter="{StaticResource ItemTappedEventArgsConverter}" /> | ||||
|             </ListView.Behaviors> | ||||
|             <ListView.ItemTemplate> | ||||
|                 <DataTemplate> | ||||
|                     <ViewCell> | ||||
|                         <templates:ProductTemplate /> | ||||
|                     </ViewCell> | ||||
|                 </DataTemplate> | ||||
|             </ListView.ItemTemplate> | ||||
|         </ListView> | ||||
|         <Grid   | ||||
|             Grid.Row="1"> | ||||
|             <ListView  | ||||
|                 x:Name="Products"        | ||||
|                 IsVisible="{Binding Products.Count, Converter={StaticResource CountToBoolConverter}}" | ||||
|                 ItemsSource="{Binding Products}" | ||||
|                 HasUnevenRows="True" | ||||
|                 SeparatorVisibility="None" | ||||
|                 CachingStrategy="RecycleElement" | ||||
|                 Style="{StaticResource ProductsListStyle}"> | ||||
|                 <ListView.Behaviors> | ||||
|                     <behaviors:EventToCommandBehavior                     | ||||
|                         EventName="ItemTapped" | ||||
|                         Command="{Binding AddCatalogItemCommand}" | ||||
|                         EventArgsConverter="{StaticResource ItemTappedEventArgsConverter}" /> | ||||
|                 </ListView.Behaviors> | ||||
|                 <ListView.ItemTemplate> | ||||
|                     <DataTemplate> | ||||
|                         <ViewCell> | ||||
|                             <templates:ProductTemplate /> | ||||
|                         </ViewCell> | ||||
|                     </DataTemplate> | ||||
|                 </ListView.ItemTemplate> | ||||
|             </ListView> | ||||
|             <Grid  | ||||
|                 IsVisible="{Binding IsBusy, Converter={StaticResource InverseBoolConverter}}"> | ||||
|                 <Label  | ||||
|                     Text="NO PRODUCTS FOUND"       | ||||
|                     IsVisible="{Binding Products.Count, Converter={StaticResource InverseCountToBoolConverter}}" | ||||
|                     HorizontalOptions="Center" | ||||
|                     VerticalOptions="Center"/> | ||||
|             </Grid> | ||||
|         </Grid> | ||||
|         <!-- INDICATOR --> | ||||
|         <ActivityIndicator | ||||
|             Grid.Row="0" | ||||
|  | ||||
| @ -1,16 +1,27 @@ | ||||
| using System; | ||||
| using SlideOverKit; | ||||
| using Xamarin.Forms; | ||||
| using eShopOnContainers.Core.ViewModels.Base; | ||||
| using eShopOnContainers.Core.ViewModels; | ||||
| 
 | ||||
| namespace eShopOnContainers.Core.Views | ||||
| { | ||||
|     public partial class CatalogView : ContentPage, IMenuContainerPage | ||||
|     { | ||||
|         private FiltersView _filterView; | ||||
| 
 | ||||
|         public CatalogView() | ||||
|         { | ||||
|             InitializeComponent(); | ||||
| 
 | ||||
|             SlideMenu = new FiltersView(); | ||||
|             _filterView = new FiltersView(); | ||||
| 
 | ||||
|             SlideMenu = _filterView; | ||||
| 
 | ||||
|             MessagingCenter.Subscribe<CatalogViewModel>(this, MessengerKeys.Filter, (sender) => | ||||
|             { | ||||
|                 Filter(); | ||||
|             }); | ||||
|         } | ||||
| 
 | ||||
|         public Action HideMenuAction | ||||
| @ -31,7 +42,20 @@ namespace eShopOnContainers.Core.Views | ||||
|             set; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         protected override void OnBindingContextChanged() | ||||
|         { | ||||
|             base.OnBindingContextChanged(); | ||||
| 
 | ||||
|             _filterView.BindingContext = BindingContext; | ||||
|         } | ||||
| 
 | ||||
|         private void OnFilterChanged(object sender, EventArgs e) | ||||
|         { | ||||
|             Filter(); | ||||
|         } | ||||
| 
 | ||||
|         private void Filter() | ||||
|         { | ||||
|             if (SlideMenu.IsShown) | ||||
|             { | ||||
|  | ||||
| @ -0,0 +1,243 @@ | ||||
| <?xml version="1.0" encoding="utf-8" ?> | ||||
| <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" | ||||
|              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" | ||||
|              x:Class="eShopOnContainers.Core.Views.CheckoutView"    | ||||
|              xmlns:templates="clr-namespace:eShopOnContainers.Core.Views.Templates;assembly=eShopOnContainers.Core"   | ||||
|              Title="Checkout"> | ||||
|     <ContentPage.Resources> | ||||
|         <ResourceDictionary> | ||||
|              | ||||
|             <Style x:Key="OrderTitleStyle"  | ||||
|                    TargetType="{x:Type Label}"> | ||||
|                 <Setter Property="FontFamily" | ||||
|                         Value="{StaticResource MontserratRegular}" /> | ||||
|                 <Setter Property="FontSize" | ||||
|                         Value="{StaticResource MediumSize}" /> | ||||
|                 <Setter Property="TextColor" | ||||
|                         Value="Gray" /> | ||||
|             </Style> | ||||
|              | ||||
|             <Style x:Key="OrderContentStyle"     | ||||
|                    TargetType="{x:Type Label}" | ||||
|                    BasedOn="{StaticResource OrderTitleStyle}"> | ||||
|                 <Setter Property="TextColor" | ||||
|                         Value="Black" /> | ||||
|             </Style> | ||||
|              | ||||
|             <Style x:Key="ShippingAddressStyle"     | ||||
|                    TargetType="{x:Type Label}" | ||||
|                    BasedOn="{StaticResource OrderTitleStyle}"> | ||||
|                 <Setter Property="FontSize" | ||||
|                         Value="{StaticResource LargeSize}" /> | ||||
|                 <Setter Property="TextColor" | ||||
|                         Value="Black" /> | ||||
|             </Style> | ||||
| 
 | ||||
|             <Style x:Key="AddressStyle"     | ||||
|                    TargetType="{x:Type Label}" | ||||
|                    BasedOn="{StaticResource OrderTitleStyle}"> | ||||
|                 <Setter Property="FontSize" | ||||
|                         Value="{StaticResource LittleSize}" /> | ||||
|                 <Setter Property="TextColor" | ||||
|                         Value="Black" /> | ||||
|             </Style> | ||||
|              | ||||
|             <Style x:Key="OrderTotalStyle"  | ||||
|                TargetType="{x:Type Label}"> | ||||
|                 <Setter Property="FontFamily" | ||||
|                         Value="{StaticResource MontserratRegular}" /> | ||||
|                 <Setter Property="FontSize"  | ||||
|                         Value="{StaticResource LargerSize}" /> | ||||
|                 <Setter Property="HorizontalOptions"  | ||||
|                         Value="End" /> | ||||
|             </Style> | ||||
| 
 | ||||
|             <Style x:Key="CheckoutButtonStyle"  | ||||
|                TargetType="{x:Type Label}"> | ||||
|                 <Setter Property="FontFamily" | ||||
|                         Value="{StaticResource MontserratRegular}" /> | ||||
|                 <Setter Property="TextColor" | ||||
|                         Value="{StaticResource WhiteColor}" /> | ||||
|                 <Setter Property="HorizontalOptions" | ||||
|                         Value="Center" /> | ||||
|                 <Setter Property="VerticalOptions" | ||||
|                         Value="Center" /> | ||||
|             </Style> | ||||
| 
 | ||||
|         </ResourceDictionary> | ||||
|     </ContentPage.Resources> | ||||
|     <Grid | ||||
|         BackgroundColor="{StaticResource BackgroundColor}"> | ||||
|         <Grid.RowDefinitions> | ||||
|             <RowDefinition Height="*" /> | ||||
|             <RowDefinition Height="60" /> | ||||
|         </Grid.RowDefinitions> | ||||
|         <!-- ORDER --> | ||||
|         <ScrollView    | ||||
|             Grid.Row="0"> | ||||
|             <Grid> | ||||
|                 <Grid.RowDefinitions> | ||||
|                     <RowDefinition Height="Auto" /> | ||||
|                     <RowDefinition Height="Auto" /> | ||||
|                     <RowDefinition Height="Auto" /> | ||||
|                 </Grid.RowDefinitions> | ||||
|                 <!-- ORDER INFO --> | ||||
|                 <Grid  | ||||
|                     x:Name="OrderInfo"> | ||||
|                     <Grid.ColumnDefinitions> | ||||
|                         <ColumnDefinition /> | ||||
|                         <ColumnDefinition /> | ||||
|                     </Grid.ColumnDefinitions> | ||||
|                     <Grid.RowDefinitions> | ||||
|                         <RowDefinition /> | ||||
|                         <RowDefinition /> | ||||
|                     </Grid.RowDefinitions> | ||||
|                     <StackLayout | ||||
|                         Grid.Column="0" | ||||
|                         Grid.Row="0" | ||||
|                         Margin="12"> | ||||
|                         <Label  | ||||
|                         Text="ORDER NUMBER" | ||||
|                         Style="{StaticResource OrderTitleStyle}"/> | ||||
|                         <Label  | ||||
|                         Text="{Binding Order.OrderNumber, Converter={StaticResource ToUpperConverter}}" | ||||
|                         Style="{StaticResource OrderContentStyle}"/> | ||||
|                     </StackLayout> | ||||
|                     <StackLayout | ||||
|                         Grid.Column="0" | ||||
|                         Grid.Row="1"  | ||||
|                         Margin="12"> | ||||
|                         <Label  | ||||
|                             Text="TOTAL" | ||||
|                             Style="{StaticResource OrderTitleStyle}"/> | ||||
|                         <Label  | ||||
|                             Text="{Binding Order.Total, StringFormat='${0:N}', Converter={StaticResource ToUpperConverter}}"  | ||||
|                             Style="{StaticResource OrderContentStyle}"/> | ||||
|                     </StackLayout> | ||||
|                     <StackLayout | ||||
|                         Grid.Column="1" | ||||
|                         Grid.Row="0" | ||||
|                         Margin="12"> | ||||
|                         <Label  | ||||
|                             Text="DATE" | ||||
|                             Style="{StaticResource OrderTitleStyle}"/> | ||||
|                         <Label  | ||||
|                             Text="{Binding Order.OrderDate, Converter={StaticResource DatetimeConverter}}" | ||||
|                             Style="{StaticResource OrderContentStyle}"/> | ||||
|                     </StackLayout> | ||||
|                     <StackLayout | ||||
|                         Grid.Column="1" | ||||
|                         Grid.Row="1"  | ||||
|                         Margin="12"> | ||||
|                         <Label  | ||||
|                             Text="STATUS" | ||||
|                             Style="{StaticResource OrderTitleStyle}"/> | ||||
|                         <Label  | ||||
|                             Text="{Binding Order.Status, Converter={StaticResource ToUpperConverter}}" | ||||
|                             Style="{StaticResource OrderContentStyle}"/> | ||||
|                     </StackLayout> | ||||
|                 </Grid> | ||||
|                 <!-- SHIPPING ADDRESS --> | ||||
|                 <Grid | ||||
|                     x:Name="ShippingAddress" | ||||
|                     Grid.Row="1" | ||||
|                     Margin="12"> | ||||
|                     <Grid.RowDefinitions> | ||||
|                         <RowDefinition Height="Auto" /> | ||||
|                         <RowDefinition Height="*" /> | ||||
|                     </Grid.RowDefinitions> | ||||
|                     <Label | ||||
|                         Grid.Row="0" | ||||
|                         Text="SHIPPING ADDRESS" | ||||
|                         Style="{StaticResource ShippingAddressStyle}"/> | ||||
|                     <StackLayout | ||||
|                         Grid.Row="1"> | ||||
|                         <Label | ||||
|                             Text="{Binding User.Street}" | ||||
|                             Style="{StaticResource AddressStyle}"/> | ||||
|                         <Label | ||||
|                             Text="{Binding User.City}"    | ||||
|                             Style="{StaticResource AddressStyle}"/> | ||||
|                         <Label | ||||
|                             Text="{Binding User.CountryCode}"    | ||||
|                             Style="{StaticResource AddressStyle}"/> | ||||
|                         <Label | ||||
|                             Text="{Binding User.Country}"    | ||||
|                             Style="{StaticResource AddressStyle}"/> | ||||
|                     </StackLayout> | ||||
|                 </Grid> | ||||
|                 <!-- ORDER ITEMS --> | ||||
|                 <Grid             | ||||
|                     x:Name="OrderItems" | ||||
|                     Grid.Row="2"> | ||||
|                     <Grid.RowDefinitions> | ||||
|                         <RowDefinition Height="*" /> | ||||
|                         <RowDefinition Height="Auto" /> | ||||
|                     </Grid.RowDefinitions> | ||||
|                     <ListView  | ||||
|                         Grid.Row="0" | ||||
|                         ItemsSource="{Binding Order.OrderItems}"        | ||||
|                         HasUnevenRows="True" | ||||
|                         SeparatorVisibility="None" | ||||
|                         VerticalOptions="FillAndExpand" | ||||
|                         CachingStrategy="RecycleElement"> | ||||
|                         <ListView.ItemTemplate> | ||||
|                             <DataTemplate> | ||||
|                                 <ViewCell> | ||||
|                                     <templates:OrderItemTemplate /> | ||||
|                                 </ViewCell> | ||||
|                             </DataTemplate> | ||||
|                         </ListView.ItemTemplate> | ||||
|                     </ListView> | ||||
|                     <StackLayout | ||||
|                         Grid.Row="1" | ||||
|                         Margin="0,0,0,24"> | ||||
|                         <Label  | ||||
|                             Grid.Row="0" | ||||
|                             Text="TOTAL" | ||||
|                             TextColor="{StaticResource BlackColor}" | ||||
|                             Style="{StaticResource OrderTotalStyle}"/> | ||||
|                         <Label  | ||||
|                             Grid.Row="1"                    | ||||
|                             Text="{Binding Order.Total, StringFormat='${0:N}'}" | ||||
|                             TextColor="{StaticResource GreenColor}" | ||||
|                             Style="{StaticResource OrderTotalStyle}"/> | ||||
|                     </StackLayout> | ||||
|                 </Grid> | ||||
|             </Grid> | ||||
|         </ScrollView> | ||||
|         <!-- CHECKOUT --> | ||||
|         <Grid | ||||
|             Grid.Row="1"            | ||||
|             BackgroundColor="{StaticResource LightGreenColor}" | ||||
|             Padding="0"  | ||||
|             ColumnSpacing="0"  | ||||
|             RowSpacing="0"> | ||||
|             <Label        | ||||
|                 Text="[ CHECKOUT ]"  | ||||
|                 Style="{StaticResource CheckoutButtonStyle}"/> | ||||
|             <Grid.GestureRecognizers> | ||||
|                 <TapGestureRecognizer             | ||||
|                     Command="{Binding CheckoutCommand}"   | ||||
|                     NumberOfTapsRequired="1" /> | ||||
|             </Grid.GestureRecognizers> | ||||
|         </Grid> | ||||
|         <!-- INDICATOR --> | ||||
|         <ActivityIndicator | ||||
|             Grid.Row="0" | ||||
|             Grid.RowSpan="2" | ||||
|             Color="{StaticResource LightGreenColor}" | ||||
|             IsRunning="{Binding IsBusy}"   | ||||
|             IsVisible="{Binding IsBusy}" | ||||
|             VerticalOptions="Center" | ||||
|             HorizontalOptions="Center"> | ||||
|             <ActivityIndicator.WidthRequest> | ||||
|                 <OnPlatform  | ||||
|                     x:TypeArguments="x:Double"  | ||||
|                     iOS="100"  | ||||
|                     Android="100" | ||||
|                     WinPhone="400" /> | ||||
|             </ActivityIndicator.WidthRequest> | ||||
|         </ActivityIndicator> | ||||
|     </Grid> | ||||
| </ContentPage> | ||||
| @ -0,0 +1,12 @@ | ||||
| using Xamarin.Forms; | ||||
| 
 | ||||
| namespace eShopOnContainers.Core.Views | ||||
| { | ||||
|     public partial class CheckoutView : ContentPage | ||||
|     { | ||||
|         public CheckoutView() | ||||
|         { | ||||
|             InitializeComponent(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -2,71 +2,93 @@ | ||||
| <slideOverKit:SlideMenuView  | ||||
|     xmlns="http://xamarin.com/schemas/2014/forms" | ||||
|     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" | ||||
|     xmlns:slideOverKit="clr-namespace:SlideOverKit"  | ||||
|     xmlns:controls="clr-namespace:eShopOnContainers.Core.Controls;assembly=eShopOnContainers.Core" | ||||
|     xmlns:slideOverKit="clr-namespace:SlideOverKit" | ||||
|     xmlns:controls="clr-namespace:eShopOnContainers.Core.Controls;assembly=eShopOnContainers.Core"    | ||||
|     x:Class="eShopOnContainers.Core.Views.FiltersView" | ||||
|     MenuOrientations="TopToBottom" | ||||
|     BackgroundColor="{StaticResource BackgroundColor}" | ||||
|     HeightRequest="250" | ||||
|     IsFullScreen="True"> | ||||
|     <slideOverKit:SlideMenuView.Resources> | ||||
|         <ResourceDictionary> | ||||
|   <slideOverKit:SlideMenuView.Resources> | ||||
|     <ResourceDictionary> | ||||
| 
 | ||||
|             <Style x:Key="FilterPickerStyle"  | ||||
|                TargetType="{x:Type controls:BindablePicker}"> | ||||
|                 <Setter Property="HeightRequest" | ||||
|                         Value="48" /> | ||||
|                 <Setter Property="BackgroundColor" | ||||
|                         Value="Transparent" /> | ||||
|                 <Setter Property="HorizontalOptions" | ||||
|                         Value="Fill" /> | ||||
|                 <Setter Property="VerticalOptions" | ||||
|                         Value="Fill" /> | ||||
|             </Style> | ||||
|              | ||||
|                 <Style x:Key="FilterButtonStyle"  | ||||
|                TargetType="{x:Type Button}"> | ||||
|                 <Setter Property="FontFamily" | ||||
|                         Value="{StaticResource MontserratRegular}" /> | ||||
|                 <Setter Property="TextColor" | ||||
|                         Value="{StaticResource WhiteColor}" /> | ||||
|                 <Setter Property="BackgroundColor" | ||||
|                         Value="{StaticResource LightGreenColor}" /> | ||||
|                 <Setter Property="HeightRequest" | ||||
|                         Value="48" /> | ||||
|                 <Setter Property="BorderRadius" | ||||
|                         Value="0" /> | ||||
|                 <Setter Property="BorderWidth" | ||||
|                         Value="0" /> | ||||
|                 <Setter Property="HorizontalOptions" | ||||
|                         Value="Fill" /> | ||||
|                 <Setter Property="VerticalOptions" | ||||
|                         Value="Fill" /> | ||||
|             </Style> | ||||
|       <Style x:Key="FilterPickerStyle"   | ||||
|              TargetType="{x:Type controls:BindablePicker}"> | ||||
|         <Setter Property="HeightRequest" | ||||
|                 Value="48" /> | ||||
|         <Setter Property="BackgroundColor" | ||||
|                 Value="Transparent" /> | ||||
|         <Setter Property="HorizontalOptions" | ||||
|                 Value="Fill" /> | ||||
|         <Setter Property="VerticalOptions" | ||||
|                 Value="Fill" /> | ||||
|       </Style> | ||||
|               | ||||
|       <Style x:Key="FilterButtonStyle"   | ||||
|              TargetType="{x:Type Button}"> | ||||
|         <Setter Property="FontFamily" | ||||
|                 Value="{StaticResource MontserratRegular}" /> | ||||
|         <Setter Property="TextColor" | ||||
|                 Value="{StaticResource WhiteColor}" /> | ||||
|         <Setter Property="BackgroundColor" | ||||
|                 Value="{StaticResource LightGreenColor}" /> | ||||
|         <Setter Property="HeightRequest" | ||||
|                 Value="48" /> | ||||
|         <Setter Property="BorderRadius" | ||||
|                 Value="0" /> | ||||
|         <Setter Property="BorderWidth" | ||||
|                 Value="0" /> | ||||
|         <Setter Property="HorizontalOptions" | ||||
|                 Value="Fill" /> | ||||
|         <Setter Property="VerticalOptions" | ||||
|                 Value="Fill" /> | ||||
|       </Style> | ||||
| 
 | ||||
|         </ResourceDictionary> | ||||
|     </slideOverKit:SlideMenuView.Resources> | ||||
|     <Grid     | ||||
|         Padding="0"             | ||||
|         ColumnSpacing="0"     | ||||
|         RowSpacing="0" | ||||
|         Margin="48, 24"> | ||||
|         <Grid.RowDefinitions> | ||||
|             <RowDefinition /> | ||||
|             <RowDefinition /> | ||||
|             <RowDefinition /> | ||||
|         </Grid.RowDefinitions> | ||||
|         <controls:BindablePicker  | ||||
|             Grid.Row="0" | ||||
|             Title="BRAND" | ||||
|             Style="{StaticResource FilterPickerStyle}"/> | ||||
|         <controls:BindablePicker  | ||||
|             Grid.Row="1" | ||||
|             Title="TYPE" | ||||
|             Style="{StaticResource FilterPickerStyle}"/> | ||||
|         <Button  | ||||
|             Grid.Row="2" | ||||
|             Text="Apply"  | ||||
|             Style="{StaticResource FilterButtonStyle}"/> | ||||
|     </Grid> | ||||
| </slideOverKit:SlideMenuView> | ||||
|       <Style | ||||
|         x:Key="ClearFilterButtonStyle" | ||||
|         TargetType="{x:Type Button}" | ||||
|         BasedOn="{StaticResource FilterButtonStyle}"> | ||||
|         <Setter Property="TextColor" | ||||
|                 Value="{StaticResource BlackColor}" /> | ||||
|         <Setter Property="BackgroundColor" | ||||
|                 Value="{StaticResource GrayColor}" /> | ||||
|       </Style> | ||||
|            | ||||
|     </ResourceDictionary> | ||||
|   </slideOverKit:SlideMenuView.Resources> | ||||
|   <Grid     | ||||
|     Padding="0"             | ||||
|     ColumnSpacing="0"     | ||||
|     RowSpacing="0" | ||||
|     Margin="48, 24"> | ||||
|     <Grid.RowDefinitions>       | ||||
|       <RowDefinition /> | ||||
|       <RowDefinition />  | ||||
|       <RowDefinition Height="Auto" /> | ||||
|       <RowDefinition Height="Auto" /> | ||||
|     </Grid.RowDefinitions> | ||||
|     <controls:BindablePicker  | ||||
|       Grid.Row="0" | ||||
|       Title="BRAND" | ||||
|       ItemsSource="{Binding Brands}"  | ||||
|       SelectedItem="{Binding Brand, Mode=TwoWay}" | ||||
|       Style="{StaticResource FilterPickerStyle}"/> | ||||
|     <controls:BindablePicker  | ||||
|       Grid.Row="1" | ||||
|       Title="TYPE"   | ||||
|       ItemsSource="{Binding Types}" | ||||
|       SelectedItem="{Binding Type, Mode=TwoWay}" | ||||
|       Style="{StaticResource FilterPickerStyle}"/> | ||||
|     <Button  | ||||
|       Grid.Row="2" | ||||
|       Text="Apply"  | ||||
|       Style="{StaticResource FilterButtonStyle}" | ||||
|       Command="{Binding FilterCommand}"/>    | ||||
|     <Button | ||||
|       Grid.Row="3" | ||||
|       Text="Clear" | ||||
|       IsVisible="{Binding IsFilter}" | ||||
|       Style="{StaticResource ClearFilterButtonStyle}" | ||||
|       Command="{Binding ClearFilterCommand}"/> | ||||
| </Grid> | ||||
| </slideOverKit:SlideMenuView> | ||||
| @ -1,4 +1,5 @@ | ||||
| using eShopOnContainers.Core.ViewModels; | ||||
| using eShopOnContainers.Core.ViewModels.Base; | ||||
| using eShopOnContainers.ViewModels.Base; | ||||
| using Xamarin.Forms; | ||||
| 
 | ||||
| @ -15,6 +16,22 @@ namespace eShopOnContainers.Core.Views | ||||
|         { | ||||
|             base.OnAppearing(); | ||||
| 
 | ||||
|             MessagingCenter.Subscribe<MainViewModel, int>(this, MessengerKeys.ChangeTab, (sender, arg) => | ||||
|             { | ||||
|                switch(arg) | ||||
|                 { | ||||
|                     case 0: | ||||
|                         CurrentPage = HomeView; | ||||
|                         break; | ||||
|                     case 1: | ||||
|                         CurrentPage = ProfileView; | ||||
|                         break; | ||||
|                     case 2: | ||||
|                         CurrentPage = CartView; | ||||
|                         break; | ||||
|                 } | ||||
|             }); | ||||
| 
 | ||||
|             var homeViewModel = ViewModelLocator.Instance.Resolve<CatalogViewModel>(); | ||||
|             await homeViewModel.InitializeAsync(null); | ||||
|             HomeView.BindingContext = homeViewModel; | ||||
|  | ||||
| @ -176,16 +176,16 @@ | ||||
|                 <StackLayout | ||||
|                     Grid.Row="1"> | ||||
|                     <Label | ||||
|                         Text="120 E 87th Street" | ||||
|                         Text="{Binding User.Street}" | ||||
|                         Style="{StaticResource AddressStyle}"/> | ||||
|                     <Label | ||||
|                         Text="Seattle, WA"    | ||||
|                         Text="{Binding User.City}"    | ||||
|                         Style="{StaticResource AddressStyle}"/> | ||||
|                     <Label | ||||
|                         Text="98122"    | ||||
|                         Text="{Binding User.CountryCode}"    | ||||
|                         Style="{StaticResource AddressStyle}"/> | ||||
|                     <Label | ||||
|                         Text="United States"    | ||||
|                         Text="{Binding User.Country}"    | ||||
|                         Style="{StaticResource AddressStyle}"/> | ||||
|                 </StackLayout> | ||||
|             </Grid> | ||||
|  | ||||
| @ -9,4 +9,4 @@ namespace eShopOnContainers.Core.Views | ||||
|             InitializeComponent(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
| @ -9,4 +9,4 @@ namespace eShopOnContainers.Core.Views | ||||
|             InitializeComponent(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
| @ -0,0 +1,134 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <ContentView | ||||
|     xmlns="http://xamarin.com/schemas/2014/forms"      | ||||
|     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"   | ||||
|     x:Class="eShopOnContainers.Core.Views.Templates.CartOrderItemTemplate"      | ||||
|     xmlns:controls="clr-namespace:eShopOnContainers.Core.Controls;assembly=eShopOnContainers.Core"    | ||||
|     xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"> | ||||
|     <ContentView.Resources> | ||||
|         <ResourceDictionary> | ||||
| 
 | ||||
|             <Style x:Key="OrderItemTitleStyle"  | ||||
|                TargetType="{x:Type Label}"> | ||||
|                 <Setter Property="FontFamily" | ||||
|                         Value="{StaticResource MontserratRegular}" /> | ||||
|                 <Setter Property="FontSize"  | ||||
|                         Value="{StaticResource MediumSize}" /> | ||||
|                 <Setter Property="TextColor"  | ||||
|                         Value="{StaticResource BlackColor}" /> | ||||
|             </Style> | ||||
| 
 | ||||
|             <Style x:Key="OrderItemUnitPriceStyle"  | ||||
|                TargetType="{x:Type Label}"> | ||||
|                 <Setter Property="FontFamily" | ||||
|                         Value="{StaticResource MontserratRegular}" /> | ||||
|                 <Setter Property="FontSize"  | ||||
|                         Value="{StaticResource MidMediumSize}" /> | ||||
|                 <Setter Property="TextColor"  | ||||
|                         Value="{StaticResource BlackColor}" /> | ||||
|                 <Setter Property="HorizontalOptions"  | ||||
|                         Value="Start" /> | ||||
|             </Style> | ||||
| 
 | ||||
|             <Style x:Key="OrderItemQuantityStyle"  | ||||
|                TargetType="{x:Type Label}"> | ||||
|                 <Setter Property="FontFamily" | ||||
|                         Value="{StaticResource MontserratRegular}" /> | ||||
|                 <Setter Property="FontSize"  | ||||
|                         Value="{StaticResource MidMediumSize}" /> | ||||
|                 <Setter Property="TextColor"  | ||||
|                         Value="{StaticResource BlackColor}" /> | ||||
|                 <Setter Property="HorizontalOptions"  | ||||
|                         Value="End" /> | ||||
|             </Style> | ||||
|              | ||||
|             <Style x:Key="OrderTotalStyle"  | ||||
|                TargetType="{x:Type Label}"> | ||||
|                 <Setter Property="FontFamily" | ||||
|                         Value="{StaticResource MontserratRegular}" /> | ||||
|                 <Setter Property="FontSize"  | ||||
|                         Value="{StaticResource LargerSize}" /> | ||||
|                 <Setter Property="TextColor"  | ||||
|                         Value="{StaticResource GreenColor}" /> | ||||
|                 <Setter Property="HorizontalOptions"  | ||||
|                         Value="End" /> | ||||
|             </Style> | ||||
| 
 | ||||
|             <Style x:Key="QuantityPickerStyle"   | ||||
|              TargetType="{x:Type controls:BindablePicker}"> | ||||
|                 <Setter Property="WidthRequest" | ||||
|                         Value="36" /> | ||||
|                 <Setter Property="BackgroundColor" | ||||
|                         Value="Transparent" /> | ||||
|                 <Setter Property="HorizontalOptions" | ||||
|                         Value="End" /> | ||||
|                 <Setter Property="VerticalOptions" | ||||
|                         Value="Fill" /> | ||||
|             </Style> | ||||
|              | ||||
|         </ResourceDictionary> | ||||
|     </ContentView.Resources> | ||||
|     <ContentView.Content> | ||||
|         <Grid    | ||||
|             BackgroundColor="{StaticResource BackgroundColor}"> | ||||
|             <Grid.ColumnDefinitions> | ||||
|                 <ColumnDefinition Width="Auto" /> | ||||
|                 <ColumnDefinition Width="*" /> | ||||
|             </Grid.ColumnDefinitions> | ||||
|             <Grid.RowDefinitions> | ||||
|                 <RowDefinition Height="*" /> | ||||
|                 <RowDefinition Height="1" /> | ||||
|             </Grid.RowDefinitions> | ||||
|             <ffimageloading:CachedImage | ||||
|                 Grid.Column="0" | ||||
|                 Grid.Row="0" | ||||
|                 Source="{Binding ProductImage, Converter={StaticResource ImageConverter}}"         | ||||
|                 CacheDuration="30"                       | ||||
|                 CacheType="Disk"              | ||||
|                 DownsampleToViewSize="True" | ||||
|                 HeightRequest="108"  | ||||
|                 WidthRequest="108" | ||||
|                 Aspect="AspectFit" | ||||
|                 VerticalOptions="Start" | ||||
|                 Margin="12,0,0,0"/> | ||||
|             <Grid | ||||
|                 Grid.Column="1" | ||||
|                 Grid.Row="0" | ||||
|                 Margin="6"> | ||||
|                 <Grid.RowDefinitions> | ||||
|                     <RowDefinition /> | ||||
|                     <RowDefinition /> | ||||
|                     <RowDefinition /> | ||||
|                 </Grid.RowDefinitions> | ||||
|                 <Label | ||||
|                     Grid.Row="0" | ||||
|                     Text="{Binding ProductName, Converter={StaticResource ToUpperConverter}}"/> | ||||
|                 <Grid | ||||
|                     Grid.Row="1"> | ||||
|                     <Grid.ColumnDefinitions> | ||||
|                         <ColumnDefinition /> | ||||
|                         <ColumnDefinition /> | ||||
|                     </Grid.ColumnDefinitions> | ||||
|                     <Label  | ||||
|                         Grid.Column="0" | ||||
|                         Text="{Binding UnitPrice, StringFormat='${0:N}'}" | ||||
|                         Style="{StaticResource OrderItemUnitPriceStyle}"/> | ||||
|                     <controls:BindablePicker  | ||||
|                         Grid.Column="1" | ||||
|                         ItemsSource="{Binding Numbers}" | ||||
|                         SelectedItem="{Binding Quantity, Mode=TwoWay}" | ||||
|                         Style="{StaticResource QuantityPickerStyle}"/> | ||||
|                 </Grid> | ||||
|                 <Label | ||||
|                     Grid.Row="2" | ||||
|                     Text="{Binding Total, StringFormat='${0:N}'}" | ||||
|                     Style="{StaticResource OrderTotalStyle}"/> | ||||
|             </Grid> | ||||
|             <Grid  | ||||
|                 Grid.Column="0" | ||||
|                 Grid.ColumnSpan="2" | ||||
|                 Grid.Row="1" | ||||
|                 BackgroundColor="Gray"/> | ||||
|         </Grid> | ||||
|     </ContentView.Content> | ||||
| </ContentView> | ||||
| @ -0,0 +1,12 @@ | ||||
| using Xamarin.Forms; | ||||
| 
 | ||||
| namespace eShopOnContainers.Core.Views.Templates | ||||
| { | ||||
|     public partial class CartOrderItemTemplate : ContentView | ||||
|     { | ||||
|         public CartOrderItemTemplate() | ||||
|         { | ||||
|             InitializeComponent(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -49,13 +49,19 @@ | ||||
|     <Compile Include="Converters\CountToBoolConverter.cs" /> | ||||
|     <Compile Include="Converters\DatetimeConverter.cs" /> | ||||
|     <Compile Include="Converters\ImageConverter.cs" /> | ||||
|     <Compile Include="Converters\InverseBoolConverter.cs" /> | ||||
|     <Compile Include="Converters\InverseCountToBoolConverter.cs" /> | ||||
|     <Compile Include="Converters\ItemTappedConverter.cs" /> | ||||
|     <Compile Include="Converters\ToUpperConverter.cs" /> | ||||
|     <Compile Include="Effects\LineColorEffect.cs" /> | ||||
|     <Compile Include="Extensions\AnimationExtension.cs" /> | ||||
|     <Compile Include="Extensions\ObservableExtension.cs" /> | ||||
|     <Compile Include="GlobalSettings.cs" /> | ||||
|     <Compile Include="Helpers\EasingHelper.cs" /> | ||||
|     <Compile Include="Helpers\NumericHelper.cs" /> | ||||
|     <Compile Include="Models\Catalog\CatalogBrand.cs" /> | ||||
|     <Compile Include="Models\Catalog\CatalogType.cs" /> | ||||
|     <Compile Include="Models\Navigation\TabParameter.cs" /> | ||||
|     <Compile Include="Models\Orders\Order.cs" /> | ||||
|     <Compile Include="Models\Orders\OrderItem.cs" /> | ||||
|     <Compile Include="Models\Orders\OrderStatus.cs" /> | ||||
| @ -72,6 +78,8 @@ | ||||
|     <Compile Include="Services\Orders\IOrdersService.cs" /> | ||||
|     <Compile Include="Services\Catalog\CatalogMockService.cs" /> | ||||
|     <Compile Include="Services\Catalog\ICatalogService.cs" /> | ||||
|     <Compile Include="Services\User\IUserService.cs" /> | ||||
|     <Compile Include="Services\User\UserMockService.cs" /> | ||||
|     <Compile Include="Triggers\BeginAnimation.cs" /> | ||||
|     <Compile Include="Validations\IsNotNullOrEmptyRule.cs" /> | ||||
|     <Compile Include="Validations\IValidationRule.cs" /> | ||||
| @ -83,6 +91,7 @@ | ||||
|     <Compile Include="ViewModels\Base\ViewModelLocator.cs" /> | ||||
|     <Compile Include="ViewModels\CartViewModel.cs" /> | ||||
|     <Compile Include="ViewModels\CatalogViewModel.cs" /> | ||||
|     <Compile Include="ViewModels\CheckoutViewModel.cs" /> | ||||
|     <Compile Include="ViewModels\LoginViewModel.cs" /> | ||||
|     <Compile Include="ViewModels\MainViewModel.cs" /> | ||||
|     <Compile Include="ViewModels\OrderDetailViewModel.cs" /> | ||||
| @ -90,6 +99,9 @@ | ||||
|     <Compile Include="Views\CartView.xaml.cs"> | ||||
|       <DependentUpon>CartView.xaml</DependentUpon> | ||||
|     </Compile> | ||||
|     <Compile Include="Views\CheckoutView.xaml.cs"> | ||||
|       <DependentUpon>CheckoutView.xaml</DependentUpon> | ||||
|     </Compile> | ||||
|     <Compile Include="Views\CustomNavigationPage.xaml.cs"> | ||||
|       <DependentUpon>CustomNavigationPage.xaml</DependentUpon> | ||||
|     </Compile> | ||||
| @ -111,6 +123,9 @@ | ||||
|     <Compile Include="Views\ProfileView.xaml.cs"> | ||||
|       <DependentUpon>ProfileView.xaml</DependentUpon> | ||||
|     </Compile> | ||||
|     <Compile Include="Views\Templates\CartOrderItemTemplate.xaml.cs"> | ||||
|       <DependentUpon>CartOrderItemTemplate.xaml</DependentUpon> | ||||
|     </Compile> | ||||
|     <Compile Include="Views\Templates\OrderItemTemplate.xaml.cs"> | ||||
|       <DependentUpon>OrderItemTemplate.xaml</DependentUpon> | ||||
|     </Compile> | ||||
| @ -267,6 +282,18 @@ | ||||
|       <SubType>Designer</SubType> | ||||
|     </EmbeddedResource> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <EmbeddedResource Include="Views\CheckoutView.xaml"> | ||||
|       <Generator>MSBuild:UpdateDesignTimeXaml</Generator> | ||||
|       <SubType>Designer</SubType> | ||||
|     </EmbeddedResource> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <EmbeddedResource Include="Views\Templates\CartOrderItemTemplate.xaml"> | ||||
|       <Generator>MSBuild:UpdateDesignTimeXaml</Generator> | ||||
|       <SubType>Designer</SubType> | ||||
|     </EmbeddedResource> | ||||
|   </ItemGroup> | ||||
|   <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" /> | ||||
|   <Import Project="..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" /> | ||||
|   <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> | ||||
|  | ||||
| @ -4,6 +4,7 @@ using Android.Content.PM; | ||||
| using Android.Views; | ||||
| using Xamarin.Forms.Platform.Android; | ||||
| using FFImageLoading.Forms.Droid; | ||||
| using Acr.UserDialogs; | ||||
| 
 | ||||
| namespace eShopOnContainers.Droid.Activities | ||||
| { | ||||
| @ -28,6 +29,7 @@ namespace eShopOnContainers.Droid.Activities | ||||
|             SupportActionBar.SetDisplayShowTitleEnabled(false); | ||||
| 
 | ||||
|             global::Xamarin.Forms.Forms.Init(this, bundle); | ||||
|             UserDialogs.Init(this); | ||||
|             CachedImageRenderer.Init(); | ||||
|             LoadApplication(new App()); | ||||
| 
 | ||||
|  | ||||
| @ -2039,289 +2039,295 @@ namespace eShopOnContainers.Droid | ||||
| 			public const int fake_product_03 = 2130837584; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020051 | ||||
| 			public const int ic_audiotrack = 2130837585; | ||||
| 			public const int fake_product_04 = 2130837585; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020052 | ||||
| 			public const int ic_audiotrack_light = 2130837586; | ||||
| 			public const int fake_product_05 = 2130837586; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020053 | ||||
| 			public const int ic_bluetooth_grey = 2130837587; | ||||
| 			public const int ic_audiotrack = 2130837587; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020054 | ||||
| 			public const int ic_bluetooth_white = 2130837588; | ||||
| 			public const int ic_audiotrack_light = 2130837588; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020055 | ||||
| 			public const int ic_cast_dark = 2130837589; | ||||
| 			public const int ic_bluetooth_grey = 2130837589; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020056 | ||||
| 			public const int ic_cast_disabled_light = 2130837590; | ||||
| 			public const int ic_bluetooth_white = 2130837590; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020057 | ||||
| 			public const int ic_cast_grey = 2130837591; | ||||
| 			public const int ic_cast_dark = 2130837591; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020058 | ||||
| 			public const int ic_cast_light = 2130837592; | ||||
| 			public const int ic_cast_disabled_light = 2130837592; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020059 | ||||
| 			public const int ic_cast_off_light = 2130837593; | ||||
| 			public const int ic_cast_grey = 2130837593; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02005a | ||||
| 			public const int ic_cast_on_0_light = 2130837594; | ||||
| 			public const int ic_cast_light = 2130837594; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02005b | ||||
| 			public const int ic_cast_on_1_light = 2130837595; | ||||
| 			public const int ic_cast_off_light = 2130837595; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02005c | ||||
| 			public const int ic_cast_on_2_light = 2130837596; | ||||
| 			public const int ic_cast_on_0_light = 2130837596; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02005d | ||||
| 			public const int ic_cast_on_light = 2130837597; | ||||
| 			public const int ic_cast_on_1_light = 2130837597; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02005e | ||||
| 			public const int ic_cast_white = 2130837598; | ||||
| 			public const int ic_cast_on_2_light = 2130837598; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02005f | ||||
| 			public const int ic_close_dark = 2130837599; | ||||
| 			public const int ic_cast_on_light = 2130837599; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020060 | ||||
| 			public const int ic_close_light = 2130837600; | ||||
| 			public const int ic_cast_white = 2130837600; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020061 | ||||
| 			public const int ic_collapse = 2130837601; | ||||
| 			public const int ic_close_dark = 2130837601; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020062 | ||||
| 			public const int ic_collapse_00000 = 2130837602; | ||||
| 			public const int ic_close_light = 2130837602; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020063 | ||||
| 			public const int ic_collapse_00001 = 2130837603; | ||||
| 			public const int ic_collapse = 2130837603; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020064 | ||||
| 			public const int ic_collapse_00002 = 2130837604; | ||||
| 			public const int ic_collapse_00000 = 2130837604; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020065 | ||||
| 			public const int ic_collapse_00003 = 2130837605; | ||||
| 			public const int ic_collapse_00001 = 2130837605; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020066 | ||||
| 			public const int ic_collapse_00004 = 2130837606; | ||||
| 			public const int ic_collapse_00002 = 2130837606; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020067 | ||||
| 			public const int ic_collapse_00005 = 2130837607; | ||||
| 			public const int ic_collapse_00003 = 2130837607; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020068 | ||||
| 			public const int ic_collapse_00006 = 2130837608; | ||||
| 			public const int ic_collapse_00004 = 2130837608; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020069 | ||||
| 			public const int ic_collapse_00007 = 2130837609; | ||||
| 			public const int ic_collapse_00005 = 2130837609; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02006a | ||||
| 			public const int ic_collapse_00008 = 2130837610; | ||||
| 			public const int ic_collapse_00006 = 2130837610; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02006b | ||||
| 			public const int ic_collapse_00009 = 2130837611; | ||||
| 			public const int ic_collapse_00007 = 2130837611; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02006c | ||||
| 			public const int ic_collapse_00010 = 2130837612; | ||||
| 			public const int ic_collapse_00008 = 2130837612; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02006d | ||||
| 			public const int ic_collapse_00011 = 2130837613; | ||||
| 			public const int ic_collapse_00009 = 2130837613; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02006e | ||||
| 			public const int ic_collapse_00012 = 2130837614; | ||||
| 			public const int ic_collapse_00010 = 2130837614; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02006f | ||||
| 			public const int ic_collapse_00013 = 2130837615; | ||||
| 			public const int ic_collapse_00011 = 2130837615; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020070 | ||||
| 			public const int ic_collapse_00014 = 2130837616; | ||||
| 			public const int ic_collapse_00012 = 2130837616; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020071 | ||||
| 			public const int ic_collapse_00015 = 2130837617; | ||||
| 			public const int ic_collapse_00013 = 2130837617; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020072 | ||||
| 			public const int ic_errorstatus = 2130837618; | ||||
| 			public const int ic_collapse_00014 = 2130837618; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020073 | ||||
| 			public const int ic_expand = 2130837619; | ||||
| 			public const int ic_collapse_00015 = 2130837619; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020074 | ||||
| 			public const int ic_expand_00000 = 2130837620; | ||||
| 			public const int ic_errorstatus = 2130837620; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020075 | ||||
| 			public const int ic_expand_00001 = 2130837621; | ||||
| 			public const int ic_expand = 2130837621; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020076 | ||||
| 			public const int ic_expand_00002 = 2130837622; | ||||
| 			public const int ic_expand_00000 = 2130837622; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020077 | ||||
| 			public const int ic_expand_00003 = 2130837623; | ||||
| 			public const int ic_expand_00001 = 2130837623; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020078 | ||||
| 			public const int ic_expand_00004 = 2130837624; | ||||
| 			public const int ic_expand_00002 = 2130837624; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020079 | ||||
| 			public const int ic_expand_00005 = 2130837625; | ||||
| 			public const int ic_expand_00003 = 2130837625; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02007a | ||||
| 			public const int ic_expand_00006 = 2130837626; | ||||
| 			public const int ic_expand_00004 = 2130837626; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02007b | ||||
| 			public const int ic_expand_00007 = 2130837627; | ||||
| 			public const int ic_expand_00005 = 2130837627; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02007c | ||||
| 			public const int ic_expand_00008 = 2130837628; | ||||
| 			public const int ic_expand_00006 = 2130837628; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02007d | ||||
| 			public const int ic_expand_00009 = 2130837629; | ||||
| 			public const int ic_expand_00007 = 2130837629; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02007e | ||||
| 			public const int ic_expand_00010 = 2130837630; | ||||
| 			public const int ic_expand_00008 = 2130837630; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02007f | ||||
| 			public const int ic_expand_00011 = 2130837631; | ||||
| 			public const int ic_expand_00009 = 2130837631; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020080 | ||||
| 			public const int ic_expand_00012 = 2130837632; | ||||
| 			public const int ic_expand_00010 = 2130837632; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020081 | ||||
| 			public const int ic_expand_00013 = 2130837633; | ||||
| 			public const int ic_expand_00011 = 2130837633; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020082 | ||||
| 			public const int ic_expand_00014 = 2130837634; | ||||
| 			public const int ic_expand_00012 = 2130837634; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020083 | ||||
| 			public const int ic_expand_00015 = 2130837635; | ||||
| 			public const int ic_expand_00013 = 2130837635; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020084 | ||||
| 			public const int ic_media_pause = 2130837636; | ||||
| 			public const int ic_expand_00014 = 2130837636; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020085 | ||||
| 			public const int ic_media_play = 2130837637; | ||||
| 			public const int ic_expand_00015 = 2130837637; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020086 | ||||
| 			public const int ic_media_route_disabled_mono_dark = 2130837638; | ||||
| 			public const int ic_media_pause = 2130837638; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020087 | ||||
| 			public const int ic_media_route_off_mono_dark = 2130837639; | ||||
| 			public const int ic_media_play = 2130837639; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020088 | ||||
| 			public const int ic_media_route_on_0_mono_dark = 2130837640; | ||||
| 			public const int ic_media_route_disabled_mono_dark = 2130837640; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020089 | ||||
| 			public const int ic_media_route_on_1_mono_dark = 2130837641; | ||||
| 			public const int ic_media_route_off_mono_dark = 2130837641; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02008a | ||||
| 			public const int ic_media_route_on_2_mono_dark = 2130837642; | ||||
| 			public const int ic_media_route_on_0_mono_dark = 2130837642; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02008b | ||||
| 			public const int ic_media_route_on_mono_dark = 2130837643; | ||||
| 			public const int ic_media_route_on_1_mono_dark = 2130837643; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02008c | ||||
| 			public const int ic_pause_dark = 2130837644; | ||||
| 			public const int ic_media_route_on_2_mono_dark = 2130837644; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02008d | ||||
| 			public const int ic_pause_light = 2130837645; | ||||
| 			public const int ic_media_route_on_mono_dark = 2130837645; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02008e | ||||
| 			public const int ic_play_dark = 2130837646; | ||||
| 			public const int ic_pause_dark = 2130837646; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02008f | ||||
| 			public const int ic_play_light = 2130837647; | ||||
| 			public const int ic_pause_light = 2130837647; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020090 | ||||
| 			public const int ic_speaker_dark = 2130837648; | ||||
| 			public const int ic_play_dark = 2130837648; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020091 | ||||
| 			public const int ic_speaker_group_dark = 2130837649; | ||||
| 			public const int ic_play_light = 2130837649; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020092 | ||||
| 			public const int ic_speaker_group_light = 2130837650; | ||||
| 			public const int ic_speaker_dark = 2130837650; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020093 | ||||
| 			public const int ic_speaker_light = 2130837651; | ||||
| 			public const int ic_speaker_group_dark = 2130837651; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020094 | ||||
| 			public const int ic_successstatus = 2130837652; | ||||
| 			public const int ic_speaker_group_light = 2130837652; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020095 | ||||
| 			public const int ic_tv_dark = 2130837653; | ||||
| 			public const int ic_speaker_light = 2130837653; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020096 | ||||
| 			public const int ic_tv_light = 2130837654; | ||||
| 			public const int ic_successstatus = 2130837654; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020097 | ||||
| 			public const int icon = 2130837655; | ||||
| 			public const int ic_tv_dark = 2130837655; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020098 | ||||
| 			public const int menu_cart = 2130837656; | ||||
| 			public const int ic_tv_light = 2130837656; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f020099 | ||||
| 			public const int menu_filter = 2130837657; | ||||
| 			public const int icon = 2130837657; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02009a | ||||
| 			public const int menu_profile = 2130837658; | ||||
| 			public const int menu_cart = 2130837658; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02009b | ||||
| 			public const int mr_dialog_material_background_dark = 2130837659; | ||||
| 			public const int menu_filter = 2130837659; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02009c | ||||
| 			public const int mr_dialog_material_background_light = 2130837660; | ||||
| 			public const int menu_profile = 2130837660; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02009d | ||||
| 			public const int mr_ic_audiotrack_light = 2130837661; | ||||
| 			public const int mr_dialog_material_background_dark = 2130837661; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02009e | ||||
| 			public const int mr_ic_cast_dark = 2130837662; | ||||
| 			public const int mr_dialog_material_background_light = 2130837662; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f02009f | ||||
| 			public const int mr_ic_cast_light = 2130837663; | ||||
| 			public const int mr_ic_audiotrack_light = 2130837663; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200a0 | ||||
| 			public const int mr_ic_close_dark = 2130837664; | ||||
| 			public const int mr_ic_cast_dark = 2130837664; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200a1 | ||||
| 			public const int mr_ic_close_light = 2130837665; | ||||
| 			public const int mr_ic_cast_light = 2130837665; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200a2 | ||||
| 			public const int mr_ic_media_route_connecting_mono_dark = 2130837666; | ||||
| 			public const int mr_ic_close_dark = 2130837666; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200a3 | ||||
| 			public const int mr_ic_media_route_connecting_mono_light = 2130837667; | ||||
| 			public const int mr_ic_close_light = 2130837667; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200a4 | ||||
| 			public const int mr_ic_media_route_mono_dark = 2130837668; | ||||
| 			public const int mr_ic_media_route_connecting_mono_dark = 2130837668; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200a5 | ||||
| 			public const int mr_ic_media_route_mono_light = 2130837669; | ||||
| 			public const int mr_ic_media_route_connecting_mono_light = 2130837669; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200a6 | ||||
| 			public const int mr_ic_pause_dark = 2130837670; | ||||
| 			public const int mr_ic_media_route_mono_dark = 2130837670; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200a7 | ||||
| 			public const int mr_ic_pause_light = 2130837671; | ||||
| 			public const int mr_ic_media_route_mono_light = 2130837671; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200a8 | ||||
| 			public const int mr_ic_play_dark = 2130837672; | ||||
| 			public const int mr_ic_pause_dark = 2130837672; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200a9 | ||||
| 			public const int mr_ic_play_light = 2130837673; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200af | ||||
| 			public const int notification_template_icon_bg = 2130837679; | ||||
| 			public const int mr_ic_pause_light = 2130837673; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200aa | ||||
| 			public const int product_add = 2130837674; | ||||
| 			public const int mr_ic_play_dark = 2130837674; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200ab | ||||
| 			public const int roundedbg = 2130837675; | ||||
| 			public const int mr_ic_play_light = 2130837675; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200b1 | ||||
| 			public const int notification_template_icon_bg = 2130837681; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200ac | ||||
| 			public const int roundedbgdark = 2130837676; | ||||
| 			public const int product_add = 2130837676; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200ad | ||||
| 			public const int splash_drawable = 2130837677; | ||||
| 			public const int roundedbg = 2130837677; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200ae | ||||
| 			public const int user_profile = 2130837678; | ||||
| 			public const int roundedbgdark = 2130837678; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200af | ||||
| 			public const int splash_drawable = 2130837679; | ||||
| 			 | ||||
| 			// aapt resource value: 0x7f0200b0 | ||||
| 			public const int user_profile = 2130837680; | ||||
| 			 | ||||
| 			static Drawable() | ||||
| 			{ | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 81 KiB | 
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 498 KiB | 
| @ -322,6 +322,12 @@ | ||||
|   <ItemGroup> | ||||
|     <AndroidResource Include="Resources\drawable-xxxhdpi\background.png" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <AndroidResource Include="Resources\drawable\fake_product_04.png" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <AndroidResource Include="Resources\drawable\fake_product_05.png" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" /> | ||||
|   <Import Project="..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets" Condition="Exists('..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets')" /> | ||||
|   <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 81 KiB | 
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 498 KiB | 
| @ -122,6 +122,8 @@ | ||||
|     <Content Include="Assets\fake_product_01.png" /> | ||||
|     <Content Include="Assets\fake_product_02.png" /> | ||||
|     <Content Include="Assets\fake_product_03.png" /> | ||||
|     <Content Include="Assets\fake_product_04.png" /> | ||||
|     <Content Include="Assets\fake_product_05.png" /> | ||||
|     <Content Include="Assets\menu_cart.png" /> | ||||
|     <Content Include="Assets\menu_filter.png" /> | ||||
|     <Content Include="Assets\menu_profile.png" /> | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 81 KiB | 
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 498 KiB | 
| @ -240,6 +240,12 @@ | ||||
|   <ItemGroup> | ||||
|     <BundleResource Include="Resources\fake_product_02.png" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <BundleResource Include="Resources\fake_product_04.png" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <BundleResource Include="Resources\fake_product_05.png" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" /> | ||||
|   <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> | ||||
|     <PropertyGroup> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user