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 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(); }