Переглянути джерело

enhance(apis): add create, add, and remove tag functions

charlie 1 місяць тому
батько
коміт
51fbc705de

+ 1 - 1
libs/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@logseq/libs",
   "name": "@logseq/libs",
-  "version": "0.2.3",
+  "version": "0.2.4",
   "description": "Logseq SDK libraries",
   "description": "Logseq SDK libraries",
   "main": "dist/lsplugin.user.js",
   "main": "dist/lsplugin.user.js",
   "typings": "index.d.ts",
   "typings": "index.d.ts",

+ 3 - 0
libs/src/LSPlugin.ts

@@ -780,6 +780,9 @@ export interface IEditorProxy extends Record<string, any> {
   getAllTags: () => Promise<PageEntity[] | null>
   getAllTags: () => Promise<PageEntity[] | null>
   getAllProperties: () => Promise<PageEntity[] | null>
   getAllProperties: () => Promise<PageEntity[] | null>
   getTagObjects: (PageIdentity) => Promise<BlockEntity[] | null>
   getTagObjects: (PageIdentity) => Promise<BlockEntity[] | null>
+  createTag: (tagName: string) => Promise<PageEntity | null>
+  addTag: (blockId: BlockIdentity, tagId: BlockIdentity) => Promise<void>
+  removeTag: (blockId: BlockIdentity, tagId: BlockIdentity) => Promise<void>
 
 
   prependBlockInPage: (
   prependBlockInPage: (
     page: PageIdentity,
     page: PageIdentity,

+ 3 - 0
src/main/logseq/api.cljs

@@ -200,6 +200,9 @@
 (def ^:export get_all_tags db-based-api/get-all-tags)
 (def ^:export get_all_tags db-based-api/get-all-tags)
 (def ^:export get_all_properties db-based-api/get-all-properties)
 (def ^:export get_all_properties db-based-api/get-all-properties)
 (def ^:export get_tag_objects db-based-api/get-tag-objects)
 (def ^:export get_tag_objects db-based-api/get-tag-objects)
+(def ^:export create_tag db-based-api/create-tag)
+(def ^:export add_tag db-based-api/add-tag)
+(def ^:export remove_tag db-based-api/remove-tag)
 
 
 ;; Internal db-based CLI APIs
 ;; Internal db-based CLI APIs
 (def ^:export list_tags cli-based-api/list-tags)
 (def ^:export list_tags cli-based-api/list-tags)

+ 24 - 0
src/main/logseq/api/db_based.cljs

@@ -12,6 +12,8 @@
             [frontend.handler.editor :as editor-handler]
             [frontend.handler.editor :as editor-handler]
             [frontend.handler.page :as page-handler]
             [frontend.handler.page :as page-handler]
             [frontend.modules.layout.core]
             [frontend.modules.layout.core]
+            [frontend.handler.db-based.page :as db-page-handler]
+            [frontend.db.async :as db-async]
             [frontend.state :as state]
             [frontend.state :as state]
             [frontend.util :as util]
             [frontend.util :as util]
             [logseq.api.block :as api-block]
             [logseq.api.block :as api-block]
@@ -192,3 +194,25 @@
                                               (state/get-current-repo)
                                               (state/get-current-repo)
                                               (:db/id class))]
                                               (:db/id class))]
         (sdk-utils/result->js result)))))
         (sdk-utils/result->js result)))))
+
+(defn create-tag [title]
+  (p/let [repo (state/get-current-repo)
+          tag (db-page-handler/<create-class! title {:redirect? false})
+          tag (db-async/<get-block repo (:db/id tag) {:children? false})]
+    (when tag
+      (sdk-utils/result->js tag))))
+
+(defn add-tag [id-or-name tag-id]
+  (p/let [repo (state/get-current-repo)
+          tag (db-async/<get-block repo tag-id)
+          block (db-async/<get-block repo id-or-name)]
+    (when (and tag block)
+      (db-page-handler/add-tag repo (:db/id block) tag))))
+
+(defn remove-tag [id-or-name tag-id]
+  (p/let [repo (state/get-current-repo)
+          block (db-async/<get-block repo id-or-name)
+          tag (db-async/<get-block repo tag-id)]
+    (when (and block tag)
+      (db-property-handler/delete-property-value!
+       (:db/id block) :block/tags (:db/id tag)))))