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")); }
static TodoAppState SetVisibility(TodoAppState state, SetVisibility act) { return(new TodoAppState { Todos = state.Todos, Visibility = act.Visibility }); }
static TodoAppState UpdateDescriptionInput(TodoAppState state, UpdateDescriptionInput act) { return(new TodoAppState { Todos = state.Todos, Visibility = state.Visibility, DescriptionInput = act.Description }); }
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();
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()); }
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 }); }
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 };
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 };
static TodoAppState DeleteTodo(TodoAppState state, DeleteTodo act) => new TodoAppState { Todos = state.Todos.Where(todo => todo.Id != act.Id), Visibility = state.Visibility };