import React, { Component } from 'react'; import PropTypes from 'prop-types'; import TodoItem from './TodoItem'; import Footer from './Footer'; import { SHOW_ALL, SHOW_MARKED, SHOW_UNMARKED } from '../constants/TodoFilters'; const TODO_FILTERS = { [SHOW_ALL]: () => true, [SHOW_UNMARKED]: (todo) => !todo.marked, [SHOW_MARKED]: (todo) => todo.marked, }; export default class MainSection extends Component { static propTypes = { todos: PropTypes.array.isRequired, actions: PropTypes.object.isRequired, }; constructor(props, context) { super(props, context); this.handleClearMarked = this.handleClearMarked.bind(this); this.handleShow = this.handleShow.bind(this); this.state = { filter: SHOW_ALL }; } handleClearMarked() { const atLeastOneMarked = this.props.todos.some((todo) => todo.marked); if (atLeastOneMarked) { this.props.actions.clearMarked(); } } handleShow(filter) { this.setState({ filter }); } render() { const { todos, actions } = this.props; const { filter } = this.state; const filteredTodos = todos.filter(TODO_FILTERS[filter]); const markedCount = todos.reduce( (count, todo) => (todo.marked ? count + 1 : count), 0 ); return (
{this.renderToggleAll(markedCount)} {this.renderFooter(markedCount)}
); } renderToggleAll(markedCount) { const { todos, actions } = this.props; if (todos.length > 0) { return ( ); } return null; } renderFooter(markedCount) { const { todos } = this.props; const { filter } = this.state; const unmarkedCount = todos.length - markedCount; if (todos.length) { return (