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