From 09060e12c0b7f50dad2b13579b1ddbfe1f1c22f9 Mon Sep 17 00:00:00 2001 From: xfy Date: Wed, 3 Jun 2026 10:34:06 +0800 Subject: [PATCH] fix(admin): cap tiptap editor ready-polling at 100 attempts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace infinite loop with bounded for-loop (100 × 100ms = 10s max). On timeout the skeleton overlay is dismissed so the user can still interact with the form instead of being stuck forever. --- src/pages/admin/write.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pages/admin/write.rs b/src/pages/admin/write.rs index 06c4cc8..c04723b 100644 --- a/src/pages/admin/write.rs +++ b/src/pages/admin/write.rs @@ -57,7 +57,7 @@ pub fn Write() -> Element { #[cfg(target_arch = "wasm32")] { wasm_bindgen_futures::spawn_local(async move { - loop { + for _ in 0..100 { if let Ok(promise_val) = js_sys::eval("new Promise(r => setTimeout(r, 100))") { if let Ok(promise) = promise_val.dyn_into::() { let _ = wasm_bindgen_futures::JsFuture::from(promise).await; @@ -66,10 +66,11 @@ pub fn Write() -> Element { if let Ok(ready) = js_sys::eval("window.__tiptap_ready") { if ready.as_bool().unwrap_or(false) { loading.set(false); - break; + return; } } } + loading.set(false); }); } #[cfg(not(target_arch = "wasm32"))]