mirror of
https://github.com/leporello-js/leporello-js
synced 2026-01-14 05:14:28 -08:00
redux example init
This commit is contained in:
14
docs/examples/todos/src/components/App.js
Normal file
14
docs/examples/todos/src/components/App.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import React from 'react'
|
||||
import Footer from './Footer'
|
||||
import AddTodo from '../containers/AddTodo'
|
||||
import VisibleTodoList from '../containers/VisibleTodoList'
|
||||
|
||||
const App = () => (
|
||||
<div>
|
||||
<AddTodo />
|
||||
<VisibleTodoList />
|
||||
<Footer />
|
||||
</div>
|
||||
)
|
||||
|
||||
export default App
|
||||
20
docs/examples/todos/src/components/Footer.js
Normal file
20
docs/examples/todos/src/components/Footer.js
Normal file
@@ -0,0 +1,20 @@
|
||||
import React from 'react'
|
||||
import FilterLink from '../containers/FilterLink'
|
||||
import { VisibilityFilters } from '../actions'
|
||||
|
||||
const Footer = () => (
|
||||
<div>
|
||||
<span>Show: </span>
|
||||
<FilterLink filter={VisibilityFilters.SHOW_ALL}>
|
||||
All
|
||||
</FilterLink>
|
||||
<FilterLink filter={VisibilityFilters.SHOW_ACTIVE}>
|
||||
Active
|
||||
</FilterLink>
|
||||
<FilterLink filter={VisibilityFilters.SHOW_COMPLETED}>
|
||||
Completed
|
||||
</FilterLink>
|
||||
</div>
|
||||
)
|
||||
|
||||
export default Footer
|
||||
22
docs/examples/todos/src/components/Link.js
Normal file
22
docs/examples/todos/src/components/Link.js
Normal file
@@ -0,0 +1,22 @@
|
||||
import React from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
|
||||
const Link = ({ active, children, onClick }) => (
|
||||
<button
|
||||
onClick={onClick}
|
||||
disabled={active}
|
||||
style={{
|
||||
marginLeft: '4px',
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</button>
|
||||
)
|
||||
|
||||
Link.propTypes = {
|
||||
active: PropTypes.bool.isRequired,
|
||||
children: PropTypes.node.isRequired,
|
||||
onClick: PropTypes.func.isRequired
|
||||
}
|
||||
|
||||
export default Link
|
||||
21
docs/examples/todos/src/components/Todo.js
Normal file
21
docs/examples/todos/src/components/Todo.js
Normal file
@@ -0,0 +1,21 @@
|
||||
import React from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
|
||||
const Todo = ({ onClick, completed, text }) => (
|
||||
<li
|
||||
onClick={onClick}
|
||||
style={{
|
||||
textDecoration: completed ? 'line-through' : 'none'
|
||||
}}
|
||||
>
|
||||
{text}
|
||||
</li>
|
||||
)
|
||||
|
||||
Todo.propTypes = {
|
||||
onClick: PropTypes.func.isRequired,
|
||||
completed: PropTypes.bool.isRequired,
|
||||
text: PropTypes.string.isRequired
|
||||
}
|
||||
|
||||
export default Todo
|
||||
26
docs/examples/todos/src/components/TodoList.js
Normal file
26
docs/examples/todos/src/components/TodoList.js
Normal file
@@ -0,0 +1,26 @@
|
||||
import React from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import Todo from './Todo'
|
||||
|
||||
const TodoList = ({ todos, toggleTodo }) => (
|
||||
<ul>
|
||||
{todos.map(todo =>
|
||||
<Todo
|
||||
key={todo.id}
|
||||
{...todo}
|
||||
onClick={() => toggleTodo(todo.id)}
|
||||
/>
|
||||
)}
|
||||
</ul>
|
||||
)
|
||||
|
||||
TodoList.propTypes = {
|
||||
todos: PropTypes.arrayOf(PropTypes.shape({
|
||||
id: PropTypes.number.isRequired,
|
||||
completed: PropTypes.bool.isRequired,
|
||||
text: PropTypes.string.isRequired
|
||||
}).isRequired).isRequired,
|
||||
toggleTodo: PropTypes.func.isRequired
|
||||
}
|
||||
|
||||
export default TodoList
|
||||
Reference in New Issue
Block a user