Browse Source

refactor(plugins): separate file graph apis

Tienson Qin 2 weeks ago
parent
commit
3cc530a16f
4 changed files with 105 additions and 68 deletions
  1. 2 0
      libs/src/LSPlugin.ts
  2. 17 68
      src/main/logseq/api.cljs
  3. 5 0
      src/main/logseq/api/db.cljs
  4. 81 0
      src/main/logseq/api/file.cljs

+ 2 - 0
libs/src/LSPlugin.ts

@@ -703,6 +703,8 @@ export interface IEditorProxy extends Record<string, any> {
     opts?: Partial<{
       before: boolean
       sibling: boolean
+      start: boolean
+      end: boolean
       isPageBlock: boolean
       focus: boolean
       customUUID: string

+ 17 - 68
src/main/logseq/api.cljs

@@ -11,7 +11,6 @@
             [frontend.db :as db]
             [frontend.db.async :as db-async]
             [frontend.db.conn :as conn]
-            [frontend.db.file-based.model :as file-model]
             [frontend.db.model :as db-model]
             [frontend.db.query-custom :as query-custom]
             [frontend.db.query-dsl :as query-dsl]
@@ -49,10 +48,10 @@
             [lambdaisland.glogi :as log]
             [logseq.api.block :as api-block]
             [logseq.api.db :as db-api]
+            [logseq.api.file :as file-api]
             [logseq.common.util :as common-util]
             [logseq.common.util.date-time :as date-time-util]
             [logseq.db :as ldb]
-            [logseq.db.common.property-util :as db-property-util]
             [logseq.outliner.core :as outliner-core]
             [logseq.sdk.assets :as sdk-assets]
             [logseq.sdk.core]
@@ -169,14 +168,6 @@
              (sdk-utils/normalize-keyword-for-json)
              (bean/->js))))
 
-(def ^:export get_current_graph_templates
-  (fn []
-    (when-let [repo (state/get-current-repo)]
-      (p/let [templates (db-async/<get-all-templates repo)]
-        (some-> templates
-                (sdk-utils/normalize-keyword-for-json)
-                (bean/->js))))))
-
 (def ^:export get_current_graph
   (fn []
     (when-let [repo (state/get-current-repo)]
@@ -689,12 +680,12 @@
         (let [{:keys [pos] :or {pos :max}} (bean/->clj opts)]
           (editor-handler/edit-block! block pos {:container-id :unknown-container}))))))
 
-;; TODO: perf improvement, some operations such as delete-block doesn't need to load the full page
-;; instead, the db worker should provide those calls
 (defn- <ensure-page-loaded
   [block-uuid-or-page-name]
   (p/let [repo (state/get-current-repo)
-          block (db-async/<get-block repo (str block-uuid-or-page-name) {})
+          block (db-async/<get-block repo (str block-uuid-or-page-name)
+                                     {:children? true
+                                      :include-collapsed-children? true})
           _ (when-let [page-id (:db/id (:block/page block))]
               (when-let [page-uuid (:block/uuid (db/entity page-id))]
                 (db-async/<get-block repo page-uuid)))]
@@ -874,8 +865,9 @@
               flag (if (= "toggle" flag)
                      (not (util/collapsed? block))
                      (boolean flag))]
-          (if flag (editor-handler/collapse-block! block-uuid)
-              (editor-handler/expand-block! block-uuid))
+          (if flag
+            (editor-handler/collapse-block! block-uuid)
+            (editor-handler/expand-block! block-uuid))
           nil)))))
 
 ;; properties (db only)
@@ -1036,18 +1028,6 @@
               ref-blocks (db-utils/group-by-page result)]
         (bean/->js (sdk-utils/normalize-keyword-for-json ref-blocks))))))
 
-(defn ^:export get_pages_from_namespace
-  [ns]
-  (when-let [repo (and ns (state/get-current-repo))]
-    (when-let [pages (file-model/get-namespace-pages repo ns)]
-      (bean/->js (sdk-utils/normalize-keyword-for-json pages)))))
-
-(defn ^:export get_pages_tree_from_namespace
-  [ns]
-  (when-let [repo (and ns (state/get-current-repo))]
-    (when-let [pages (file-model/get-namespace-hierarchy repo ns)]
-      (bean/->js (sdk-utils/normalize-keyword-for-json pages)))))
-
 (defn ^:export prepend_block_in_page
   [uuid-or-page-name content ^js opts]
   (p/let [uuid-or-page-name (or
@@ -1191,46 +1171,6 @@
   [req-id]
   (ipc/ipc :httpRequestAbort req-id))
 
-;; file-based templates
-(defn ^:export get_template
-  [name]
-  (p/let [block (when name (db-async/<get-template-by-name name))]
-    (some-> block
-            (sdk-utils/normalize-keyword-for-json)
-            (bean/->js))))
-
-(defn ^:export insert_template
-  [target-uuid template-name]
-  (p/let [exists? (page-handler/<template-exists? template-name)]
-    (when exists?
-      (when-let [target (db-model/get-block-by-uuid target-uuid)]
-        (editor-handler/insert-template! nil template-name {:target target}) nil))))
-
-(defn ^:export exist_template
-  [name]
-  (page-handler/<template-exists? name))
-
-(defn ^:export create_template
-  [target-uuid template-name ^js opts]
-  (when (and template-name (db-model/get-block-by-uuid target-uuid))
-    (p/let [{:keys [overwrite]} (bean/->clj opts)
-            block (db-async/<get-template-by-name template-name)
-            repo (state/get-current-repo)]
-      (if (or (not block) (true? overwrite))
-        (do (when-let [old-target block]
-              (let [k (db-property-util/get-pid repo :logseq.property/template)]
-                (property-handler/remove-block-property! repo (:block/uuid old-target) k)))
-            (property-handler/set-block-property! repo target-uuid :logseq.property/template template-name))
-        (throw (js/Error. "Template already exists!"))))))
-
-(defn ^:export remove_template
-  [name]
-  (p/let [block (when name (db-async/<get-template-by-name name))]
-    (when block
-      (let [repo (state/get-current-repo)
-            k (db-property-util/get-pid repo :logseq.property/template)]
-        (property-handler/remove-block-property! repo (:block/uuid block) k)))))
-
 ;; search
 (defn ^:export search
   [q' & [opts]]
@@ -1248,4 +1188,13 @@
   []
   true)
 
-(def ^:export set_blocks_id #(editor-handler/set-blocks-id! (map uuid %)))
+;; file based graph APIs
+(def ^:export get_current_graph_templates file-api/get_current_graph_templates)
+(def ^:export get_template file-api/get_template)
+(def ^:export insert_template file-api/insert_template)
+(def ^:export exist_template file-api/exist_template)
+(def ^:export create_template file-api/create_template)
+(def ^:export remove_template file-api/remove_template)
+(def ^:export get_pages_from_namespace file-api/get_pages_from_namespace)
+(def ^:export get_pages_tree_from_namespace file-api/get_pages_tree_from_namespace)
+(def ^:export set_blocks_id file-api/set_blocks_id)

+ 5 - 0
src/main/logseq/api/db.cljs

@@ -95,3 +95,8 @@
               :schema (when schema
                         {key schema})}]
     (api-block/db-based-save-block-properties! block {key' value} opts)))
+
+;; TODO:
+;; get all tags
+;; get all properties
+;; get tag objects

+ 81 - 0
src/main/logseq/api/file.cljs

@@ -0,0 +1,81 @@
+(ns logseq.api.file
+  "File version related fns"
+  (:require [cljs-bean.core :as bean]
+            [cljs.reader]
+            [frontend.db.async :as db-async]
+            [frontend.db.file-based.model :as file-model]
+            [frontend.db.model :as db-model]
+            [frontend.handler.editor :as editor-handler]
+            [frontend.handler.page :as page-handler]
+            [frontend.handler.property :as property-handler]
+            [frontend.modules.layout.core]
+            [frontend.state :as state]
+            [logseq.db.common.property-util :as db-property-util]
+            [logseq.sdk.core]
+            [logseq.sdk.experiments]
+            [logseq.sdk.git]
+            [logseq.sdk.utils :as sdk-utils]
+            [promesa.core :as p]))
+
+;; file-based templates
+
+(defn get_current_graph_templates
+  []
+  (when-let [repo (state/get-current-repo)]
+    (p/let [templates (db-async/<get-all-templates repo)]
+      (some-> templates
+              (sdk-utils/normalize-keyword-for-json)
+              (bean/->js)))))
+
+(defn get_template
+  [name]
+  (p/let [block (when name (db-async/<get-template-by-name name))]
+    (some-> block
+            (sdk-utils/normalize-keyword-for-json)
+            (bean/->js))))
+
+(defn insert_template
+  [target-uuid template-name]
+  (p/let [exists? (page-handler/<template-exists? template-name)]
+    (when exists?
+      (when-let [target (db-model/get-block-by-uuid target-uuid)]
+        (editor-handler/insert-template! nil template-name {:target target}) nil))))
+
+(defn exist_template
+  [name]
+  (page-handler/<template-exists? name))
+
+(defn create_template
+  [target-uuid template-name ^js opts]
+  (when (and template-name (db-model/get-block-by-uuid target-uuid))
+    (p/let [{:keys [overwrite]} (bean/->clj opts)
+            block (db-async/<get-template-by-name template-name)
+            repo (state/get-current-repo)]
+      (if (or (not block) (true? overwrite))
+        (do (when-let [old-target block]
+              (let [k (db-property-util/get-pid repo :logseq.property/template)]
+                (property-handler/remove-block-property! repo (:block/uuid old-target) k)))
+            (property-handler/set-block-property! repo target-uuid :logseq.property/template template-name))
+        (throw (js/Error. "Template already exists!"))))))
+
+(defn remove_template
+  [name]
+  (p/let [block (when name (db-async/<get-template-by-name name))]
+    (when block
+      (let [repo (state/get-current-repo)
+            k (db-property-util/get-pid repo :logseq.property/template)]
+        (property-handler/remove-block-property! repo (:block/uuid block) k)))))
+
+(defn get_pages_from_namespace
+  [ns]
+  (when-let [repo (and ns (state/get-current-repo))]
+    (when-let [pages (file-model/get-namespace-pages repo ns)]
+      (bean/->js (sdk-utils/normalize-keyword-for-json pages)))))
+
+(defn get_pages_tree_from_namespace
+  [ns]
+  (when-let [repo (and ns (state/get-current-repo))]
+    (when-let [pages (file-model/get-namespace-hierarchy repo ns)]
+      (bean/->js (sdk-utils/normalize-keyword-for-json pages)))))
+
+(def set_blocks_id #(editor-handler/set-blocks-id! (map uuid %)))