public ToDoTaskDetailViewModel(Cache cache, TasksProxy proxy, IMapper mapper)
        {
            this.cache  = cache;
            this.proxy  = proxy;
            this.mapper = mapper;

            var titleObs = this.WhenAnyValue(x => x.Dvo.Name)
                           .Select(x => $"Task '{x}'")
                           .ObserveOn(RxApp.MainThreadScheduler);

            _Title  = titleObs.ToProperty(this, x => x.Title, "Loading ...");
            _Header = titleObs.ToProperty(this, x => x.Header, "Loading ...");

            RenameCommand = ReactiveCommand.CreateFromTask(async() =>
            {
                var newName = await RenameInteraction.Handle(Dvo.Name);
                if (!string.IsNullOrWhiteSpace(newName))
                {
                    await proxy.RenameToDoTask(Dvo.Id, newName);
                    Dvo.Name = newName;
                }
            });
        }
        public ToDoTaskListViewModel(Cache cache, TasksProxy proxy, IMapper mapper)
        {
            CreateToDoTaskCommand = ReactiveCommand.CreateFromTask(async() =>
            {
                var id   = Guid.NewGuid();
                var name = await CreateInteraction.Handle(Unit.Default);
                if (name != null)
                {
                    await proxy.AddToDoTask(id, name);
                    var dto = await proxy.GetToDoTask(id);
                    var dvo = mapper.Map <ToDoTaskDvo>(dto);
                    cache.Get <ToDoTaskDvo>().AddOrUpdate(dvo);
                    MessageBus.Current.OpenToDoTask(dvo.Id);
                }
            });
            EditToDoTaskCommand = ReactiveCommand.Create <ToDoTaskDvo>(
                toDoTask => MessageBus.Current.OpenToDoTask(toDoTask.Id),
                this.WhenAnyValue(x => x.SelectedToDoTask).Select(d => d != null));
            DeleteToDoTaskCommand = ReactiveCommand.Create <ToDoTaskDvo>(async toDoTask =>
            {
                await proxy.DeleteToDoTask(toDoTask.Id);
                cache.Get <ToDoTaskDvo>().Remove(toDoTask);
                MessageBus.Current.CloseAllPanelsWithKey(toDoTask.Id.ToString());
            }, this.WhenAnyValue(x => x.SelectedToDoTask).Select(d => d != null));
            RefreshCommand = ReactiveCommand.CreateFromTask(async cancellationToken =>
            {
                cache.Get <ToDoTaskDvo>().EditDiff(
                    mapper.Map <IEnumerable <ToDoTaskDto>, IList <ToDoTaskDvo> >(await proxy.GetToDoTasks()),
                    // TODO - Implementar un mecanismo para detectar los cambios basado en un timestamp o similar
                    (t1, t2) => t1.Name == t2.Name);
            });
            cache.Get <ToDoTaskDvo>()
            .Connect()
            .OnItemRemoved(toDoTask => MessageBus.Current.CloseAllPanelsWithKey(toDoTask.Id.ToString()))
            .OnItemUpdated((updatedToDoTask, _) => MessageBus.Current.SendMessage(new UpdatePanelMessage(updatedToDoTask)))

            //.AutoRefresh(_ => _.Name)
            .AutoRefresh()

            //.Filter(_ => _.Name != null)

            .Sort(new GenericComparer <ToDoTaskDvo>((t1, t2) => StringComparer.CurrentCulture.Compare(t1.Name, t2.Name)))
            .Page(this.WhenAnyValue(_ => _.PageRequest))

            .ObserveOnDispatcher()
            .Bind(out var list)
            .DisposeMany()
            .Subscribe();
            ToDoTasks = list;

            cache.Get <ToDoTaskDvo>()
            .Connect()
            .ObserveOnDispatcher()
            .Bind(out var allList)
            .DisposeMany()
            .Subscribe();
            AllToDoTasks = allList;

            // TODO - Cancel in progress command https://github.com/reactiveui/ReactiveUI/issues/1536
            RefreshCommand.Execute().Subscribe();
            //RefreshCommand.Execute().Subscribe();
        }
Example #3
0
 public TasksController()
 {
     _proxy = TasksProxy.Create();
 }