Răsfoiți Sursa

fix: whiteboard not working because of properties

Tienson Qin 2 ani în urmă
părinte
comite
9f0eec2402

+ 12 - 7
src/main/frontend/components/page.cljs

@@ -420,11 +420,16 @@
   (rum/local false ::hover?)
   (rum/local false ::hover?)
   (rum/local false ::configuring?)
   (rum/local false ::configuring?)
   {:init (fn [state]
   {:init (fn [state]
-           (assoc state ::title-value (atom (nth (:rum/args state) 1))))}
-  [state page-name title {:keys [fmt-journal? preview?]}]
-  (when title
+           (let [page-name (first (:rum/args state))
+                 original-name (if page-name
+                                 (:block/origina-name (db/entity [:block/name (util/page-name-sanity-lc page-name)]))
+                                 "")]
+             (assoc state ::title-value (atom original-name))))}
+  [state page-name {:keys [fmt-journal? preview?]}]
+  (when page-name
     (let [page (when page-name (db/entity [:block/name page-name]))
     (let [page (when page-name (db/entity [:block/name page-name]))
           page (db/sub-block (:db/id page))
           page (db/sub-block (:db/id page))
+          title (:block/original-name page)
           icon (pu/lookup (:block/properties page) :icon)
           icon (pu/lookup (:block/properties page) :icon)
           *hover? (::hover? state)
           *hover? (::hover? state)
           *title-value (get state ::title-value)
           *title-value (get state ::title-value)
@@ -757,10 +762,10 @@
                                    (page-mouse-leave e *control-show?))}
                                    (page-mouse-leave e *control-show?))}
                 (page-blocks-collapse-control title *control-show? *all-collapsed?)])
                 (page-blocks-collapse-control title *control-show? *all-collapsed?)])
              (when-not whiteboard?
              (when-not whiteboard?
-               (page-title page-name title {:journal? journal?
-                                            :fmt-journal? fmt-journal?
-                                            :built-in-property? built-in-property?
-                                            :preview? preview?}))
+               (page-title page-name {:journal? journal?
+                                      :fmt-journal? fmt-journal?
+                                      :built-in-property? built-in-property?
+                                      :preview? preview?}))
              (when (not config/publishing?)
              (when (not config/publishing?)
                (when config/lsp-enabled?
                (when config/lsp-enabled?
                  [:div.flex.flex-row
                  [:div.flex.flex-row

+ 2 - 5
src/main/frontend/components/whiteboard.cljs

@@ -273,10 +273,7 @@
                             e
                             e
                             (content/page-title-custom-context-menu-content page-name))
                             (content/page-title-custom-context-menu-content page-name))
                            (state/set-state! :page-title/context nil))}
                            (state/set-state! :page-title/context nil))}
-       (page/page-title page-name
-                        [:span.text-lg
-                         (ui/icon "whiteboard" {:extension? true})]
-                        {:*configure-show? (atom false)})]
+       (page/page-title page-name {:*configure-show? (atom false)})]
 
 
       [:div.whiteboard-page-refs
       [:div.whiteboard-page-refs
        (references-count page-name
        (references-count page-name
@@ -289,7 +286,7 @@
      (tldraw-app page-name block-id)]))
      (tldraw-app page-name block-id)]))
 
 
 (rum/defc whiteboard-route <
 (rum/defc whiteboard-route <
-(shortcut/mixin :shortcut.handler/whiteboard false)
+  (shortcut/mixin :shortcut.handler/whiteboard false)
   [route-match]
   [route-match]
   (let [name (get-in route-match [:parameters :path :name])
   (let [name (get-in route-match [:parameters :path :name])
         {:keys [block-id]} (get-in route-match [:parameters :query])]
         {:keys [block-id]} (get-in route-match [:parameters :query])]

+ 3 - 2
src/main/frontend/db/model.cljs

@@ -1506,8 +1506,9 @@ independent of format as format specific heading characters are stripped"
   [repo page-name]
   [repo page-name]
   (let [key (if (react/db-graph?)
   (let [key (if (react/db-graph?)
               (:block/uuid (db-utils/entity [:block/name "logseq.tldraw.shape"]))
               (:block/uuid (db-utils/entity [:block/name "logseq.tldraw.shape"]))
-              :logseq.tldraw.shape)]
-    (->> (get-page-blocks-no-cache repo page-name {:keys [:block/uuid :block/properties]})
+              :logseq.tldraw.shape)
+        page (db-utils/entity [:block/name (util/page-name-sanity-lc page-name)])]
+    (->> (:block/_page page)
          (keep (fn [{:block/keys [uuid properties]}]
          (keep (fn [{:block/keys [uuid properties]}]
                  (when-let [shape (get properties key)]
                  (when-let [shape (get properties key)]
                    {:id (str uuid)
                    {:id (str uuid)

+ 11 - 7
src/main/frontend/extensions/pdf/assets.cljs

@@ -192,15 +192,19 @@
            ref-block)
            ref-block)
          (let [text       (:text content)
          (let [text       (:text content)
                wrap-props #(if-let [stamp (:image content)]
                wrap-props #(if-let [stamp (:image content)]
-                             (assoc % :hl-type :area :hl-stamp stamp)
+                             (assoc %
+                                    (pu/get-pid :hl-type) :area
+                                    (pu/get-pid :hl-stamp) stamp)
                              %)
                              %)
+               props (cond->
+                      {(pu/get-pid :ls-type)  :annotation
+                       (pu/get-pid :hl-page)  page
+                       (pu/get-pid :hl-color) (:color properties)}
+                       (not (config/db-based-graph? (state/get-current-repo)))
+                       ;; force custom uuid
+                       (assoc (pu/get-pid :id) (str id)))
                properties (->>
                properties (->>
-                           (wrap-props
-                            {:ls-type  :annotation
-                             :hl-page  page
-                             :hl-color (:color properties)
-                             ;; force custom uuid
-                             :id       (str id)})
+                           (wrap-props props)
                            (property-handler/replace-key-with-id! (state/get-current-repo)))]
                            (property-handler/replace-key-with-id! (state/get-current-repo)))]
            (when (string? text)
            (when (string? text)
              (editor-handler/api-insert-new-block!
              (editor-handler/api-insert-new-block!

+ 8 - 6
src/main/frontend/handler/db_based/property.cljs

@@ -413,12 +413,14 @@
   [m]
   [m]
   (zipmap
   (zipmap
    (map (fn [k]
    (map (fn [k]
-          (let [property-id (:block/uuid (db/entity [:block/name (util/page-name-sanity-lc (name k))]))]
-            (when-not property-id
-              (throw (ex-info "Property not exists yet"
-                              {:key k})))
-            property-id))
-     (keys m))
+          (if (uuid? k)
+            k
+            (let [property-id (:block/uuid (db/entity [:block/name (util/page-name-sanity-lc (name k))]))]
+             (when-not property-id
+               (throw (ex-info "Property not exists yet"
+                               {:key k})))
+             property-id)))
+        (keys m))
    (vals m)))
    (vals m)))
 
 
 (defn collapse-expand-property!
 (defn collapse-expand-property!

+ 10 - 1
src/main/frontend/handler/property/util.cljs

@@ -7,7 +7,8 @@
             [logseq.db.property :as db-property]
             [logseq.db.property :as db-property]
             [logseq.graph-parser.util :as gp-util]
             [logseq.graph-parser.util :as gp-util]
             [frontend.db :as db]
             [frontend.db :as db]
-            [clojure.set :as set]))
+            [clojure.set :as set]
+            [frontend.util :as util]))
 
 
 (defn lookup
 (defn lookup
   "Get the value of coll's (a map) `key`"
   "Get the value of coll's (a map) `key`"
@@ -31,6 +32,14 @@
   [uuid]
   [uuid]
   (:block/original-name (db/entity [:block/uuid uuid])))
   (:block/original-name (db/entity [:block/uuid uuid])))
 
 
+(defn get-pid
+  "Get a property's UUID given its name or key"
+  [property-name]
+  (let [repo (state/get-current-repo)]
+    (if (config/db-based-graph? repo)
+      (:block/uuid (db/entity [:block/name (util/page-name-sanity-lc (name property-name))]))
+      property-name)))
+
 (defn block->shape [block]
 (defn block->shape [block]
   (get-property block :logseq.tldraw.shape))
   (get-property block :logseq.tldraw.shape))
 
 

+ 21 - 22
src/main/frontend/handler/whiteboard.cljs

@@ -30,8 +30,8 @@
 
 
 (defn shape->block [shape page-name]
 (defn shape->block [shape page-name]
   ;; FIXME: support whiteboard props for db graph
   ;; FIXME: support whiteboard props for db graph
-  (let [properties {:ls-type :whiteboard-shape
-                    :logseq.tldraw.shape shape}
+  (let [properties {(pu/get-pid :ls-type) :whiteboard-shape
+                    (pu/get-pid :logseq.tldraw.shape) shape}
         block {:block/page {:block/name (util/page-name-sanity-lc page-name)}
         block {:block/page {:block/name (util/page-name-sanity-lc page-name)}
                :block/parent {:block/name page-name}
                :block/parent {:block/name page-name}
                :block/properties properties}
                :block/properties properties}
@@ -41,8 +41,7 @@
 (defn- get-whiteboard-clj [page-name]
 (defn- get-whiteboard-clj [page-name]
   (when (model/page-exists? page-name)
   (when (model/page-exists? page-name)
     (let [page-block (model/get-page page-name)
     (let [page-block (model/get-page page-name)
-          ;; fixme: can we use cache?
-          blocks (model/get-page-blocks-no-cache page-name)]
+          blocks (:block/_page page-block)]
       [page-block blocks])))
       [page-block blocks])))
 
 
 (defn- build-shapes
 (defn- build-shapes
@@ -77,14 +76,16 @@
         get-k #(gobj/get tldraw-page %)]
         get-k #(gobj/get tldraw-page %)]
     {:block/name page-name
     {:block/name page-name
      :block/type "whiteboard"
      :block/type "whiteboard"
-     ;; FIXME: support whiteboard props for db graph
-     :block/properties {:ls-type :whiteboard-page
-                        :logseq.tldraw.page {:id (get-k "id")
-                                             :name (get-k "name")
-                                             :bindings (js->clj-keywordize (get-k "bindings"))
-                                             :nonce (get-k "nonce")
-                                             :assets (js->clj-keywordize assets)
-                                             :shapes-index shapes-index}}
+     :block/properties {(pu/get-pid :ls-type)
+                        :whiteboard-page
+
+                        (pu/get-pid :logseq.tldraw.page)
+                        {:id (get-k "id")
+                         :name (get-k "name")
+                         :bindings (js->clj-keywordize (get-k "bindings"))
+                         :nonce (get-k "nonce")
+                         :assets (js->clj-keywordize assets)
+                         :shapes-index shapes-index}}
      :block/updated-at (util/time-ms)
      :block/updated-at (util/time-ms)
      :block/created-at (or (:block/created-at page-entity)
      :block/created-at (or (:block/created-at page-entity)
                            (util/time-ms))}))
                            (util/time-ms))}))
@@ -191,16 +192,14 @@
 
 
 (defn get-default-new-whiteboard-tx
 (defn get-default-new-whiteboard-tx
   [page-name id]
   [page-name id]
-  (let [properties (->>
-                    {:ls-type :whiteboard-page,
-                     :logseq.tldraw.page
-                     {:id id,
-                      :name page-name,
-                      :ls-type :whiteboard-page,
-                      :bindings {},
-                      :nonce 1,
-                      :assets []}}
-                    (property-handler/replace-key-with-id! (state/get-current-repo)))]
+  (let [properties {(pu/get-pid :ls-type) :whiteboard-page,
+                    (pu/get-pid :logseq.tldraw.page)
+                    {:id id,
+                     :name page-name,
+                     :ls-type :whiteboard-page,
+                     :bindings {},
+                     :nonce 1,
+                     :assets []}}]
     [#:block{:uuid id
     [#:block{:uuid id
              :name (util/page-name-sanity-lc page-name),
              :name (util/page-name-sanity-lc page-name),
              :original-name page-name
              :original-name page-name