From 714324ea99de7b71a36a94aa31db6bc9de7fde63 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Thu, 17 Sep 2026 15:25:37 +0300 Subject: [PATCH] native refresh --- app/javascript/application.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/app/javascript/application.js b/app/javascript/application.js index 27c79e7e0..0f7c5bcff 100644 --- a/app/javascript/application.js +++ b/app/javascript/application.js @@ -85,6 +85,31 @@ document.addEventListener('turbo:morph', () => { document.activeElement?.blur() }) +if (window.webkit?.messageHandlers?.native) { + const staleSnapshots = new Set() + let isRestoring = false + + window.Turbo.session.view.clearSnapshotCache = function () { + this.snapshotCache.keys.forEach((key) => staleSnapshots.add(key)) + } + + document.addEventListener('turbo:submit-end', (e) => { + if (e.detail.success && !e.detail.formSubmission.isSafe) { + window.webkit.messageHandlers.native.postMessage({ type: 'stale' }) + } + }) + + document.addEventListener('turbo:visit', (e) => { + isRestoring = e.detail.action === 'restore' + }) + + document.addEventListener('turbo:load', () => { + if (staleSnapshots.delete(window.location.href.split('#')[0]) && isRestoring) { + setTimeout(() => window.Turbo.session.refresh(document.baseURI)) + } + }) +} + document.addEventListener('turbo:before-fetch-request', (event) => { event.detail.fetchOptions.headers['X-Turbo'] = 'true' })