From f9ea5e999a298f658ef7fb2abc7c13ba3ca412cb Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Tue, 14 Sep 2021 23:34:39 -0400 Subject: fix turbo redirects --- app/controllers/concerns/turbo/redirection.rb | 32 +++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 app/controllers/concerns/turbo/redirection.rb (limited to 'app/controllers/concerns/turbo/redirection.rb') diff --git a/app/controllers/concerns/turbo/redirection.rb b/app/controllers/concerns/turbo/redirection.rb new file mode 100644 index 0000000..cf7cc55 --- /dev/null +++ b/app/controllers/concerns/turbo/redirection.rb @@ -0,0 +1,32 @@ +module Turbo + module Redirection + extend ActiveSupport::Concern + + def redirect_to(url = {}, options = {}) + turbo = options.delete(:turbo) + + super.tap do + if turbo != false && request.xhr? && !request.get? + visit_location_with_turbo(location, turbo) + end + end + end + + private + def visit_location_with_turbo(location, action) + visit_options = { + action: action.to_s == "advance" ? action : "replace" + } + + script = [] + script << "Turbo.clearCache()" + script << "Turbo.visit(#{location.to_json}, #{visit_options.to_json})" + + self.status = 200 + self.response_body = script.join("\n") + response.content_type = "text/javascript" + response.headers["X-Xhr-Redirect"] = location + end + end +end + -- cgit 1.4.1