mirror of
https://github.com/penpot/penpot.git
synced 2026-10-03 01:06:14 +00:00
🐛 Fix crashing happening on hot reloads (#12005)
This commit is contained in:
parent
d67a00c1d5
commit
d851f82678
@ -54,8 +54,12 @@
|
||||
(let [el (dom/get-element "app")]
|
||||
(mf/create-root el)))
|
||||
|
||||
;; Root component of the last render; a hot reload of `app.main.ui` replaces it
|
||||
(defonce ^:private rendered-app (atom nil))
|
||||
|
||||
(defn init-ui
|
||||
[]
|
||||
(reset! rendered-app ui/app)
|
||||
(mf/render! app-root (mf/element ui/app)))
|
||||
|
||||
(defn- initialize-rasterizer
|
||||
@ -146,7 +150,10 @@
|
||||
(init-ui)))
|
||||
|
||||
(defn ^:dev/after-load after-load
|
||||
"Rerender the UI after a hot reload. When the reload replaced the root
|
||||
component, unmount the whole tree first so its cleanups run before
|
||||
the new tree mounts."
|
||||
[]
|
||||
(reinit))
|
||||
(reinit (not (identical? @rendered-app ui/app))))
|
||||
|
||||
(set! (.-stackTraceLimit js/Error) 50)
|
||||
|
||||
@ -2492,6 +2492,13 @@
|
||||
:cause cause)
|
||||
nil)))))
|
||||
|
||||
;; Stable listener identities, so `removeEventListener` matches across hot reloads
|
||||
(defonce ^:private webgl-context-lost-listener
|
||||
(fn [event] (on-webgl-context-lost event)))
|
||||
|
||||
(defonce ^:private webgl-context-restored-listener
|
||||
(fn [event] (on-webgl-context-restored event)))
|
||||
|
||||
(defn init-canvas-context
|
||||
[canvas]
|
||||
(if-not (wasm/module-ready?)
|
||||
@ -2536,8 +2543,8 @@
|
||||
;; Add event listeners for WebGL context lost
|
||||
(set! wasm/canvas canvas)
|
||||
(when can-listen?
|
||||
(.addEventListener canvas "webglcontextlost" on-webgl-context-lost)
|
||||
(.addEventListener canvas "webglcontextrestored" on-webgl-context-restored))
|
||||
(.addEventListener canvas "webglcontextlost" webgl-context-lost-listener)
|
||||
(.addEventListener canvas "webglcontextrestored" webgl-context-restored-listener))
|
||||
(start-canvas-snapshot-listener!)
|
||||
(reset! wasm/context-lost? false)
|
||||
(set! wasm/context-initialized? true)
|
||||
@ -2571,8 +2578,8 @@
|
||||
|
||||
;; Remove listener before losing/deleting context.
|
||||
(when wasm/canvas
|
||||
(.removeEventListener wasm/canvas "webglcontextlost" on-webgl-context-lost)
|
||||
(.removeEventListener wasm/canvas "webglcontextrestored" on-webgl-context-restored))
|
||||
(.removeEventListener wasm/canvas "webglcontextlost" webgl-context-lost-listener)
|
||||
(.removeEventListener wasm/canvas "webglcontextrestored" webgl-context-restored-listener))
|
||||
(stop-canvas-snapshot-listener!)
|
||||
|
||||
(when (wasm/module-ready?)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user