Skip to content

Commit

Permalink
Turbo Broadcasts CRUD
Browse files Browse the repository at this point in the history
  • Loading branch information
yshmarov committed Mar 30, 2023
1 parent 106b13b commit 609c00d
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 3 deletions.
13 changes: 12 additions & 1 deletion app/controllers/posts_controller.rb
Expand Up @@ -25,6 +25,10 @@ def create

respond_to do |format|
if @post.save
Broadcasters::Posts::Created.new(@post).call

# update_posts_count
# Turbo::StreamsChannel.broadcast_append_to :posts_list, target: 'all-posts', partial: 'posts/post', locals: { post: @post }
format.html { redirect_to post_url(@post), notice: "Post was successfully created." }
format.json { render :show, status: :created, location: @post }
else
Expand All @@ -38,6 +42,7 @@ def create
def update
respond_to do |format|
if @post.update(post_params)
Turbo::StreamsChannel.broadcast_replace_to :posts_list, target: @post, partial: 'posts/post', locals: { post: @post }
format.html { redirect_to post_url(@post), notice: "Post was successfully updated." }
format.json { render :show, status: :ok, location: @post }
else
Expand All @@ -50,7 +55,8 @@ def update
# DELETE /posts/1 or /posts/1.json
def destroy
@post.destroy

update_posts_count
Turbo::StreamsChannel.broadcast_remove_to :posts_list, target: @post
respond_to do |format|
format.html { redirect_to posts_url, notice: "Post was successfully destroyed." }
format.json { head :no_content }
Expand All @@ -67,4 +73,9 @@ def set_post
def post_params
params.require(:post).permit(:body)
end

def update_posts_count
# Turbo::StreamsChannel.broadcast_update_to :posts_list, target: 'posts_count', html: Post.count
Turbo::StreamsChannel.broadcast_update_to :posts_list, target: 'posts_count', partial: 'posts/count', locals: { count: Post.count }
end
end
23 changes: 23 additions & 0 deletions app/models/post.rb
@@ -1,2 +1,25 @@
class Post < ApplicationRecord
# broadcasts_to ->(post) { :posts_list }

# after_create_commit { broadcast_prepend_to :posts_list }
# after_create_commit { broadcast_append_to :posts_list }
# after_update_commit { broadcast_replace_to :posts_list }
# after_destroy_commit { broadcast_remove_to :posts_list }

# after_create_commit do
# update_posts_count
# broadcast_append_to :posts_list, target: 'all-posts', partial: 'posts/post', locals: { post: self }
# end
# after_update_commit do
# broadcast_replace_to :posts_list, target: self, partial: 'posts/post', locals: { post: self }
# end
# after_destroy_commit do
# update_posts_count
# broadcast_remove_to :posts_list, target: self
# end

# def update_posts_count
# # broadcast_update_to :posts_list, target: 'posts_count', html: Post.count
# broadcast_update_to :posts_list, target: 'posts_count', partial: 'posts/count', locals: { count: Post.count }
# end
end
21 changes: 21 additions & 0 deletions app/services/broadcasters/posts/created.rb
@@ -0,0 +1,21 @@
class Broadcasters::Posts::Created
attr_reader :post
def initialize(post)
@post = post
end

def call
update_posts_count
add_post_to_list
end

private

def add_post_to_list
Turbo::StreamsChannel.broadcast_append_to :posts_list, target: 'all-posts', partial: 'posts/post', locals: { post: @post }
end

def update_posts_count
Turbo::StreamsChannel.broadcast_update_to :posts_list, target: 'posts_count', partial: 'posts/count', locals: { count: Post.count }
end
end
1 change: 1 addition & 0 deletions app/views/posts/_count.html.erb
@@ -0,0 +1 @@
<%= count %>
11 changes: 9 additions & 2 deletions app/views/posts/index.html.erb
@@ -1,8 +1,15 @@
<p style="color: green"><%= notice %></p>

<h1>Posts</h1>
<h1>
Posts:
<span id="posts_count">
<%= @posts.count %>
</span>
</h1>

<div id="posts">
<%= turbo_stream_from :posts_list %>

<div id="all-posts">
<% @posts.each do |post| %>
<%= render post %>
<p>
Expand Down

0 comments on commit 609c00d

Please sign in to comment.