mirror of https://github.com/logseq/logseq
fix: lazy load whiteboards
parent
0a5ca160f9
commit
b5b85dd44d
|
@ -4,7 +4,6 @@
|
|||
["path" :as node-path]
|
||||
[clojure.string :as string]
|
||||
[logseq.db.sqlite.util :as sqlite-util]
|
||||
[logseq.db :as ldb]
|
||||
[logseq.common.util.date-time :as date-time-util]
|
||||
[logseq.common.util :as common-util]))
|
||||
|
||||
|
@ -26,26 +25,24 @@
|
|||
(let [get-children (fn [col]
|
||||
(map (fn [e]
|
||||
(select-keys e [:db/id :block/uuid :block/page :block/left :block/parent]))
|
||||
col))]
|
||||
(if (common-util/uuid-string? name) ; block
|
||||
(let [id (uuid name)
|
||||
block (d/entity db [:block/uuid id])]
|
||||
(when block
|
||||
(let [result {:block (d/pull db '[*] (:db/id block))}]
|
||||
(if children?
|
||||
(let [children (->> (ldb/get-block-children-ids db id)
|
||||
(map #(d/entity db [:block/uuid %])))]
|
||||
(assoc result :children (get-children children)))
|
||||
result))
|
||||
(cond->
|
||||
{:block (d/pull db '[*] (:db/id block))}
|
||||
children?
|
||||
(assoc :children (get-children (:block/_parent block))))))
|
||||
(when-let [block (d/entity db [:block/name name])]
|
||||
col))
|
||||
uuid? (common-util/uuid-string? name)
|
||||
block (when uuid?
|
||||
(let [id (uuid name)]
|
||||
(d/entity db [:block/uuid id])))]
|
||||
(if (and block (not (:block/name block))) ; not a page
|
||||
(cond->
|
||||
{:block (d/pull db '[*] (:db/id block))}
|
||||
children?
|
||||
(assoc :children (get-children (:block/_parent block))))
|
||||
(when-let [block (or block (d/entity db [:block/name name]))]
|
||||
(cond->
|
||||
{:block (d/pull db '[*] (:db/id block))}
|
||||
children?
|
||||
(assoc :children (get-children (:block/_page block))))))))
|
||||
(assoc :children
|
||||
(if (contains? (:block/type block) "whiteboard")
|
||||
(d/pull-many db '[*] (map :db/id (:block/_page block)))
|
||||
(get-children (:block/_page block)))))))))
|
||||
|
||||
(defn get-latest-journals
|
||||
[db n]
|
||||
|
|
|
@ -20,7 +20,8 @@
|
|||
[promesa.core :as p]
|
||||
[rum.core :as rum]
|
||||
[shadow.loader :as loader]
|
||||
[frontend.config :as config]))
|
||||
[frontend.config :as config]
|
||||
[frontend.db.async :as db-async]))
|
||||
|
||||
(defonce tldraw-loaded? (atom false))
|
||||
(rum/defc tldraw-app < rum/reactive
|
||||
|
@ -39,13 +40,15 @@
|
|||
{:init (fn [state]
|
||||
(p/let [_ (loader/load :tldraw)]
|
||||
(reset! tldraw-loaded? true))
|
||||
(let [page-name (first (:rum/args state))]
|
||||
(db-async/<get-block-and-children (state/get-current-repo) page-name))
|
||||
state)}
|
||||
[page-name]
|
||||
(let [loaded? (rum/react tldraw-loaded?)
|
||||
tldr (whiteboard-handler/page-name->tldr! page-name)
|
||||
generate-preview (when loaded?
|
||||
(resolve 'frontend.extensions.tldraw/generate-preview))]
|
||||
(when generate-preview
|
||||
(when (and generate-preview (not (state/sub-block-unloaded? page-name)))
|
||||
(generate-preview tldr))))
|
||||
|
||||
;; TODO: use frontend.ui instead of making a new one
|
||||
|
|
|
@ -22,7 +22,8 @@
|
|||
[promesa.core :as p]
|
||||
[rum.core :as rum]
|
||||
[frontend.ui :as ui]
|
||||
[frontend.components.whiteboard :as whiteboard]))
|
||||
[frontend.components.whiteboard :as whiteboard]
|
||||
[frontend.db.async :as db-async]))
|
||||
|
||||
(def tldraw (r/adapt-class (gobj/get TldrawLogseq "App")))
|
||||
|
||||
|
@ -201,21 +202,26 @@
|
|||
:model data})])
|
||||
|
||||
(rum/defc tldraw-app-inner < rum/reactive
|
||||
{:init (fn [state]
|
||||
(let [page-name (first (:rum/args state))]
|
||||
(db-async/<get-block-and-children (state/get-current-repo) page-name)
|
||||
state))}
|
||||
[page-name block-id loaded-app set-loaded-app]
|
||||
(let [populate-onboarding? (whiteboard-handler/should-populate-onboarding-whiteboard? page-name)
|
||||
on-mount (fn [^js tln]
|
||||
(when tln
|
||||
(set! (.-appUndo tln) undo)
|
||||
(set! (.-appRedo tln) redo)
|
||||
(when-let [^js api (gobj/get tln "api")]
|
||||
(p/then (when populate-onboarding?
|
||||
(whiteboard-handler/populate-onboarding-whiteboard api))
|
||||
#(do (whiteboard-handler/cleanup! (.-currentPage tln))
|
||||
(state/focus-whiteboard-shape tln block-id)
|
||||
(set-loaded-app tln))))))
|
||||
data (whiteboard-handler/page-name->tldr! page-name)]
|
||||
(when data
|
||||
(tldraw-inner page-name data populate-onboarding? loaded-app on-mount))))
|
||||
(when-not (state/sub-block-unloaded? page-name)
|
||||
(let [populate-onboarding? (whiteboard-handler/should-populate-onboarding-whiteboard? page-name)
|
||||
on-mount (fn [^js tln]
|
||||
(when tln
|
||||
(set! (.-appUndo tln) undo)
|
||||
(set! (.-appRedo tln) redo)
|
||||
(when-let [^js api (gobj/get tln "api")]
|
||||
(p/then (when populate-onboarding?
|
||||
(whiteboard-handler/populate-onboarding-whiteboard api))
|
||||
#(do (whiteboard-handler/cleanup! (.-currentPage tln))
|
||||
(state/focus-whiteboard-shape tln block-id)
|
||||
(set-loaded-app tln))))))
|
||||
data (whiteboard-handler/page-name->tldr! page-name)]
|
||||
(when data
|
||||
(tldraw-inner page-name data populate-onboarding? loaded-app on-mount)))))
|
||||
|
||||
(rum/defc tldraw-app
|
||||
[page-name block-id]
|
||||
|
|
Loading…
Reference in New Issue