70 lines
1.5 KiB
Ruby
70 lines
1.5 KiB
Ruby
class LeafablesController < ApplicationController
|
|
allow_unauthenticated_access only: :show
|
|
|
|
include SetBookLeaf
|
|
|
|
before_action :ensure_editable, except: :show
|
|
before_action :broadcast_being_edited_indicator, only: :update
|
|
|
|
def new
|
|
@leafable = new_leafable
|
|
end
|
|
|
|
def create
|
|
@leaf = @book.press new_leafable, leaf_params
|
|
position_new_leaf @leaf
|
|
end
|
|
|
|
def show
|
|
end
|
|
|
|
def edit
|
|
end
|
|
|
|
def update
|
|
@leaf.edit leafable_params: leafable_params, leaf_params: leaf_params
|
|
|
|
respond_to do |format|
|
|
format.turbo_stream { render }
|
|
format.html { head :no_content }
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@leaf.trashed!
|
|
|
|
respond_to do |format|
|
|
format.turbo_stream { render }
|
|
format.html { redirect_to book_slug_url(@book) }
|
|
end
|
|
end
|
|
|
|
private
|
|
def leaf_params
|
|
default_leaf_params.merge params.fetch(:leaf, {}).permit(:title)
|
|
end
|
|
|
|
def default_leaf_params
|
|
{ title: new_leafable.model_name.human }
|
|
end
|
|
|
|
def new_leafable
|
|
raise NotImplementedError.new "Implement in subclass"
|
|
end
|
|
|
|
def leafable_params
|
|
raise NotImplementedError.new "Implement in subclass"
|
|
end
|
|
|
|
def position_new_leaf(leaf)
|
|
if position = params[:position]&.to_i
|
|
leaf.move_to_position position
|
|
end
|
|
end
|
|
|
|
def broadcast_being_edited_indicator
|
|
Turbo::StreamsChannel.broadcast_render_later_to @leaf, :being_edited,
|
|
partial: "leaves/being_edited_by", locals: { leaf: @leaf, user: Current.user }
|
|
end
|
|
end
|