Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.69 KB | None | 0 0
  1. // Like Container
  2.  
  3. import { connect } from 'react-redux';
  4. import { likePost } from 'actions/Posts';
  5.  
  6. import Like from 'components/ui/Like';
  7.  
  8. function mapDispatchToProps(dispatch) {
  9. return {
  10. likePost: (posts, postId) => dispatch(likePost(posts, postId))
  11. };
  12. }
  13.  
  14. export default connect(null, mapDispatchToProps)(Like);
  15.  
  16.  
  17. // Like ui component
  18.  
  19. const Like = (props) => (
  20. <div>
  21. {props.likes}
  22. <RaisedButton label="Like"
  23. onClick={() => props.likePost(props.posts, props.postId)}
  24. className="like-button" />
  25. </div>
  26. );
  27.  
  28. export default Like;
  29.  
  30.  
  31. // src/actions/Posts.js
  32.  
  33. export function likePost(posts, postId) {
  34. return {
  35. type: types.LIKE_POST,
  36. posts,
  37. postId
  38. };
  39. }
  40.  
  41.  
  42. // src/reducers/Posts.js
  43.  
  44. export default function(state = initialState, action) {
  45. switch (action.type) {
  46. case types.FETCH_POSTS_REQUEST:
  47. return assign({}, initialState, { isLoading: true });
  48. case types.FETCH_POSTS_ERROR:
  49. return assign({}, initialState, { error: true });
  50. case types.FETCH_POSTS_SUCCESS:
  51. return assign({}, initialState, { posts: action.response });
  52. case types.LIKE_POST:
  53. return assign({}, initialState, {
  54. posts: incrementLikes(action.posts, action.postId)
  55. });
  56. default: return state;
  57. }
  58. }
  59.  
  60. const incrementLikes = (posts, postId) => {
  61. const postIndex = posts.findIndex(post => post.id == postId);
  62. let updatedPosts;
  63.  
  64. if (postIndex > -1) {
  65. const post = posts[postIndex];
  66. const updatedPost = update(post, {
  67. details: {likes: {$set: (post.details.likes + 1)}}
  68. });
  69.  
  70. updatedPosts = {
  71. posts: posts
  72. .slice(0, postIndex)
  73. .concat(updatedPost)
  74. .concat(posts.slice(postIndex + 1))
  75. };
  76. }
  77. return updatedPosts.posts;
  78. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement