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 CakeModelService( ICakeApiService cakeApiService, IAppUserModelService appUserModelService, IPaymentApiService paymentApiService, ILogger logger) { _cakeApiService = cakeApiService; _paymentApiService = paymentApiService; _nearbyCakes = new SourceCache <CakeDto, int>(c => c.Id); _cd = new CompositeDisposable(); //_nearbyCakes // .Connect() // .CacheChangeSet(_cacheKey, logger) // .Subscribe(); appUserModelService .UserObservable .ObserveOn(RxApp.TaskpoolScheduler) .Where(u => u != null) .SelectMany(async u => await cakeApiService.GetNearbyCakes(u.Position)) .RetryWithBackoff(3) .LogException(logger) .Subscribe(cakes => { _nearbyCakes.Edit(l => l.AddOrUpdate(cakes)); }); //Observable.FromAsync(async () => await _nearbyCakes.FromCache(_cacheKey, EqualityComparer<CakeDto>.Default)).Subscribe().DisposeWith(_cd); }
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 ChatModelService(IAppUserModelService appUserModelService, IChatApiService chatApiService, IBakerModelService bakerModelService, ILogger logger) { _chatApiService = chatApiService; _logger = logger; _chatsForUser = new SourceCache <ChatMessageDto, int>(cm => cm.Id); _bakerChatsForUser = new SourceCache <BakerDto, string>(bk => bk.Id); appUserModelService .UserObservable .ObserveOn(RxApp.TaskpoolScheduler) .Where(u => u != null) .SelectMany(async u => await chatApiService.GetChatsForUser(u.Id)) .RetryWithBackoff(3) .LogException(logger) .Subscribe(async chatMessages => { _chatsForUser.Edit(l => l.AddOrUpdate(chatMessages)); var bakerIds = chatMessages.GroupBy(cm => cm.BakerId).Select(b => b.Key); foreach (var bakerId in bakerIds) { var baker = await bakerModelService.GetBaker(bakerId); _bakerChatsForUser.Edit(l => l.AddOrUpdate(baker)); //TODO: optimize } }); }
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 DisclaimerViewModel( DisclaimerNavigation parameter, IScreen hostScreen = null, IAppUserModelService appUserModelService = null, IUserApiService userApiService = null, Serilog.ILogger logger = null) : base(hostScreen) { _hostScreen = hostScreen; _appUserModelService = appUserModelService ?? Locator.Current.GetService <IAppUserModelService>(); _userApiService = userApiService ?? Locator.Current.GetService <IUserApiService>(); _logger = logger ?? Locator.Current.GetService <Serilog.ILogger>(); AcceptCommand = ReactiveCommand.CreateFromTask(Accept); RejectCommand = ReactiveCommand.CreateFromTask(Reject); Prepare(parameter); }
public PaymentViewModel( PaymentNavigation paymentNavigation, IAppUserModelService appUserModelService = null, IBakerModelService bakerModelService = null, IPaymentApiService paymentApiService = null) { _appUserModelService = appUserModelService ?? Locator.Current.GetService <IAppUserModelService>(); _bakerModelService = bakerModelService ?? Locator.Current.GetService <IBakerModelService>(); _paymentApiService = paymentApiService ?? Locator.Current.GetService <IPaymentApiService>(); PayWithVippsCommand = ReactiveCommand.CreateFromTask(PayWithVipps); var canGoToReceiptObservable = this.WhenAnyValue(vm => vm.PaymentSuccessfull) .Select(ps => ps) .StartWith(false); canGoToReceiptObservable.ToProperty(this, vm => vm.GoNextEnabled, out _goNextEnabled); GoNextCommand = ReactiveCommand.CreateFromTask(GoToReceipt, canGoToReceiptObservable); Prepare(paymentNavigation); }
public BakerChatViewModel(string bakerId, IAppUserModelService appUserModelService = null, IBakerModelService bakerModelService = null, IChatModelService chatModelService = null) { _appUserModelService = appUserModelService ?? Locator.Current.GetService <IAppUserModelService>(); _bakerModelService = bakerModelService; _chatModelService = chatModelService; var user = _appUserModelService.User; UserAvatarUrl = user.AvatarUrl; var dynamicFilter = this.WhenValueChanged(vm => vm.BakerId) .Select(CreatePredicate); var chatMessages = _chatModelService .ChatsForUser .Connect() .SubscribeOn(RxApp.TaskpoolScheduler) .Filter(dynamicFilter) .Transform(TransformToListItem) .Publish(); chatMessages .Bind(out _chatMessages) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe() .DisposeWith(CompositeDisposable); chatMessages.Connect(); SendMessageCommand = ReactiveCommand.CreateFromTask(SendMessage); PrepareCommand = ReactiveCommand.CreateFromTask(async b => await Prepare(bakerId)); Observable.Return(Unit.Default) .InvokeCommand(PrepareCommand); PrepareCommand.Subscribe(); }
public LoginViewModel( IScreen hostScreen = null, IAccountApiService accountApiService = null, IDialogService dialogService = null, IAppUserModelService appUserModelService = null, IUserApiService userApiService = null, ILogger logger = null) { _accountApiService = accountApiService ?? Locator.Current.GetService <IAccountApiService>(); _dialogService = dialogService ?? Locator.Current.GetService <IDialogService>(); _appUserModelService = appUserModelService ?? Locator.Current.GetService <IAppUserModelService>(); _userApiService = userApiService ?? Locator.Current.GetService <IUserApiService>(); _logger = logger ?? Locator.Current.GetService <ILogger>(); GoToRegisterCommand = ReactiveCommand.CreateFromTask(GoToRegister); var validateLoginDetailsObservable = this.WhenAnyValue(vm => vm.Username, vm => vm.Password, (un, pw) => SetIsUsernameValid(un) && SetIsPasswordValid(pw)).StartWith(false); validateLoginDetailsObservable.ToProperty(this, vm => vm.CanSubmit, out _canSubmitPropertyHelper); LoginCommand = ReactiveCommand.CreateFromTask(Login, validateLoginDetailsObservable); }
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 }; }