Ctrl K
ComunidadGuías…

app/controllers/concerns/dialog_rendering.rb

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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