Explorar o código

Fix like count

Daniel Supernault %!s(int64=7) %!d(string=hai) anos
pai
achega
dfe451db70

+ 17 - 8
app/Http/Controllers/LikeController.php

@@ -21,21 +21,30 @@ class LikeController extends Controller
       ]);
 
       $profile = Auth::user()->profile;
-      $status = Status::findOrFail($request->input('item'));
+      $status = Status::withCount('likes')->findOrFail($request->input('item'));
+
+      $count = $status->likes_count;
 
       if($status->likes()->whereProfileId($profile->id)->count() !== 0) {
         $like = Like::whereProfileId($profile->id)->whereStatusId($status->id)->firstOrFail();
         $like->delete();
-        return redirect()->back();
+        $count--;
+      } else {
+        $like = new Like;
+        $like->profile_id = $profile->id;
+        $like->status_id = $status->id;
+        $like->save();
+        $count++;
       }
 
-      $like = new Like;
-      $like->profile_id = $profile->id;
-      $like->status_id = $status->id;
-      $like->save();
-
       LikePipeline::dispatch($like);
 
-      return redirect($status->url());
+      if($request->ajax()) {
+        $response = ['code' => 200, 'msg' => 'Like saved', 'count' => $count];
+      } else {
+        $response = redirect($status->url());
+      }
+
+      return $response;
     }
 }

BIN=BIN
public/js/app.js


BIN=BIN
public/mix-manifest.json


+ 23 - 23
resources/assets/js/components/likebutton.js

@@ -30,30 +30,30 @@ $(document).ready(function() {
     e.preventDefault();
     var el = $(this);
     var id = el.data('id');
-    var res = axios.post('/i/like', {item: id});
-    var likes = ls.get('likes');
-    var action = false;
-    var counter = el.parents().eq(2).find('.like-count');
-    var count = parseInt(counter.text());
-    var heart = el.find('.status-heart');
+    axios.post('/i/like', {item: id})
+    .then(function (res) {
+      var likes = ls.get('likes');
+      var action = false;
+      var counter = el.parents().eq(2).find('.like-count');
+      var count = res.data.count;
+      var heart = el.find('.status-heart');
 
-    if(likes.indexOf(id) > -1) {
-      heart.addClass('far fa-heart').removeClass('fas fa-heart');
-      likes = likes.filter(function(item) { 
-          return item !== id
-      });
-      count = count == 0 ? 0 : count--;
-      counter.text(count);
-      action = 'unlike';
-    } else {
-      heart.addClass('fas fa-heart').removeClass('far fa-heart');
-      likes.push(id);
-      count++;
-      counter.text(count);
-      action = 'like';
-    }
+      if(likes.indexOf(id) > -1) {
+        heart.addClass('far fa-heart').removeClass('fas fa-heart');
+        likes = likes.filter(function(item) { 
+            return item !== id
+        });
+        counter.text(count);
+        action = 'unlike';
+      } else {
+        heart.addClass('fas fa-heart').removeClass('far fa-heart');
+        likes.push(id);
+        counter.text(count);
+        action = 'like';
+      }
 
-    ls.set('likes', likes);
-    console.log(action + ' - ' + $(this).data('id') + ' like event');
+      ls.set('likes', likes);
+      console.log(action + ' - ' + $(this).data('id') + ' like event');
+    });
   });
 });