fix(turbo): patch turbo to make link_to work without global turbo enabled

This commit is contained in:
Paul Chavard 2022-05-08 12:33:27 +02:00
parent ad25bd36bb
commit 219fc2f3bc
2 changed files with 41 additions and 5 deletions

View file

@ -42,8 +42,12 @@
= yield :charts_js
// Container for custom turbo-stream actions
%turbo-events
// Container for turbo form that we can submit from inside other forms
%div{ 'data-turbo': 'true' }
= form_tag('', id: :turbo_form)
// Container for custom turbo-stream actions
%turbo-events
// We patch `@hotwired/turbo` to attach forms generated from links to this
// container instead of the body to avoid conflicts with `@rails/ujs`. We also
// patch `@hotwired/turbo` to add a timeout before removing the form because in
// order to be accepted as a valid `turbo form`` either global `turbo drive`` should
// be enabled or the form needs to have a parent with `data-turbo="true"` on it.
%div{ 'data-turbo': 'true' }

View file

@ -0,0 +1,32 @@
diff --git a/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js b/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js
index 963422f..65364f1 100644
--- a/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js
+++ b/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js
@@ -2621,9 +2621,9 @@ class Session {
form.addEventListener("turbo:submit-start", () => form.remove());
}
else {
- form.addEventListener("submit", () => form.remove());
+ form.addEventListener("submit", () => setTimeout(() => form.remove(), 500));
}
- document.body.appendChild(form);
+ (document.querySelector('body > [data-turbo="true"]') || document.body).appendChild(form);
return dispatch("submit", { cancelable: true, target: form });
}
else {
diff --git a/node_modules/@hotwired/turbo/dist/turbo.es2017-umd.js b/node_modules/@hotwired/turbo/dist/turbo.es2017-umd.js
index 101db1f..ce43031 100644
--- a/node_modules/@hotwired/turbo/dist/turbo.es2017-umd.js
+++ b/node_modules/@hotwired/turbo/dist/turbo.es2017-umd.js
@@ -2627,9 +2627,9 @@ Copyright © 2021 Basecamp, LLC
form.addEventListener("turbo:submit-start", () => form.remove());
}
else {
- form.addEventListener("submit", () => form.remove());
+ form.addEventListener("submit", () => setTimeout(() => form.remove(), 500));
}
- document.body.appendChild(form);
+ (document.querySelector('body > [data-turbo="true"]') || document.body).appendChild(form);
return dispatch("submit", { cancelable: true, target: form });
}
else {