Skip to content

Commit 19e6aeb

Browse files
author
lewis617
committed
wilddog
1 parent d2fa4e6 commit 19e6aeb

File tree

20 files changed

+16719
-1373
lines changed

20 files changed

+16719
-1373
lines changed

redux-wilddog-todos/dist/app.js

Lines changed: 16469 additions & 0 deletions
Large diffs are not rendered by default.

todo-redux/dist/vendors.js renamed to redux-wilddog-todos/dist/vendors.js

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@
9999
/***/ function(module, exports, __webpack_require__) {
100100

101101
__webpack_require__(1);
102-
module.exports = __webpack_require__(159);
102+
module.exports = __webpack_require__(166);
103103

104104

105105
/***/ },
@@ -19690,7 +19690,14 @@
1969019690

1969119691
/***/ },
1969219692
/* 158 */,
19693-
/* 159 */
19693+
/* 159 */,
19694+
/* 160 */,
19695+
/* 161 */,
19696+
/* 162 */,
19697+
/* 163 */,
19698+
/* 164 */,
19699+
/* 165 */,
19700+
/* 166 */
1969419701
/***/ function(module, exports, __webpack_require__) {
1969519702

1969619703
'use strict';
@@ -19699,23 +19706,23 @@
1969919706

1970019707
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
1970119708

19702-
var _createStore = __webpack_require__(160);
19709+
var _createStore = __webpack_require__(167);
1970319710

1970419711
var _createStore2 = _interopRequireDefault(_createStore);
1970519712

19706-
var _utilsCombineReducers = __webpack_require__(162);
19713+
var _utilsCombineReducers = __webpack_require__(169);
1970719714

1970819715
var _utilsCombineReducers2 = _interopRequireDefault(_utilsCombineReducers);
1970919716

19710-
var _utilsBindActionCreators = __webpack_require__(165);
19717+
var _utilsBindActionCreators = __webpack_require__(172);
1971119718

1971219719
var _utilsBindActionCreators2 = _interopRequireDefault(_utilsBindActionCreators);
1971319720

19714-
var _utilsApplyMiddleware = __webpack_require__(166);
19721+
var _utilsApplyMiddleware = __webpack_require__(173);
1971519722

1971619723
var _utilsApplyMiddleware2 = _interopRequireDefault(_utilsApplyMiddleware);
1971719724

19718-
var _utilsCompose = __webpack_require__(167);
19725+
var _utilsCompose = __webpack_require__(174);
1971919726

1972019727
var _utilsCompose2 = _interopRequireDefault(_utilsCompose);
1972119728

@@ -19726,7 +19733,7 @@
1972619733
exports.compose = _utilsCompose2['default'];
1972719734

1972819735
/***/ },
19729-
/* 160 */
19736+
/* 167 */
1973019737
/***/ function(module, exports, __webpack_require__) {
1973119738

1973219739
'use strict';
@@ -19736,7 +19743,7 @@
1973619743

1973719744
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
1973819745

19739-
var _utilsIsPlainObject = __webpack_require__(161);
19746+
var _utilsIsPlainObject = __webpack_require__(168);
1974019747

1974119748
var _utilsIsPlainObject2 = _interopRequireDefault(_utilsIsPlainObject);
1974219749

@@ -19894,7 +19901,7 @@
1989419901
}
1989519902

1989619903
/***/ },
19897-
/* 161 */
19904+
/* 168 */
1989819905
/***/ function(module, exports) {
1989919906

1990019907
'use strict';
@@ -19930,7 +19937,7 @@
1993019937
module.exports = exports['default'];
1993119938

1993219939
/***/ },
19933-
/* 162 */
19940+
/* 169 */
1993419941
/***/ function(module, exports, __webpack_require__) {
1993519942

1993619943
/* WEBPACK VAR INJECTION */(function(process) {'use strict';
@@ -19940,17 +19947,17 @@
1994019947

1994119948
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
1994219949

19943-
var _createStore = __webpack_require__(160);
19950+
var _createStore = __webpack_require__(167);
1994419951

19945-
var _isPlainObject = __webpack_require__(161);
19952+
var _isPlainObject = __webpack_require__(168);
1994619953

1994719954
var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
1994819955

19949-
var _mapValues = __webpack_require__(163);
19956+
var _mapValues = __webpack_require__(170);
1995019957

1995119958
var _mapValues2 = _interopRequireDefault(_mapValues);
1995219959

19953-
var _pick = __webpack_require__(164);
19960+
var _pick = __webpack_require__(171);
1995419961

1995519962
var _pick2 = _interopRequireDefault(_pick);
1995619963

@@ -20067,7 +20074,7 @@
2006720074
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
2006820075

2006920076
/***/ },
20070-
/* 163 */
20077+
/* 170 */
2007120078
/***/ function(module, exports) {
2007220079

2007320080
/**
@@ -20092,7 +20099,7 @@
2009220099
module.exports = exports["default"];
2009320100

2009420101
/***/ },
20095-
/* 164 */
20102+
/* 171 */
2009620103
/***/ function(module, exports) {
2009720104

2009820105
/**
@@ -20119,7 +20126,7 @@
2011920126
module.exports = exports["default"];
2012020127

2012120128
/***/ },
20122-
/* 165 */
20129+
/* 172 */
2012320130
/***/ function(module, exports, __webpack_require__) {
2012420131

2012520132
'use strict';
@@ -20129,7 +20136,7 @@
2012920136

2013020137
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
2013120138

20132-
var _mapValues = __webpack_require__(163);
20139+
var _mapValues = __webpack_require__(170);
2013320140

2013420141
var _mapValues2 = _interopRequireDefault(_mapValues);
2013520142

@@ -20178,7 +20185,7 @@
2017820185
module.exports = exports['default'];
2017920186

2018020187
/***/ },
20181-
/* 166 */
20188+
/* 173 */
2018220189
/***/ function(module, exports, __webpack_require__) {
2018320190

2018420191
'use strict';
@@ -20191,7 +20198,7 @@
2019120198

2019220199
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
2019320200

20194-
var _compose = __webpack_require__(167);
20201+
var _compose = __webpack_require__(174);
2019520202

2019620203
var _compose2 = _interopRequireDefault(_compose);
2019720204

@@ -20244,7 +20251,7 @@
2024420251
module.exports = exports['default'];
2024520252

2024620253
/***/ },
20247-
/* 167 */
20254+
/* 174 */
2024820255
/***/ function(module, exports) {
2024920256

2025020257
/**
File renamed without changes.

todo-redux/package.json renamed to redux-wilddog-todos/package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@
1313
"react-dom": "^0.14.6",
1414
"react-redux": "^4.0.6",
1515
"redux": "^3.0.5",
16-
"webpack": "^1.12.10"
16+
"redux-logger": "^2.4.0",
17+
"redux-thunk": "^1.0.3",
18+
"webpack": "^1.12.10",
19+
"wilddog": "^0.5.0"
1720
},
1821
"scripts": {
1922
"build": "webpack --progress -colors --watch"

redux-wilddog-todos/src/actions.js

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/*
2+
* action 类型
3+
*/
4+
export const GET_TODO_ERROR = 'GET_TODO_ERROR';
5+
export const GET_TODO_OK = 'GET_TODO_OK';
6+
export const ADD_TODO_ERROR = 'ADD_TODO_ERROR';
7+
export const ADD_TODO_OK = 'ADD_TODO_OK';
8+
export const REMOVE_TODO_OK = 'REMOVE_TODO_OK';
9+
export const REMOVE_TODO_ERROR = 'REMOVE_TODO_ERROR';
10+
11+
12+
/*
13+
* action 创建函数
14+
*/
15+
export function getTodo() {
16+
return (dispatch,getState)=>{
17+
const {wilddog}=getState();
18+
19+
wilddog.child('todos').once('value',(snapshot)=>{
20+
let obj=snapshot.val();
21+
let array=[];
22+
for(let key in obj){
23+
array.push({key:key,text:obj[key].text})
24+
}
25+
dispatch({
26+
type: GET_TODO_OK,
27+
payload: array
28+
})
29+
},(err)=>{
30+
dispatch({
31+
type: GET_TODO_ERROR,
32+
payload: err
33+
})
34+
});
35+
36+
37+
}
38+
}
39+
40+
export function addTodo(text) {
41+
return (dispatch,getState)=>{
42+
43+
const {wilddog}=getState();
44+
45+
wilddog.child('todos').push({
46+
text
47+
},(err)=>{
48+
if(err){dispatch({type:ADD_TODO_ERROR,payload:err})}
49+
});
50+
51+
52+
53+
}
54+
}
55+
56+
export function removeTodo(key) {
57+
return (dispatch,getState)=>{
58+
59+
const {wilddog}=getState();
60+
61+
wilddog.child(`todos/${key}`).remove((err)=>{
62+
if(err)dispatch({type:REMOVE_TODO_ERROR,payload:err})
63+
});
64+
65+
66+
}
67+
}
68+
69+
70+
export function registerListeners() {
71+
return (dispatch, getState) => {
72+
const {wilddog}=getState();
73+
74+
wilddog.child('todos').on('child_removed', snapshot => {
75+
dispatch({
76+
type: REMOVE_TODO_OK,
77+
payload: snapshot.key()
78+
})
79+
});
80+
81+
wilddog.child('todos').on('child_added', snapshot => dispatch({
82+
type: ADD_TODO_OK,
83+
payload: Object.assign({},snapshot.val(),{key:snapshot.key()})
84+
}));
85+
86+
87+
};
88+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import React, { Component, PropTypes } from 'react';
2+
3+
export default class Todo extends Component {
4+
render() {
5+
return (
6+
<li>
7+
{this.props.todo.text}
8+
<button onClick={this.props.remove.bind(this,this.props.todo.key)}>remove</button>
9+
</li>
10+
);
11+
}
12+
}
13+
14+
Todo.propTypes = {
15+
remove: PropTypes.func.isRequired,
16+
todo: PropTypes.object.isRequired
17+
};

todo-redux/src/components/TodoList.js renamed to redux-wilddog-todos/src/components/TodoList.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,18 @@ export default class TodoList extends Component {
66
return (
77
<ul>
88
{this.props.todos.map((todo, index) =>
9-
<Todo {...todo}
10-
key={index}
11-
onClick={() => this.props.onTodoClick(index)} />
9+
<Todo key={index}
10+
todo={todo}
11+
remove={this.props.remove} />
1212
)}
1313
</ul>
1414
)
1515
}
1616
}
1717

1818
TodoList.propTypes = {
19-
onTodoClick: PropTypes.func.isRequired,
19+
remove: PropTypes.func.isRequired,
2020
todos: PropTypes.arrayOf(PropTypes.shape({
21-
text: PropTypes.string.isRequired,
22-
completed: PropTypes.bool.isRequired
21+
text: PropTypes.string.isRequired
2322
}).isRequired).isRequired
2423
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import React, { Component, PropTypes } from 'react';
2+
import { connect } from 'react-redux';
3+
import { addTodo, removeTodo} from '../actions';
4+
import AddTodo from '../components/AddTodo';
5+
import TodoList from '../components/TodoList';
6+
7+
class App extends Component {
8+
render() {
9+
const { dispatch ,todos} = this.props;
10+
return (
11+
<div>
12+
<AddTodo
13+
onAddClick={text =>
14+
dispatch(addTodo(text))
15+
} />
16+
<TodoList
17+
todos={todos}
18+
remove={key =>
19+
dispatch(removeTodo(key))
20+
} />
21+
</div>
22+
)
23+
}
24+
}
25+
26+
App.propTypes = {
27+
todos: PropTypes.arrayOf(PropTypes.shape({
28+
text: PropTypes.string.isRequired
29+
}))
30+
}
31+
32+
//将state.counter绑定到props的counter
33+
function mapStateToProps(state) {
34+
return {
35+
todos: state.todos
36+
}
37+
}
38+
39+
export default connect(mapStateToProps)(App);

redux-wilddog-todos/src/index.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import React from 'react'
2+
import { render } from 'react-dom'
3+
import { Provider } from 'react-redux'
4+
import App from './containers/App'
5+
import Wilddog from 'wilddog/lib/wilddog-node'
6+
import createStore from './store'
7+
import { getTodo,registerListeners} from './actions'
8+
9+
let store = createStore({
10+
wilddog:new Wilddog('https://redux-wilddog-todos.wilddogio.com')
11+
});
12+
13+
store.dispatch(getTodo())
14+
store.dispatch(registerListeners())
15+
16+
render(
17+
<Provider store={store}>
18+
<App />
19+
</Provider>,
20+
document.querySelector("#app")
21+
);

0 commit comments

Comments
 (0)