diff --git a/app/javascript/entrypoints/sdk.js b/app/javascript/entrypoints/sdk.js index 0aac9104e..a2cf297f1 100755 --- a/app/javascript/entrypoints/sdk.js +++ b/app/javascript/entrypoints/sdk.js @@ -23,12 +23,18 @@ const runSDK = ({ baseUrl, websiteToken }) => { return; } - if (window.Turbo) { - // if this is a Rails Turbo app - document.addEventListener('turbo:before-render', event => - restoreWidgetInDOM(event.detail.newBody) - ); - } + // if this is a Rails Turbo app + document.addEventListener('turbo:before-render', event => { + // when morphing the page, this typically happens on reload like events + // say you update a "Customer" on a form and it reloads the page + // We have already added data-turbo-permananent to true. This + // will ensure that the widget it preserved + // Read more about morphing here: https://turbo.hotwired.dev/handbook/page_refreshes#morphing + // and peristing elements here: https://turbo.hotwired.dev/handbook/building#persisting-elements-across-page-loads + if (event.detail.renderMethod === 'morph') return; + + restoreWidgetInDOM(event.detail.newBody); + }); if (window.Turbolinks) { document.addEventListener('turbolinks:before-render', event => { diff --git a/app/javascript/sdk/DOMHelpers.js b/app/javascript/sdk/DOMHelpers.js index f8ba55337..ce12836d7 100644 --- a/app/javascript/sdk/DOMHelpers.js +++ b/app/javascript/sdk/DOMHelpers.js @@ -5,6 +5,7 @@ export const loadCSS = () => { const css = document.createElement('style'); css.innerHTML = `${SDK_CSS}`; css.id = 'cw-widget-styles'; + css.dataset.turboPermanent = true; document.body.appendChild(css); }; diff --git a/app/javascript/sdk/IFrameHelper.js b/app/javascript/sdk/IFrameHelper.js index 21b2fb8d4..469fbe8de 100644 --- a/app/javascript/sdk/IFrameHelper.js +++ b/app/javascript/sdk/IFrameHelper.js @@ -82,6 +82,7 @@ export const IFrameHelper = { addClasses(widgetHolder, holderClassName); widgetHolder.id = 'cw-widget-holder'; + widgetHolder.dataset.turboPermanent = true; widgetHolder.appendChild(iframe); body.appendChild(widgetHolder); IFrameHelper.initPostMessageCommunication(); diff --git a/app/javascript/sdk/bubbleHelpers.js b/app/javascript/sdk/bubbleHelpers.js index 05c67f478..c53323e27 100644 --- a/app/javascript/sdk/bubbleHelpers.js +++ b/app/javascript/sdk/bubbleHelpers.js @@ -67,6 +67,7 @@ export const createBubbleHolder = hideMessageBubble => { } addClasses(bubbleHolder, 'woot--bubble-holder'); bubbleHolder.id = 'cw-bubble-holder'; + bubbleHolder.dataset.turboPermanent = true; body.appendChild(bubbleHolder); };