Example #1
0
        public PurchaseViewModel(int cakeId, ICakeModelService cakeModelService = null, IShoppingBagModelService shoppingBagModelService = null)
        {
            _cakeModelService        = cakeModelService ?? Locator.Current.GetService <ICakeModelService>();
            _shoppingBagModelService = shoppingBagModelService ?? Locator.Current.GetService <IShoppingBagModelService>();

            var shoppingBag = _shoppingBagModelService
                              .ShoppingBag
                              .Connect()
                              .SubscribeOn(RxApp.TaskpoolScheduler)
                              .Transform(TransformToListItem)
                              .Publish();

            shoppingBag
            .Bind(out _shoppingBag)
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe()
            .DisposeWith(CompositeDisposable);

            shoppingBag.Connect();

            RemoveItemFunc = new Func <int, Task>(async cId =>
            {
                var cakeOptional = _cakeModelService.Cakes.Lookup(cId);
                if (cakeOptional.HasValue)
                {
                    _shoppingBagModelService.RemoveFromShoppingBag(cakeOptional.Value);
                }
            });

            Prepare(cakeId);
        }
Example #2
0
        public BakerProfileViewModel(
            string bakerId,
            IScreen hostScreen = null,
            ICakeModelService cakeModelService       = null,
            IAppUserModelService appUserModelService = null,
            IBakerModelService bakerModelService     = null,
            IUserApiService userApiService           = null,
            ILogger logger = null,
            IMapper mapper = null) : base(hostScreen)
        {
            _cakeModelService    = cakeModelService;
            _appUserModelService = appUserModelService;
            _bakerModelService   = bakerModelService;
            _userApiService      = userApiService;
            _logger = logger;
            _mapper = mapper;

            _bakerIdSubject = new Subject <string>();

            StartChatCommand = ReactiveCommand.CreateFromTask(GoToChat);
            PrepareCommand   = ReactiveCommand.CreateFromTask(async b => await Prepare(bakerId));

            Observable.Return(Unit.Default)
            .InvokeCommand(PrepareCommand);

            PrepareCommand.Subscribe();
        }
        public CakeDetailViewModel(
            int bakerId,
            ICakeModelService cakeModelService       = null,
            IAppUserModelService appUserModelService = null,
            IScreen hostScreen = null, ILogger logger = null) : base(hostScreen)
        {
            _cakeModelService    = cakeModelService;
            _appUserModelService = appUserModelService;
            _logger               = logger;
            _cakeIdSubject        = new Subject <int>();
            ToggleFavoriteCommand = ReactiveCommand.CreateFromTask(ToggleFavorite);
            InitiateChatCommand   = ReactiveCommand.CreateFromTask <int>(InitiateChat);
            OrderCakeCommand      = ReactiveCommand.CreateFromTask(OrderCake);
            GoToBakerCommand      = ReactiveCommand.CreateFromTask <string>(GoToBaker);
            ToggleFavoriteFunc    = new Func <int, Task>(async id =>
            {
                var isFavorite = _appUserModelService.FavouriteCakes.Lookup(id).HasValue;
                if (isFavorite)
                {
                    _appUserModelService.FavouriteCakes.Edit(l => l.RemoveKey(id));
                }
                else
                {
                    var cake = _cakeModelService.Cakes.Lookup(id);
                    if (cake.HasValue)
                    {
                        _appUserModelService.FavouriteCakes.Edit(l => l.AddOrUpdate(cake.Value));
                    }
                }

                await _cakeModelService.UpdateFavourite(_appUserModelService.UserId, id);
            });

            Prepare(bakerId);
        }
        public FavoritesViewModel(IScreen hostScreen = null, IAppUserModelService appUserModelService = null, ICakeModelService cakeModelService = null, ILogger logger = null) : base(hostScreen)
        {
            _hostScreen          = hostScreen;
            _logger              = logger ?? Locator.Current.GetService <ILogger>();
            _cakeModelService    = cakeModelService ?? Locator.Current.GetService <ICakeModelService>();
            _appUserModelService = appUserModelService ?? Locator.Current.GetService <IAppUserModelService>();

            _cd = new CompositeDisposable();

            var favoriteCakes = _appUserModelService
                                .FavouriteCakes
                                .Connect()
                                .SubscribeOn(RxApp.TaskpoolScheduler)
                                .Transform(TransformToListItem)
                                .Publish();

            favoriteCakes
            .Bind(out _favoriteCakes)
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe()
            .DisposeWith(_cd);

            favoriteCakes
            .MergeMany(vm => vm.GoToDetailsCommand)
            .Subscribe(async c => await GoToDetails(c))
            .DisposeWith(_cd);

            favoriteCakes
            .MergeMany(vm => vm.GoToBakerCommand)
            .Subscribe(async c => await GoToBaker(c))
            .DisposeWith(_cd);

            favoriteCakes
            .MergeMany(vm => vm.ToggleFavoriteCommand)
            .Subscribe(async c => await ToggleFavorite(c))
            .DisposeWith(_cd);

            favoriteCakes.Connect();

            ToggleFavoriteFunc = new Func <int, Task>(async id =>
            {
                var isFavorite = _appUserModelService.FavouriteCakes.Lookup(id).HasValue;
                if (isFavorite)
                {
                    _appUserModelService.FavouriteCakes.Edit(l => l.RemoveKey(id));
                }
                else
                {
                    var cake = _cakeModelService.Cakes.Lookup(id);
                    if (cake.HasValue)
                    {
                        _appUserModelService.FavouriteCakes.Edit(l => l.AddOrUpdate(cake.Value));
                    }
                }

                await _cakeModelService.UpdateFavourite(_appUserModelService.UserId, id);
            });
        }
        public SearchViewModel(
            IScreen hostScreen = null,
            ICakeModelService cakeModelService       = null,
            IAppUserModelService appUserModelService = null,
            IDialogService dialogService             = null,
            IUserDialogs userDialogs = null,
            ILogger logger           = null) : base(hostScreen)
        {
            try
            {
                _cakeModelService    = cakeModelService ?? Locator.Current.GetService <ICakeModelService>();
                _appUserModelService = appUserModelService ?? Locator.Current.GetService <IAppUserModelService>();
                _dialogService       = dialogService ?? Locator.Current.GetService <IDialogService>();
                _userDialogs         = userDialogs ?? Locator.Current.GetService <IUserDialogs>();
                _logger = logger ?? Locator.Current.GetService <ILogger>();
                _cd     = new CompositeDisposable();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }

            var searchFilter = this.ObservableForProperty(vm => vm.Query)
                               .Value()
                               .StartWith("")
                               .DistinctUntilChanged()
                               .Throttle(TimeSpan.FromMilliseconds(400))
                               .Select(SearchPredicate);

            var cakeTypeFilter = this.ObservableForProperty(vm => vm.CakeTypeFilter)
                                 .Value()
                                 .StartWith(CakeType.None)
                                 .DistinctUntilChanged()
                                 .Select(CakeTypePredicate);

            var nearbyCakes = _cakeModelService
                              .Cakes
                              .Connect()
                              .SubscribeOn(RxApp.TaskpoolScheduler)
                              .Transform(TransformToListItem)
                              .Publish();

            nearbyCakes
            .Bind(out _popularSearches)
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe()
            .DisposeWith(_cd);

            nearbyCakes
            .Filter(searchFilter)
            .Filter(cakeTypeFilter)
            .Bind(out _searchResults)
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe()
            .DisposeWith(_cd);

            nearbyCakes
            .MergeMany(vm => vm.GoToDetailsCommand)
            .Subscribe(async c => await GoToDetails(c))
            .DisposeWith(_cd);

            nearbyCakes
            .MergeMany(vm => vm.GoToBakerCommand)
            .Subscribe(async c => await GoToBaker(c))
            .DisposeWith(_cd);

            nearbyCakes
            .MergeMany(vm => vm.ToggleFavoriteCommand)
            .Subscribe(async c => await ToggleFavorite(c))
            .DisposeWith(_cd);

            nearbyCakes.Connect();

            FilterByTypeCommand = ReactiveCommand.Create(FilterByType);

            var cakeTypeOptions = Enum.GetNames(typeof(CakeType)).Select(cakeType => new ActionSheetOption(cakeType, () => SetCakeType((CakeType)Enum.Parse(typeof(CakeType), cakeType)))).ToList();

            _sheetConfig = new ActionSheetConfig
            {
                Title          = "Kaketype",
                UseBottomSheet = true,
                Options        = cakeTypeOptions
            };
        }