Exemple #1
0
        public static void Main()
        {
            var initialState = new TodoAppState
            {
                DescriptionInput = "",
                Visibility       = TodoVisibility.All,
                Todos            = new Todo[]
                {
                    new Todo
                    {
                        Id          = 0,
                        Description = "Learn React + Redux in C#",
                        IsCompleted = true
                    },
                    new Todo
                    {
                        Id          = 1,
                        Description = "Build an awesome app with them",
                        IsCompleted = false
                    }
                }
            };

            var store = Redux.CreateStore(Todos.Reducer(initialState));

            React.Render(Components.TodoItemList(store), Document.GetElementById("root"));
        }
Exemple #2
0
 static TodoAppState SetVisibility(TodoAppState state, SetVisibility act)
 {
     return(new TodoAppState
     {
         Todos = state.Todos,
         Visibility = act.Visibility
     });
 }
Exemple #3
0
 static TodoAppState UpdateDescriptionInput(TodoAppState state, UpdateDescriptionInput act)
 {
     return(new TodoAppState
     {
         Todos = state.Todos,
         Visibility = state.Visibility,
         DescriptionInput = act.Description
     });
 }
Exemple #4
0
 public static ReduxReducer <TodoAppState> Reducer(TodoAppState iniital) =>
 BuildReducer.For <TodoAppState>()
 .WhenActionHasType <AddTodo>(AddTodo)
 .WhenActionHasType <DeleteTodo>(DeleteTodo)
 .WhenActionHasType <UpdateTodo>(UpdateTodo)
 .WhenActionHasType <ToggleTodoCompleted>(ToggleTodoCompleted)
 .WhenActionHasType <SetVisibility>(SetVisibility)
 .WhenActionHasType <UpdateDescriptionInput>(UpdateDescriptionInput)
 .WhenStateIsUndefinedOrNull(() => iniital)
 .Build();
Exemple #5
0
        public async Task NewItemIsAddedToTodoList()
        {
            var state = new TodoAppState();

            mockStateStore.Setup(store => store.Reduce(It.IsAny <Func <TodoAppState, TodoAppState> >()))
            .Callback <Func <TodoAppState, TodoAppState> >(func => func(state))
            .Returns(Task.CompletedTask);

            await addItemHandler.HandleAsync(AddItemMessage.Default);

            Assert.IsTrue(state.TodoItems.Any());
        }
Exemple #6
0
        private static TodoAppState AddTodo(TodoAppState state, AddTodo act)
        {
            var maxId  = state.Todos.Max(_todo => _todo.Id);
            var nextId = maxId + 1;

            var todo = new Todo
            {
                Id          = nextId,
                Description = state.DescriptionInput,
                IsCompleted = false
            };

            return(new TodoAppState
            {
                Todos = state.Todos.Concat(new Todo[] { todo }),
                Visibility = state.Visibility
            });
        }
Exemple #7
0
        static TodoAppState UpdateTodo(TodoAppState state, UpdateTodo act) => new TodoAppState
        {
            Todos = state.Todos.Select(todo =>
            {
                if (todo.Id == act.Id)
                {
                    return(new Todo
                    {
                        Id = todo.Id,
                        Description = act.Description,
                        IsCompleted = todo.IsCompleted
                    });
                }
                else
                {
                    return(todo);
                }
            }),

            Visibility = state.Visibility
        };
Exemple #8
0
        static TodoAppState ToggleTodoCompleted(TodoAppState state, ToggleTodoCompleted act) => new TodoAppState
        {
            Todos = state.Todos.Select(todo =>
            {
                if (todo.Id == act.Id)
                {
                    return(new Todo
                    {
                        Id = todo.Id,
                        Description = todo.Description,
                        IsCompleted = !todo.IsCompleted
                    });
                }
                else
                {
                    return(todo);
                }
            }),

            Visibility       = state.Visibility,
            DescriptionInput = state.DescriptionInput
        };
Exemple #9
0
 static TodoAppState DeleteTodo(TodoAppState state, DeleteTodo act) => new TodoAppState
 {
     Todos      = state.Todos.Where(todo => todo.Id != act.Id),
     Visibility = state.Visibility
 };