fix: slow loading when a page has a lot of code blocks

Resolved #755
This commit is contained in:
Tienson Qin
2020-11-25 22:40:30 +08:00
parent a98239ea20
commit 57fe9f4430

View File

@@ -3,6 +3,7 @@
[frontend.util :as util]
[goog.dom :as gdom]
[goog.object :as gobj]
[medley.core :as medley]
[frontend.db :as db]
[frontend.state :as state]
[frontend.handler.editor :as editor-handler]
@@ -53,7 +54,7 @@
(let [block (db/pull [:block/uuid (:block/uuid config)])
format (:block/format block)
;; Get newest state
pos-meta (::pos-meta state)
pos-meta (:pos-meta state)
{:keys [start_pos end_pos]} @pos-meta
value (str "\n" (string/trimr value) "\n")
content (:block/content block)
@@ -105,34 +106,39 @@
(if changed?
(save!)
(editor-handler/edit-block! block :max (:block/format block) block-id)))
(save!))))}})
element (.getWrapperElement editor)]
(.on editor "blur" (fn []
(save-file-or-block-when-blur-or-esc! editor textarea config state)))
(.addEventListener element "click"
(fn [e]
(util/stop e)))
(.save editor)
(.refresh editor)
;; (when clojure?
;; (par-cm/init editor))
(save!))))}})]
(let [element (.getWrapperElement editor)]
(.on editor "blur" (fn []
(save-file-or-block-when-blur-or-esc! editor textarea config state)))
(.addEventListener element "click"
(fn [e]
(util/stop e)))
(.save editor)
(.refresh editor))
editor))
(defn- load-and-render!
[state]
(let [editor (render! state)]
(assoc state ::editor editor)))
(let [editor-atom (:editor-atom state)]
(js/setTimeout (fn []
(let [editor (render! state)]
(reset! editor-atom editor))) 10)))
(rum/defcs editor < rum/reactive
{:init (fn [state]
(assoc state ::pos-meta (atom (last (:rum/args state)))))
(assoc state
:pos-meta (atom (last (:rum/args state)))
:editor-atom (atom nil)))
:did-mount (fn [state]
(load-and-render! state))
(load-and-render! state)
state)
:did-update (fn [state]
(when-let [editor (::editor state)]
(let [code (nth (:rum/args state) 3)]
(.setValue (.getDoc editor) code)))
(when-let [pos-meta (::pos-meta state)]
(when-let [editor-atom (:editor-atom state)]
(let [editor @editor-atom
code (nth (:rum/args state) 3)]
(when editor
(.setValue (.getDoc editor) code))))
(when-let [pos-meta (:pos-meta state)]
(reset! pos-meta (last (:rum/args state)))))}
[state config id attr code pos_meta]
[:div.extensions__code