diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index dec248dc08..1c5c6326d8 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -84,7 +84,9 @@ def toggle_favorite current_user.toggle_favorite(asset) respond_to do |format| - format.turbo_stream { render turbo_stream: '' } + format.turbo_stream do + render turbo_stream: turbo_stream.update_all(".faved-#{asset.id}", asset.reload.favorites_count) + end end end diff --git a/app/javascript/controllers/favorite_controller.js b/app/javascript/controllers/favorite_controller.js index a0b95c8590..c273009df2 100644 --- a/app/javascript/controllers/favorite_controller.js +++ b/app/javascript/controllers/favorite_controller.js @@ -5,7 +5,16 @@ export default class extends HeartController { id: Number, } + static outlets = [ "favorite" ] + isFavorited() { return window.userFavorites.includes(this.idValue) } + + broadcast() { + this.favoriteOutlets.forEach((result) => { + if (this.idValue == result.idValue) + result.toggle() + }) + } } diff --git a/app/views/assets/_asset.html.erb b/app/views/assets/_asset.html.erb index a16e206c41..ea605a687b 100644 --- a/app/views/assets/_asset.html.erb +++ b/app/views/assets/_asset.html.erb @@ -56,8 +56,9 @@ <%= button_to toggle_favorite_path(asset_id: asset.id), class: 'add_to_favorites', method: :put, data: { controller: 'favorite', - action: 'favorite#toggle', - 'favorite-id-value': asset.id + action: 'favorite#broadcast', + 'favorite-id-value': asset.id, + 'favorite-favorite-outlet': ".add_to_favorites" } do %> <%== render file: svg_path('svg/animation_heart.svg') %> <% end %> @@ -84,10 +85,13 @@ -