diff --git a/app/Http/Controllers/LikeController.php b/app/Http/Controllers/LikeController.php index 932958d5e..0ca585ccc 100644 --- a/app/Http/Controllers/LikeController.php +++ b/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; } } diff --git a/public/js/app.js b/public/js/app.js index 92bd71082..4160ff4b1 100644 Binary files a/public/js/app.js and b/public/js/app.js differ diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 4693a4f2a..9ec635527 100644 Binary files a/public/mix-manifest.json and b/public/mix-manifest.json differ diff --git a/resources/assets/js/components/likebutton.js b/resources/assets/js/components/likebutton.js index 70ff929ee..9ea111ac8 100644 --- a/resources/assets/js/components/likebutton.js +++ b/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'); + }); }); }); \ No newline at end of file