UNPKG

3.5 kBJavaScriptView Raw
1"use strict";
2var __assign = (this && this.__assign) || function () {
3 __assign = Object.assign || function(t) {
4 for (var s, i = 1, n = arguments.length; i < n; i++) {
5 s = arguments[i];
6 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7 t[p] = s[p];
8 }
9 return t;
10 };
11 return __assign.apply(this, arguments);
12};
13Object.defineProperty(exports, "__esModule", { value: true });
14var index_1 = require("./index");
15var rxjs_1 = require("rxjs");
16var initialState = {
17 counter: 0,
18 todoState: {
19 todos: [{ id: 1, title: "Homework", done: false }, { id: 2, title: "Walk dog", done: false }],
20 },
21};
22// create our root store
23var store = index_1.Store.create(initialState);
24// Log all state changes using the .select() function
25store.select().subscribe(function (newState) { return console.log(JSON.stringify(newState)); });
26// Any Observable can be an action - we use a Subject here
27var incrementAction = new rxjs_1.Subject();
28var incrementReducer = function (state, payload) { return state + 1; };
29var decrementAction = new rxjs_1.Subject();
30var decrementReducer = function (state, payload) { return state - 1; };
31// while it looks like a magic string, it is NOT: 'counter' is of type "keyof AppState"; so putting
32// any non-property name of AppState here is actually a compilation error!
33var counterStore = store.createSlice("counter");
34counterStore.addReducer(incrementAction, incrementReducer);
35counterStore.addReducer(decrementAction, decrementReducer);
36// dispatch some actions - we just call .next() (here with no payload)
37incrementAction.next();
38incrementAction.next();
39decrementAction.next();
40// wire up ToDos
41var deleteToDoAction = new rxjs_1.Subject();
42var deleteToDoReducer = function (state, payload) {
43 var filteredTodos = state.todos.filter(function (todo) { return todo.id != payload; });
44 return __assign(__assign({}, state), { todos: filteredTodos });
45};
46var markTodoAsDoneAction = new rxjs_1.Subject();
47// This reducer purposely is more complicated than it needs to be, but shows how you would do it in Redux
48// you will find a little easier solution using a more specific slice below
49var markTodoAsDoneReducer = function (state, payload) {
50 var todos = state.todos.map(function (todo) {
51 if (todo.id != payload)
52 return todo;
53 return __assign(__assign({}, todo), { done: true });
54 });
55 return __assign(__assign({}, state), { todos: todos });
56};
57var todoStore = store.createSlice("todoState");
58todoStore.addReducer(deleteToDoAction, deleteToDoReducer);
59var reducerSubscription = todoStore.addReducer(markTodoAsDoneAction, markTodoAsDoneReducer);
60markTodoAsDoneAction.next(1);
61deleteToDoAction.next(1);
62// now, using .createSlice() can be used to select the todos array directly and our reducer becomes less complex
63// first, disable the previous complex reducer
64reducerSubscription.unsubscribe();
65// create a slice pointing directly to the todos array
66var todosArraySlice = store.createSlice("todoState").createSlice("todos");
67// create simpler reducer
68var markTodoAsDoneSimpleReducer = function (state, payload) {
69 return state.map(function (todo) {
70 if (todo.id != payload)
71 return todo;
72 return __assign(__assign({}, todo), { done: true });
73 });
74};
75todosArraySlice.addReducer(markTodoAsDoneAction, markTodoAsDoneSimpleReducer);
76markTodoAsDoneAction.next(2);
77deleteToDoAction.next(2);
78//# sourceMappingURL=example.js.map
\No newline at end of file