Exemple #1
0
        public static void Items(
            ILi <ITodoItem> target,
            IEl <int> nextId,
            IMultiOp <string> newItem_,
            IOp <Empty> deleteCompletedItems_,
            IMultiOp <string> deleteItem_,
            ITodoItemFactory factory)
        {
            var   newItem = newItem_.Read();
            Empty tmp;
            bool  deleteCompletedItems = deleteCompletedItems_.TryRead(out tmp);
            var   deleteItem           = deleteItem_.Read();

            if (newItem.Count <= 0 &&
                !deleteCompletedItems &&
                deleteItem.Count <= 0)
            {
                return;
            }

            var items = target.AsWrite();

            if (newItem.Count > 0)
            {
                for (int i = 0, n = newItem.Count; i < n; ++i)
                {
                    items.Add(factory.Create((nextId.Read() + i).ToString(), newItem[i]));
                }
                nextId.Write(nextId.Read() + newItem.Count);
            }

            if (deleteCompletedItems)
            {
                items.RemoveAll(it =>
                {
                    if (it.IsCompleted.Read())
                    {
                        factory.Dispose(it);
                        return(true);
                    }
                    return(false);
                });
            }

            if (deleteItem.Count > 0)
            {
                items.RemoveAll(it =>
                {
                    if (deleteItem.Contains(it.Id))
                    {
                        factory.Dispose(it);
                        return(true);
                    }
                    return(false);
                });
            }
        }
Exemple #2
0
        public State(CompositeDisposable cd, IEngine engine)
        {
            NextId               = engine.El(1);
            CreateNewItem        = engine.MultiOp <string>();
            Items                = engine.Li(new List <ITodoItem>());
            ToggleItemComplete   = engine.MultiOp <string>();
            UncompletedCount     = engine.El(0);
            DeleteCompletedItems = engine.Op <Empty>();
            DeleteItem           = engine.MultiOp <string>();
            EditItem             = engine.Op <string>();
            EditingItemId        = engine.El <string>(null);
            FinishEditItem       = engine.Op <string>();
            ItemFactory          = new TodoItem.Factory(cd, engine,
                                                        ToggleItemComplete, EditingItemId, FinishEditItem);

            engine.Computer(cd,
                            new object[] {
                Items,
                ToggleItemComplete,
            },
                            () => Computers.UncompletedCount(
                                UncompletedCount,
                                Items
                                )
                            );

            engine.Computer(cd,
                            new object[]
            {
                CreateNewItem,
                DeleteCompletedItems,
                DeleteItem
            },
                            () => Computers.Items(
                                Items,
                                NextId,
                                CreateNewItem,
                                DeleteCompletedItems,
                                DeleteItem,
                                ItemFactory
                                )
                            );

            engine.Computer(cd,
                            new object[]
            {
                EditItem,
                FinishEditItem
            },
                            () => Computers.EditingItemId(
                                EditingItemId,
                                EditItem,
                                FinishEditItem
                                )
                            );
        }