Browse Source

fix(plugin): occasional memory leak when dynamic slot ui with provide ui

charlie 3 years ago
parent
commit
6facd22ea0
1 changed files with 9 additions and 2 deletions
  1. 9 2
      src/main/frontend/components/plugins.cljs

+ 9 - 2
src/main/frontend/components/plugins.cljs

@@ -795,15 +795,22 @@
          id      (str "slot__" rs)
          id      (str "slot__" rs)
          *el-ref (rum/use-ref nil)]
          *el-ref (rum/use-ref nil)]
 
 
+     (rum/use-effect!
+      (fn []
+        (let [timer (js/setTimeout
+                     #(plugin-handler/hook-plugin-app type {:slot id :payload payload} nil)
+                     100)]
+          #(js/clearTimeout timer)))
+      [id])
+
      (rum/use-effect!
      (rum/use-effect!
       (fn []
       (fn []
         (let [el (rum/deref *el-ref)]
         (let [el (rum/deref *el-ref)]
-          (plugin-handler/hook-plugin-app type {:slot id :payload payload} nil)
           #(when-let [uis (seq (.querySelectorAll el "[data-injected-ui]"))]
           #(when-let [uis (seq (.querySelectorAll el "[data-injected-ui]"))]
              (doseq [^js el uis]
              (doseq [^js el uis]
                (when-let [id (.-injectedUi (.-dataset el))]
                (when-let [id (.-injectedUi (.-dataset el))]
                  (js/LSPluginCore._forceCleanInjectedUI id))))))
                  (js/LSPluginCore._forceCleanInjectedUI id))))))
-      [id])
+      [])
 
 
      [:div.lsp-hook-ui-slot
      [:div.lsp-hook-ui-slot
       (merge opts {:id            id
       (merge opts {:id            id