app/controllers/concerns/dialog_rendering.rb
Rama master · réplica de lectura del repositorio original.
module DialogRendering
extend ActiveSupport::Concern
included do
layout -> { "dialog" if dialog? && !native_app? }
helper_method :dialog?
before_action :remove_dialog_param_from_referer
before_action :render_dialog_frame
end
class_methods do
def render_in_dialog(**options)
before_action(**options) { @dialog = true }
end
end
private
def dialog?
!!@dialog
end
def remove_dialog_param_from_referer
return if request.referer.blank?
uri = URI.parse(request.referer)
query = Rack::Utils.parse_nested_query(uri.query).except(DialogHelper::DIALOG_PARAM)
uri.query = query.to_query.presence
request.set_header("HTTP_REFERER", uri.to_s)
rescue
request.delete_header("HTTP_REFERER")
end
def render_dialog_frame
return unless turbo_frame_request_id == "turbo-dialog" && params[DialogHelper::DIALOG_PARAM].present?
render partial: "shared/dialog_frame"
end
end