Skip to content

Commit 0668484

Browse files
committed
react toggle ToDo update via API
1 parent 4b5262c commit 0668484

File tree

6 files changed

+57
-11
lines changed

6 files changed

+57
-11
lines changed

public/js/bundle.js

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29440,9 +29440,12 @@
2944029440
};
2944129441

2944229442
var toggleCompleted = exports.toggleCompleted = function toggleCompleted(id) {
29443+
var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
29444+
2944329445
return {
2944429446
type: 'TOGGLE_COMPLETED',
29445-
id: id
29447+
id: id,
29448+
payload: payload
2944629449
};
2944729450
};
2944829451

@@ -30380,6 +30383,7 @@
3038030383
exports.refreshToken = refreshToken;
3038130384
exports.getTodos = getTodos;
3038230385
exports.addTodo = addTodo;
30386+
exports.toggleTodo = toggleTodo;
3038330387

3038430388
var _constant = __webpack_require__(285);
3038530389

@@ -30467,6 +30471,10 @@
3046730471
title: text
3046830472
}, config(accessToken));
3046930473
}
30474+
30475+
function toggleTodo(accessToken, id) {
30476+
return _axios2.default.put(_constant2.default.apiUrl + '/todos/' + id + '/toggle', null, config(accessToken));
30477+
}
3047030478

3047130479
/***/ },
3047230480
/* 285 */
@@ -32313,10 +32321,12 @@
3231332321
key: 'render',
3231432322
value: function render() {
3231532323
var addTodo = this.props.addTodo.bind(this, this.props.auth.accessToken);
32324+
var toggleCompleted = this.props.toggleCompleted.bind(this, this.props.auth.accessToken);
32325+
3231632326
return _react2.default.createElement(_MyTodo2.default, { items: this.props.todos,
3231732327
visibilityFilter: this.props.visibilityFilter,
3231832328
addTodo: addTodo,
32319-
toggleCompleted: this.props.toggleCompleted,
32329+
toggleCompleted: toggleCompleted,
3232032330
setVisibilityFilter: this.props.setVisibilityFilter,
3232132331
resetTodo: this.props.resetTodo,
3232232332
loading: this.props.loading });
@@ -32365,8 +32375,16 @@
3236532375

3236632376
todoName.val('');
3236732377
},
32368-
toggleCompleted: function toggleCompleted(e) {
32378+
toggleCompleted: function toggleCompleted(accessToken, e) {
3236932379
var id = $(e.target).closest("input").attr('id');
32380+
32381+
(0, _sdk.toggleTodo)(accessToken, id).then(function (response) {
32382+
dispatch(actionCreators.toggleCompleted(id, response));
32383+
}).catch(function (error) {
32384+
console.log('Failed to toggle ToDo');
32385+
console.log(error);
32386+
});
32387+
3237032388
dispatch(actionCreators.toggleCompleted(id));
3237132389
},
3237232390
setVisibilityFilter: function setVisibilityFilter(e) {
@@ -33535,8 +33553,14 @@
3353533553
return todo;
3353633554
}
3353733555

33556+
if (Object.keys(action.payload).length === 0) {
33557+
return _extends({}, todo, {
33558+
completed: !todo.completed
33559+
});
33560+
}
33561+
3353833562
return _extends({}, todo, {
33539-
completed: !todo.completed
33563+
completed: action.payload.data.data[0].attributes.is_completed
3354033564
});
3354133565
});
3354233566
case 'RESET_TODO':

public/js/bundle.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

resources/app/actions/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ export const addTodo = (payload) => {
1313
}
1414
};
1515

16-
export const toggleCompleted = (id) => {
16+
export const toggleCompleted = (id, payload = {}) => {
1717
return {
1818
type: 'TOGGLE_COMPLETED',
19-
id: id
19+
id: id,
20+
payload
2021
}
2122
};
2223

resources/app/containers/DashboardContainer.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import React from 'react';
1010
import MyTodo from './../components/MyTodo';
1111
import {connect} from 'react-redux';
1212
import * as actionCreators from './../actions';
13-
import {getTodos, addTodo} from './../helpers/sdk';
13+
import {getTodos, addTodo, toggleTodo} from './../helpers/sdk';
1414

1515
class DashboardContainer extends React.Component {
1616
componentWillMount() {
@@ -19,11 +19,13 @@ class DashboardContainer extends React.Component {
1919

2020
render() {
2121
var addTodo = this.props.addTodo.bind(this, this.props.auth.accessToken);
22+
var toggleCompleted = this.props.toggleCompleted.bind(this, this.props.auth.accessToken);
23+
2224
return (
2325
<MyTodo items={this.props.todos}
2426
visibilityFilter={this.props.visibilityFilter}
2527
addTodo={addTodo}
26-
toggleCompleted={this.props.toggleCompleted}
28+
toggleCompleted={toggleCompleted}
2729
setVisibilityFilter={this.props.setVisibilityFilter}
2830
resetTodo={this.props.resetTodo}
2931
loading={this.props.loading}/>
@@ -70,8 +72,16 @@ const mapDispatchToProps = (dispatch) => {
7072

7173
todoName.val('');
7274
},
73-
toggleCompleted: (e) => {
75+
toggleCompleted: (accessToken, e) => {
7476
var id = $(e.target).closest("input").attr('id');
77+
78+
toggleTodo(accessToken, id).then(function (response) {
79+
dispatch(actionCreators.toggleCompleted(id, response));
80+
}).catch(function (error) {
81+
console.log('Failed to toggle ToDo');
82+
console.log(error);
83+
});
84+
7585
dispatch(actionCreators.toggleCompleted(id));
7686
},
7787
setVisibilityFilter: (e) => {

resources/app/helpers/sdk.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,8 @@ export function addTodo(accessToken, text) {
7474
return axios.post(Constant.apiUrl + '/todos', {
7575
title: text
7676
}, config(accessToken));
77+
}
78+
79+
export function toggleTodo(accessToken, id) {
80+
return axios.put(Constant.apiUrl + '/todos/' + id + '/toggle', null, config(accessToken));
7781
}

resources/app/reducers/todos.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,16 @@ const todos = (state = [], action) => {
2525
return todo;
2626
}
2727

28+
if (Object.keys(action.payload).length === 0) {
29+
return {
30+
...todo,
31+
completed: !todo.completed
32+
}
33+
}
34+
2835
return {
2936
...todo,
30-
completed: !todo.completed
37+
completed: action.payload.data.data[0].attributes.is_completed
3138
}
3239
});
3340
case 'RESET_TODO':

0 commit comments

Comments
 (0)