AppDispatcher.register((payload) => { const action = payload.action; switch (action.type) { case TodoConstants.UPDATE_TEXT: Store.inputText = action.text; Store.emitChange(); break; case TodoConstants.ADD_TODO: debug('Adding Todo', Store._todos, Store._inputText); Store.addTodo(); Store.emitChange(); break; case TodoConstants.TOGGLE_ARCHIVE: debug('Toggling Archive Status: ', action.todo, action.index); Store._todos[action.index].archived = !Store._todos[action.index].archived; Store.emitChange(); break; case TodoConstants.TOGGLE_ALL: debug('Toggling All'); Store.toggleAll(); Store.emitChange(); break; case TodoConstants.REMOVE_TODO: debug('Removing Todo: ', action.index); Store._todos.splice(action.index, 1); Store.emitChange(); break; case TodoConstants.REMOVE_ALL: debug('Removing All Todos'); Store._todos.length = 0; Store.emitChange(); break; case TodoConstants.REMOVE_ARCHIVED: debug('Removing Archived Todos'); Store._todos = Store._todos.filter((todo) => { return todo.archived === false; }); Store.emitChange(); break; case TodoConstants.POPULATE_DATA: debug('Populating data: ', action.data); Store._todos = action.data; Store.emitChange(); break; default: break; } });
removeArchived(event) { debug('RemoveArchived called', event); event.preventDefault(); this.props.removeArchived(); }
'use strict'; import React from 'react/addons'; import {Link} from 'react-router'; import debug from 'constants/DebugConstants'; import 'styles/TodoNav.scss'; debug('Loading %s...', 'TodoNav'); export default class TodoNav extends React.Component { static propTypes = {}; static defaultProps = {}; removeAll(event) { event.preventDefault(); this.props.removeAll(); } removeArchived(event) { debug('RemoveArchived called', event); event.preventDefault(); this.props.removeArchived(); } render() { return ( <ul className="nav nav-pills TodoNav"> <li role="presentation" className={this.props.filter === 'all' ? 'active':''}> <Link to="all">All</Link>
this._todos = this._todos.map((todo) => { debug(todo); todo.archived = !allAreArchived; return todo; });
'use strict'; import {EventEmitter} from 'events'; import AppDispatcher from 'dispatcher/AppDispatcher'; import TodoConstants from 'constants/TodoConstants'; import debug from 'constants/DebugConstants'; debug('Loading %s...', 'TodoStore'); const CHANGE_EVENT = 'CHANGE_EVENT'; class TodoStore extends EventEmitter { _todos = []; _inputText; getState() { return { todos: this._todos, inputText: this._inputText, allAreArchived: this.allAreArchived }; } get allAreArchived() { return this._todos.every((todo) => { return todo.archived; }); } set inputText(value) { this._inputText = value; }
'use strict'; import React from 'react/addons'; import classNames from 'classnames'; import TodoItem from 'components/TodoItem'; import debug from 'constants/DebugConstants'; import 'styles/TodoList.scss'; debug('Loading %s...', 'TodoList'); export default class TodoList extends React.Component { static defaultProps = { filter: 'all', todos: [] }; filteredTodos = () => { let returnAll = this.props.filter === 'all'; let archiveFilter = this.props.filter === 'archived'; return this.props.todos.filter((todo) => { if (returnAll) return true; return todo.archived === archiveFilter; }) }; render() { let todosList = this.filteredTodos();