├── screenshots ├── home.png ├── home2.png ├── login.png ├── popup.png ├── product.png ├── sub-category.png ├── customer-info.png └── list-template.png ├── src ├── nopCommerceMobile.iOS │ ├── Resources │ │ ├── Default.png │ │ ├── ionicons.ttf │ │ ├── rating1.png │ │ ├── rating2.png │ │ ├── fa-solid-900.ttf │ │ ├── Montserrat-Regular.otf │ │ ├── Montserrat-SemiBold.otf │ │ └── LaunchScreen.storyboard │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── Icon20.png │ │ │ ├── Icon29.png │ │ │ ├── Icon40.png │ │ │ ├── Icon58.png │ │ │ ├── Icon60.png │ │ │ ├── Icon76.png │ │ │ ├── Icon80.png │ │ │ ├── Icon87.png │ │ │ ├── Icon1024.png │ │ │ ├── Icon120.png │ │ │ ├── Icon152.png │ │ │ ├── Icon167.png │ │ │ ├── Icon180.png │ │ │ └── Contents.json │ ├── Entitlements.plist │ ├── Main.cs │ ├── Renderers │ │ ├── EntryRenderer.cs │ │ └── ButtonRenderer.cs │ ├── AppDelegate.cs │ ├── Info.plist │ └── Properties │ │ └── AssemblyInfo.cs ├── nopCommerceMobile.Android │ ├── Assets │ │ ├── ionicons.ttf │ │ ├── fa-solid-900.ttf │ │ ├── Montserrat-Regular.otf │ │ ├── Montserrat-SemiBold.otf │ │ └── AboutAssets.txt │ ├── Resources │ │ ├── drawable-hdpi │ │ │ ├── icon.png │ │ │ ├── rating1.png │ │ │ ├── rating2.png │ │ │ └── background.png │ │ ├── values │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ ├── layout │ │ │ ├── Toolbar.xml │ │ │ └── Tabbar.xml │ │ └── AboutResources.txt │ ├── Properties │ │ ├── AndroidManifest.xml │ │ └── AssemblyInfo.cs │ ├── Activities │ │ ├── SplashActivity.cs │ │ └── MainActivity.cs │ ├── Renderers │ │ └── EntryRenderer.cs │ └── Services │ │ └── Common │ │ └── ToastPopUpService.cs └── nopCommerceMobile │ ├── Services │ ├── Settings │ │ ├── ISettingsService.cs │ │ └── SettingsService.cs │ ├── Dependency │ │ ├── IDependencyService.cs │ │ └── DependencyService.cs │ ├── Topic │ │ ├── ITopicService.cs │ │ └── TopicService.cs │ ├── Catalog │ │ ├── IProductService.cs │ │ ├── IShoppingCartService.cs │ │ ├── ProductService.cs │ │ ├── ICatalogService.cs │ │ ├── ShoppingCartService.cs │ │ └── CatalogService.cs │ ├── Common │ │ └── IToastPopUpService.cs │ ├── Localization │ │ ├── ILocalizationService.cs │ │ └── LocalizationService.cs │ ├── RequestProvider │ │ ├── IRequestProvider.cs │ │ └── HttpRequestExceptionEx.cs │ ├── Navigation │ │ ├── INavigationService.cs │ │ └── NavigationService.cs │ └── Customer │ │ └── ICustomerService.cs │ ├── Models │ ├── Catalog │ │ ├── SliderModel.cs │ │ ├── ShoppingCartType.cs │ │ ├── SubCategoryModel.cs │ │ ├── CategorySimpleModel.cs │ │ ├── CategoryNavigationModel.cs │ │ ├── AttributeControlType.cs │ │ ├── CategoryModel.cs │ │ └── ProductModel.cs │ ├── Base │ │ ├── GenericModel.cs │ │ └── BaseModel.cs │ ├── Common │ │ ├── LanguageModel.cs │ │ ├── CurrencyModel.cs │ │ ├── AddressAttributeModel.cs │ │ └── AddressModel.cs │ ├── Media │ │ └── PictureModel.cs │ ├── Localization │ │ └── LocaleResourceModel.cs │ ├── Topics │ │ └── TopicModel.cs │ ├── News │ │ └── NewsItemModel.cs │ ├── Customer │ │ ├── LoginModel.cs │ │ ├── CustomerRoleModel.cs │ │ └── CustomerExtensions.cs │ ├── Orders │ │ └── ShoppingCartItemModel.cs │ └── ShoppingCart │ │ └── WishlistModel.cs │ ├── ViewModels │ ├── Common │ │ ├── SelectListPageEnum.cs │ │ ├── SelectListViewModel.cs │ │ └── SelectListItemViewModel.cs │ ├── Base │ │ ├── Enums.cs │ │ ├── ModelBoundTabbedPage.cs │ │ ├── ModelBoundContentPage.cs │ │ ├── ModelBoundContentView.cs │ │ ├── ExtendedBindableObject.cs │ │ ├── BaseViewModel.cs │ │ └── LocatorViewModel.cs │ ├── Navigation │ │ └── NavigationPageEnum.cs │ ├── News │ │ └── NewsViewModel.cs │ ├── Catalog │ │ ├── CategoriesViewModel.cs │ │ ├── CategoryNavigationViewModel.cs │ │ ├── CategoryViewModel.cs │ │ └── ProductViewModel.cs │ ├── Customer │ │ ├── RegisterViewModel.cs │ │ ├── LoginViewModel.cs │ │ └── CustomerViewModel.cs │ ├── ShoppingCart │ │ └── CartViewViewModel.cs │ ├── NavigationViewModel.cs │ └── HomeViewModel.cs │ ├── Helpers │ ├── EnumHelpers.cs │ ├── FontAwesome.cs │ └── Ionicons.cs │ ├── GlobalSettings.cs │ ├── Views │ ├── Common │ │ ├── NoInternetPage.xaml.cs │ │ ├── NoInternetPage.xaml │ │ ├── SelectListPage.xaml │ │ └── SelectListPage.xaml.cs │ ├── Partial │ │ ├── NewsViewTemplate.xaml.cs │ │ ├── NewsViewTemplate.xaml │ │ └── ItemViewTemplate.xaml.cs │ ├── News │ │ ├── NewsPage.xaml.cs │ │ └── NewsPage.xaml │ ├── ShoppingCart │ │ ├── CartView.xaml.cs │ │ └── CartView.xaml │ ├── Customer │ │ ├── RegisterPage.xaml.cs │ │ ├── LoginPage.xaml.cs │ │ └── LoginPage.xaml │ ├── Catalog │ │ ├── CategoryNavigationPage.xaml.cs │ │ ├── CategoriesPage.xaml.cs │ │ ├── CategoriesPage.xaml │ │ ├── CategoryNavigationView.xaml │ │ ├── CategoryNavigationView.xaml.cs │ │ └── CategoryNavigationPage.xaml │ ├── HomeView.xaml.cs │ └── AppNavigationPage.xaml.cs │ ├── Exceptions │ └── ServiceAuthenticationException.cs │ ├── Converters │ ├── InverseBooleanConverter.cs │ ├── ListConverters.cs │ └── DefaultConverters.cs │ ├── Extensions │ ├── ObservableExtension.cs │ ├── HtmlExtensions.cs │ └── TranslateExtension.cs │ ├── Components │ ├── AppCheckbox.cs │ ├── Rating.cs │ └── PopupNotification.cs │ ├── App.xaml.cs │ └── nopCommerceMobile.csproj ├── README.md └── .gitignore /screenshots/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/screenshots/home.png -------------------------------------------------------------------------------- /screenshots/home2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/screenshots/home2.png -------------------------------------------------------------------------------- /screenshots/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/screenshots/login.png -------------------------------------------------------------------------------- /screenshots/popup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/screenshots/popup.png -------------------------------------------------------------------------------- /screenshots/product.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/screenshots/product.png -------------------------------------------------------------------------------- /screenshots/sub-category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/screenshots/sub-category.png -------------------------------------------------------------------------------- /screenshots/customer-info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/screenshots/customer-info.png -------------------------------------------------------------------------------- /screenshots/list-template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/screenshots/list-template.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Resources/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Resources/Default.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Resources/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Resources/ionicons.ttf -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Resources/rating1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Resources/rating1.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Resources/rating2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Resources/rating2.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.Android/Assets/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.Android/Assets/ionicons.ttf -------------------------------------------------------------------------------- /src/nopCommerceMobile.Android/Assets/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.Android/Assets/fa-solid-900.ttf -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Resources/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Resources/fa-solid-900.ttf -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Resources/Montserrat-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Resources/Montserrat-Regular.otf -------------------------------------------------------------------------------- /src/nopCommerceMobile/Services/Settings/ISettingsService.cs: -------------------------------------------------------------------------------- 1 | namespace nopCommerceMobile.Services.Settings 2 | { 3 | public interface ISettingsService 4 | { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/nopCommerceMobile.Android/Assets/Montserrat-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.Android/Assets/Montserrat-Regular.otf -------------------------------------------------------------------------------- /src/nopCommerceMobile.Android/Assets/Montserrat-SemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.Android/Assets/Montserrat-SemiBold.otf -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Resources/Montserrat-SemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Resources/Montserrat-SemiBold.otf -------------------------------------------------------------------------------- /src/nopCommerceMobile.Android/Resources/drawable-hdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.Android/Resources/drawable-hdpi/icon.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.Android/Resources/drawable-hdpi/rating1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.Android/Resources/drawable-hdpi/rating1.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.Android/Resources/drawable-hdpi/rating2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.Android/Resources/drawable-hdpi/rating2.png -------------------------------------------------------------------------------- /src/nopCommerceMobile/Services/Settings/SettingsService.cs: -------------------------------------------------------------------------------- 1 | namespace nopCommerceMobile.Services.Settings 2 | { 3 | public class SettingsService : ISettingsService 4 | { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/nopCommerceMobile.Android/Resources/drawable-hdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.Android/Resources/drawable-hdpi/background.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GomeniucIvan/nopCommerceMobile/HEAD/src/nopCommerceMobile.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png -------------------------------------------------------------------------------- /src/nopCommerceMobile/Models/Catalog/SliderModel.cs: -------------------------------------------------------------------------------- 1 | namespace nopCommerceMobile.Models.Catalog 2 | { 3 | public class SliderModel 4 | { 5 | public string Image { get; set; } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/ViewModels/Common/SelectListPageEnum.cs: -------------------------------------------------------------------------------- 1 | namespace nopCommerceMobile.ViewModels.Common 2 | { 3 | public enum SelectListPageEnum 4 | { 5 | Languages, 6 | Currencies 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Services/Dependency/IDependencyService.cs: -------------------------------------------------------------------------------- 1 | namespace nopCommerceMobile.Services.Dependency 2 | { 3 | public interface IDependencyService 4 | { 5 | T Get() where T : class; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/ViewModels/Base/Enums.cs: -------------------------------------------------------------------------------- 1 | namespace nopCommerceMobile.ViewModels.Base 2 | { 3 | public enum NotificationTypeEnum 4 | { 5 | Success, 6 | Info, 7 | Warning, 8 | Danger 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Helpers/EnumHelpers.cs: -------------------------------------------------------------------------------- 1 | namespace nopCommerceMobile.Helpers 2 | { 3 | public enum EntryTypeEnum 4 | { 5 | Default, 6 | Email 7 | } 8 | 9 | public enum IconFontFamilyEnum 10 | { 11 | Ionics, 12 | FontAwesome 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Models/Base/GenericModel.cs: -------------------------------------------------------------------------------- 1 | namespace nopCommerceMobile.Models.Base 2 | { 3 | public class GenericModel 4 | { 5 | public bool IsSuccessStatusCode { get; set; } 6 | public string ErrorMessage { get; set; } 7 | public T Data { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/ViewModels/Navigation/NavigationPageEnum.cs: -------------------------------------------------------------------------------- 1 | namespace nopCommerceMobile.ViewModels.Navigation 2 | { 3 | public enum NavigationPageEnum 4 | { 5 | Home, 6 | Account, 7 | CategoryNavigation, //catalog 8 | ShoppingCart, 9 | WishList, 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Models/Common/LanguageModel.cs: -------------------------------------------------------------------------------- 1 | using nopCommerceMobile.Models.Base; 2 | 3 | namespace nopCommerceMobile.Models.Common 4 | { 5 | public class LanguageModel : BaseModel 6 | { 7 | public string Name { get; set; } 8 | public string FlagImageFileName { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Models/Common/CurrencyModel.cs: -------------------------------------------------------------------------------- 1 | using nopCommerceMobile.Models.Base; 2 | 3 | namespace nopCommerceMobile.Models.Common 4 | { 5 | public class CurrencyModel : BaseModel 6 | { 7 | public string Name { get; set; } 8 | 9 | public string CurrencySymbol { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Services/Topic/ITopicService.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using nopCommerceMobile.Models.Topics; 3 | 4 | namespace nopCommerceMobile.Services.Topic 5 | { 6 | public interface ITopicService 7 | { 8 | Task GetModelBySystemNameAsync(string systemName); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/nopCommerceMobile.Android/Resources/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | #3F51B5 5 | #303F9F 6 | #FF4081 7 | 8 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Services/Catalog/IProductService.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using nopCommerceMobile.Models.Catalog; 3 | 4 | namespace nopCommerceMobile.Services.Catalog 5 | { 6 | public interface IProductService 7 | { 8 | Task GetProductByIdAsync(int productId); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Services/Dependency/DependencyService.cs: -------------------------------------------------------------------------------- 1 | namespace nopCommerceMobile.Services.Dependency 2 | { 3 | public class DependencyService : IDependencyService 4 | { 5 | public T Get() where T : class 6 | { 7 | return Xamarin.Forms.DependencyService.Get(); 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/ViewModels/Base/ModelBoundTabbedPage.cs: -------------------------------------------------------------------------------- 1 | using Xamarin.Forms; 2 | 3 | namespace nopCommerceMobile.ViewModels.Base 4 | { 5 | public abstract class ModelBoundTabbedPage : TabbedPage where TViewModel : BaseViewModel 6 | { 7 | public TViewModel ViewModel => BindingContext as TViewModel; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/ViewModels/Base/ModelBoundContentPage.cs: -------------------------------------------------------------------------------- 1 | using Xamarin.Forms; 2 | 3 | namespace nopCommerceMobile.ViewModels.Base 4 | { 5 | public abstract class ModelBoundContentPage : ContentPage where TViewModel : BaseViewModel 6 | { 7 | public TViewModel ViewModel => BindingContext as TViewModel; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/ViewModels/Base/ModelBoundContentView.cs: -------------------------------------------------------------------------------- 1 | using Xamarin.Forms; 2 | 3 | namespace nopCommerceMobile.ViewModels.Base 4 | { 5 | public abstract class ModelBoundContentView : ContentView where TViewModel : BaseViewModel 6 | { 7 | public TViewModel ViewModel => BindingContext as TViewModel; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Services/Common/IToastPopUpService.cs: -------------------------------------------------------------------------------- 1 | using nopCommerceMobile.ViewModels.Base; 2 | 3 | namespace nopCommerceMobile.Services.Common 4 | { 5 | //Based on https://github.com/ishrakland/Toast 6 | public interface IToastPopUpService 7 | { 8 | void ShowToastMessage(string message, NotificationTypeEnum messageType); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/GlobalSettings.cs: -------------------------------------------------------------------------------- 1 | namespace nopCommerceMobile 2 | { 3 | public class GlobalSettings 4 | { 5 | public const string DefaultEndpoint = "http://192.168.0.103:2129"; // i.e.: "http://YOUR_IP:PORT" 6 | public const int DefaultLanguageId = 1; 7 | public static int DefaultCurrencyId = 1; // "use first available currency" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Services/Catalog/IShoppingCartService.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using nopCommerceMobile.Models.Catalog; 3 | 4 | namespace nopCommerceMobile.Services.Catalog 5 | { 6 | public interface IShoppingCartService 7 | { 8 | Task AddProductToCartAsync(ProductModel model, int quantity = 1, ShoppingCartType productType = ShoppingCartType.ShoppingCart); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Views/Common/NoInternetPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Xamarin.Forms; 2 | using Xamarin.Forms.Xaml; 3 | 4 | namespace nopCommerceMobile.Views.Common 5 | { 6 | [XamlCompilation(XamlCompilationOptions.Compile)] 7 | public partial class NoInternetPage : ContentPage 8 | { 9 | public NoInternetPage() 10 | { 11 | InitializeComponent(); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/nopCommerceMobile/Views/Partial/NewsViewTemplate.xaml.cs: -------------------------------------------------------------------------------- 1 | using Xamarin.Forms; 2 | using Xamarin.Forms.Xaml; 3 | 4 | namespace nopCommerceMobile.Views.Partial 5 | { 6 | [XamlCompilation(XamlCompilationOptions.Compile)] 7 | public partial class NewsViewTemplate : ContentView 8 | { 9 | public NewsViewTemplate() 10 | { 11 | InitializeComponent(); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/nopCommerceMobile/Models/Base/BaseModel.cs: -------------------------------------------------------------------------------- 1 | using nopCommerceMobile.ViewModels.Base; 2 | 3 | namespace nopCommerceMobile.Models.Base 4 | { 5 | /// 6 | /// Base class for model 7 | /// 8 | public class BaseModel : ExtendedBindableObject 9 | { 10 | /// 11 | /// Gets or sets the entity identifier 12 | /// 13 | public int Id { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Views/News/NewsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using nopCommerceMobile.ViewModels.Base; 2 | using nopCommerceMobile.ViewModels.News; 3 | 4 | namespace nopCommerceMobile.Views.News 5 | { 6 | public abstract class NewsPageXaml : ModelBoundContentPage { } 7 | public partial class NewsPage : NewsPageXaml 8 | { 9 | public NewsPage() 10 | { 11 | InitializeComponent(); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/nopCommerceMobile.Android/Resources/layout/Toolbar.xml: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Services/Localization/ILocalizationService.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | using nopCommerceMobile.Models.Localization; 4 | 5 | namespace nopCommerceMobile.Services.Localization 6 | { 7 | public interface ILocalizationService 8 | { 9 | Task> GetLocaleResourcesByIdAsync(int languageId); 10 | void CreateOrUpdateLocales(bool updateTable = false); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Models/Catalog/ShoppingCartType.cs: -------------------------------------------------------------------------------- 1 | namespace nopCommerceMobile.Models.Catalog 2 | { 3 | /// 4 | /// Represents a shopping cart type 5 | /// 6 | public enum ShoppingCartType 7 | { 8 | /// 9 | /// Shopping cart 10 | /// 11 | ShoppingCart = 1, 12 | 13 | /// 14 | /// Wishlist 15 | /// 16 | Wishlist = 2 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Main.cs: -------------------------------------------------------------------------------- 1 | using UIKit; 2 | 3 | namespace nopCommerceMobile.iOS 4 | { 5 | public class Application 6 | { 7 | // This is the main entry point of the application. 8 | static void Main(string[] args) 9 | { 10 | // if you want to use a different Application Delegate class from "AppDelegate" 11 | // you can specify it here. 12 | UIApplication.Main(args, null, "AppDelegate"); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Exceptions/ServiceAuthenticationException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace nopCommerceMobile.Exceptions 4 | { 5 | public class ServiceAuthenticationException : Exception 6 | { 7 | public string Content { get; } 8 | 9 | public ServiceAuthenticationException() 10 | { 11 | } 12 | 13 | public ServiceAuthenticationException(string content) 14 | { 15 | Content = content; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Models/Media/PictureModel.cs: -------------------------------------------------------------------------------- 1 | using nopCommerceMobile.Models.Base; 2 | 3 | namespace nopCommerceMobile.Models.Media 4 | { 5 | public class PictureModel : BaseModel 6 | { 7 | public string ImageUrl { get; set; } 8 | 9 | public string ThumbImageUrl { get; set; } 10 | 11 | public string FullSizeImageUrl { get; set; } 12 | 13 | public string Title { get; set; } 14 | 15 | public string AlternateText { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Services/RequestProvider/IRequestProvider.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | 3 | namespace nopCommerceMobile.Services.RequestProvider 4 | { 5 | public interface IRequestProvider 6 | { 7 | Task GetAsync(string uri); 8 | Task PostAsync(string uri, TModel data); 9 | Task PostAsyncAnonymous(string uri, TModel data); 10 | Task PostAsync(string uri, TModel data); 11 | } 12 | } -------------------------------------------------------------------------------- /src/nopCommerceMobile/Services/Navigation/INavigationService.cs: -------------------------------------------------------------------------------- 1 | using nopCommerceMobile.ViewModels.Base; 2 | using System.Threading.Tasks; 3 | using nopCommerceMobile.Views.Catalog; 4 | 5 | namespace nopCommerceMobile.Services.Navigation 6 | { 7 | public interface INavigationService 8 | { 9 | BaseViewModel PreviousPageBaseViewModel { get; } 10 | 11 | Task RemoveLastFromBackStackAsync(); 12 | 13 | Task RemoveBackStackAsync(); 14 | bool PageExist(T categoriesPage); 15 | } 16 | } -------------------------------------------------------------------------------- /src/nopCommerceMobile/ViewModels/News/NewsViewModel.cs: -------------------------------------------------------------------------------- 1 | using nopCommerceMobile.Models.News; 2 | using nopCommerceMobile.ViewModels.Base; 3 | 4 | namespace nopCommerceMobile.ViewModels.News 5 | { 6 | public class NewsViewModel : BaseViewModel 7 | { 8 | private NewsItemModel _newsItem; 9 | public NewsItemModel NewsItem 10 | { 11 | get => _newsItem; 12 | set 13 | { 14 | _newsItem = value; 15 | RaisePropertyChanged(()=> NewsItem); 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/ViewModels/Common/SelectListViewModel.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.ObjectModel; 2 | using nopCommerceMobile.ViewModels.Base; 3 | 4 | namespace nopCommerceMobile.ViewModels.Common 5 | { 6 | public class SelectListViewModel : BaseViewModel 7 | { 8 | public SelectListViewModel() 9 | { 10 | SelectList = new ObservableCollection(); 11 | } 12 | 13 | public ObservableCollection SelectList { get; set; } 14 | public SelectListPageEnum SelectListPage { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/nopCommerceMobile.Android/Properties/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/nopCommerceMobile.Android/Resources/layout/Tabbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Converters/InverseBooleanConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using Xamarin.Forms; 4 | 5 | namespace nopCommerceMobile.Converters 6 | { 7 | public class InverseBooleanConverter : IValueConverter 8 | { 9 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 10 | { 11 | return !(bool)value; 12 | } 13 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 14 | { 15 | return !(bool)value; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Models/Catalog/SubCategoryModel.cs: -------------------------------------------------------------------------------- 1 | using nopCommerceMobile.Models.Base; 2 | using nopCommerceMobile.Models.Media; 3 | 4 | namespace nopCommerceMobile.Models.Catalog 5 | { 6 | public class SubCategoryModel : BaseModel 7 | { 8 | public SubCategoryModel() 9 | { 10 | PictureModel = new PictureModel(); 11 | } 12 | 13 | public string Name { get; set; } 14 | 15 | public string SeName { get; set; } 16 | 17 | public string Description { get; set; } 18 | 19 | public PictureModel PictureModel { get; set; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Models/Localization/LocaleResourceModel.cs: -------------------------------------------------------------------------------- 1 | using nopCommerceMobile.Models.Base; 2 | 3 | namespace nopCommerceMobile.Models.Localization 4 | { 5 | public class LocaleResourceModel : BaseModel 6 | { 7 | public string ResourceName { get; set; } 8 | public string ResourceValue { get; set; } 9 | public int LanguageId { get; set; } 10 | } 11 | 12 | public class LocaleResource 13 | { 14 | public string ResourceName { get; set; } 15 | public string ResourceValue { get; set; } 16 | public int LanguageId { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Extensions/ObservableExtension.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Collections.ObjectModel; 3 | 4 | namespace nopCommerceMobile.Extensions 5 | { 6 | public static class ObservableExtension 7 | { 8 | public static ObservableCollection ToObservableCollection(this IEnumerable source) 9 | { 10 | ObservableCollection collection = new ObservableCollection(); 11 | 12 | foreach (T item in source) 13 | { 14 | collection.Add(item); 15 | } 16 | 17 | return collection; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Renderers/EntryRenderer.cs: -------------------------------------------------------------------------------- 1 | using UIKit; 2 | using Xamarin.Forms; 3 | using Xamarin.Forms.Platform.iOS; 4 | 5 | namespace nopCommerceMobile.iOS.Renderers 6 | { 7 | public class EntryRenderer : Xamarin.Forms.Platform.iOS.EntryRenderer 8 | { 9 | public EntryRenderer() 10 | { 11 | } 12 | 13 | protected override void OnElementChanged(ElementChangedEventArgs e) 14 | { 15 | base.OnElementChanged(e); 16 | 17 | if (Control != null) 18 | { 19 | Control.BorderStyle = UITextBorderStyle.None; 20 | } 21 | } 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /src/nopCommerceMobile/Extensions/HtmlExtensions.cs: -------------------------------------------------------------------------------- 1 | using nopCommerceMobile.ViewModels.Base; 2 | 3 | namespace nopCommerceMobile.Extensions 4 | { 5 | public static class HtmlExtensions 6 | { 7 | public static bool IsNotNull(this BaseViewModel model) 8 | { 9 | return model != null; 10 | } 11 | 12 | public static bool IsNull(this BaseViewModel model) 13 | { 14 | return model == null; 15 | } 16 | 17 | public static bool IsNullOrEmpty(this string text) 18 | { 19 | if (string.IsNullOrEmpty(text)) 20 | return true; 21 | 22 | return false; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/nopCommerceMobile.Android/Assets/AboutAssets.txt: -------------------------------------------------------------------------------- 1 | Any raw assets you want to be deployed with your application can be placed in 2 | this directory (and child directories) and given a Build Action of "AndroidAsset". 3 | 4 | These files will be deployed with your package and will be accessible using Android's 5 | AssetManager, like this: 6 | 7 | public class ReadAsset : Activity 8 | { 9 | protected override void OnCreate (Bundle bundle) 10 | { 11 | base.OnCreate (bundle); 12 | 13 | InputStream input = Assets.Open ("my_asset.txt"); 14 | } 15 | } 16 | 17 | Additionally, some Android functions will automatically load asset files: 18 | 19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); 20 | -------------------------------------------------------------------------------- /src/nopCommerceMobile/Views/Common/NoInternetPage.xaml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /src/nopCommerceMobile.iOS/Renderers/ButtonRenderer.cs: -------------------------------------------------------------------------------- 1 | using UIKit; 2 | using Xamarin.Forms; 3 | using Xamarin.Forms.Platform.iOS; 4 | 5 | namespace nopCommerceMobile.iOS.Renderers 6 | { 7 | public class ButtonRenderer : Xamarin.Forms.Platform.iOS.ButtonRenderer 8 | { 9 | public ButtonRenderer() 10 | { 11 | 12 | } 13 | 14 | //by default button text is not uppercase, change style 15 | //TODO need to test 16 | protected override void OnElementChanged(ElementChangedEventArgs