This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| Read more at: | |
| https://redux.js.org/api/combinereducers | |
| */ | |
| export const combineReducers = (reducers) => ( | |
| state = {}, | |
| action = { value: null, type: null } | |
| ) => | |
| Object.keys(reducers).reduce((nextState, key) => { | |
| // Call every reducer with the part of the state it manages |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { visibilityReducer } from "./visibility"; | |
| import { todoReducer, areTodosEqual } from "./todos"; | |
| import { getUndoableReducer } from "./undoable"; | |
| import { combineReducers } from "./combineReducers"; | |
| export const undoableTodoReducer = getUndoableReducer( | |
| todoReducer, | |
| areTodosEqual | |
| ); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { createStore } from "./redux/store/index"; | |
| import { actions } from "./redux/actions/index"; | |
| import { rootReducer } from "./redux/reducers/index"; | |
| const store = createStore(rootReducer, {}); | |
| store.subscribe(() => console.log(store.getState())); | |
| const { id } = store.dispatch(actions.addTodo({id: 1, done: false, text: "My first todo"})); | |
| store.dispatch(actions.toggleTodo(id)); | |
| store.dispatch(actions.undo()); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { html } from "lit-html"; | |
| const Todo = ({ onToggleClick, onDeleteClick, text, done }) => { | |
| const toggleClass = "todo toggle"; | |
| const deleteClass = "todo delete"; | |
| const textClass = `todo text ${done ? " done" : ""}`; | |
| const checkMark = done ? "β" : ""; | |
| return html` | |
| <li> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { html } from "lit-html"; | |
| export const Input = ({ onSubmit }) => html` | |
| <form | |
| @submit=${(e) => { | |
| e.preventDefault(); | |
| onSubmit(e); | |
| }} | |
| > | |
| <input placeholder="What needs to be done?" autofocus="" /> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { html } from "lit-html"; | |
| export const Undo = ({ disabled, onClick }) => { | |
| const className = `${disabled ? "disabled" : ""}`; | |
| const onUndo = disabled ? () => {} : onClick; | |
| return html` | |
| <div class=${className} @click=${onUndo}> | |
| <svg | |
| xmlns="http://www.w3.org/2000/svg" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { html } from "lit-html"; | |
| export const Redo = ({ disabled, onClick }) => { | |
| const className = `${disabled ? "disabled" : ""}`; | |
| const onRedo = disabled ? () => {} : onClick; | |
| return html` | |
| <div class=${className} @click=${onRedo}> | |
| <svg | |
| xmlns="http://www.w3.org/2000/svg" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { html } from "lit-html"; | |
| import { CONSTS } from "../redux/actions/index"; | |
| const { ALL, DONE, IN_PROGRESS } = CONSTS.visibilityFilters; | |
| const filterAll = { filter: ALL, text: "All" }; | |
| const filterDone = { filter: DONE, text: "Done" }; | |
| const filterInProgress = { | |
| filter: IN_PROGRESS, | |
| text: "In Progress", |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { html } from "lit-html"; | |
| import { Input } from "./Input"; | |
| import { TodoList } from "./TodoList"; | |
| import { ListManager } from "./ListManager"; | |
| import { Undo } from "./Undo"; | |
| import { Redo } from "./Redo"; | |
| import { getTodoItem } from "../factories/todo/index"; | |
| import { | |
| getStoreMethods, | |
| getTodos, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| export const compose = (...functions) => (argToComposedFunction) => | |
| functions.reduceRight( | |
| (accumulatedValue, func) => func(accumulatedValue), | |
| argToComposedFunction | |
| ); |