浏览代码

fix: redirect to linked block if zoom in

Tienson Qin 2 年之前
父节点
当前提交
26a673f201

+ 21 - 14
src/main/frontend/components/page.cljs

@@ -484,24 +484,39 @@
            edit-input-id
            edit-input-id
            (assoc properties-opts :class-schema? class?))])])))
            (assoc properties-opts :class-schema? class?))])])))
 
 
+(defn- get-path-page-name
+  [state page-name]
+  (or page-name
+      (get-block-uuid-by-block-route-name state)
+      ;; is page name or uuid
+      (get-page-name state)
+      (state/get-current-page)))
+
 ;; A page is just a logical block
 ;; A page is just a logical block
-(rum/defcs ^:large-vars/cleanup-todo page-inner < rum/reactive
+(rum/defcs ^:large-vars/cleanup-todo page-inner < rum/reactive db-mixins/query
   (rum/local false ::all-collapsed?)
   (rum/local false ::all-collapsed?)
   (rum/local false ::control-show?)
   (rum/local false ::control-show?)
   (rum/local nil   ::current-page)
   (rum/local nil   ::current-page)
   (rum/local false ::configure-show?)
   (rum/local false ::configure-show?)
   [state {:keys [repo page-name preview? sidebar?] :as option}]
   [state {:keys [repo page-name preview? sidebar?] :as option}]
-  (when-let [path-page-name (or page-name
-                                (get-block-uuid-by-block-route-name state)
-                                ;; is page name or uuid
-                                (get-page-name state)
-                                (state/get-current-page))]
+  (when-let [path-page-name (get-path-page-name state page-name)]
     (let [current-repo (state/sub :git/current-repo)
     (let [current-repo (state/sub :git/current-repo)
           repo (or repo current-repo)
           repo (or repo current-repo)
           *configure-show? (::configure-show? state)
           *configure-show? (::configure-show? state)
           page-name (util/page-name-sanity-lc path-page-name)
           page-name (util/page-name-sanity-lc path-page-name)
           block-id (parse-uuid page-name)
           block-id (parse-uuid page-name)
           block? (boolean block-id)
           block? (boolean block-id)
+          db-id (if block?
+                  (let [entity (db/entity [:block/uuid block-id])]
+                    (:db/id entity))
+                  (do
+                    (when-not (db/entity repo [:block/name page-name])
+                      (let [m (block/page-name->map path-page-name true)]
+                        (db/transact! repo [m])))
+                    (:db/id (db/entity [:block/name page-name]))))
+          page (db/sub-block db-id)
+          block-id (:block/uuid page)
+          block? (some? (:block/page page))
           journal? (db/journal-page? page-name)
           journal? (db/journal-page? page-name)
           db-based? (config/db-based-graph? repo)
           db-based? (config/db-based-graph? repo)
           built-in-property? (and (= "property" (:block/type page))
           built-in-property? (and (= "property" (:block/type page))
@@ -510,14 +525,6 @@
           whiteboard? (:whiteboard? option) ;; in a whiteboard portal shape?
           whiteboard? (:whiteboard? option) ;; in a whiteboard portal shape?
           whiteboard-page? (model/whiteboard-page? page-name) ;; is this page a whiteboard?
           whiteboard-page? (model/whiteboard-page? page-name) ;; is this page a whiteboard?
           route-page-name path-page-name
           route-page-name path-page-name
-          page (if block?
-                 (->> (:db/id (:block/page (db/entity repo [:block/uuid block-id])))
-                      (db/entity repo))
-                 (do
-                   (when-not (db/entity repo [:block/name page-name])
-                     (let [m (block/page-name->map path-page-name true)]
-                       (db/transact! repo [m])))
-                   (db/pull [:block/name page-name])))
           {:keys [icon]} (:block/properties page)
           {:keys [icon]} (:block/properties page)
           page-name (:block/name page)
           page-name (:block/name page)
           page-original-name (:block/original-name page)
           page-original-name (:block/original-name page)

+ 6 - 2
src/main/frontend/components/property/value.cljs

@@ -234,12 +234,16 @@
                                  (when-let [f (:on-chosen opts)] (f)))
                                  (when-let [f (:on-chosen opts)] (f)))
                     :show-new-when-not-exact-match? true
                     :show-new-when-not-exact-match? true
                     :input-opts (fn [_]
                     :input-opts (fn [_]
-                                  {:on-blur (or (:on-chosen opts) identity)
+                                  {:on-blur (fn []
+                                              (exit-edit-property)
+                                              (when-let [f (:on-chosen opts)] (f)))
                                    :on-key-down
                                    :on-key-down
                                    (fn [e]
                                    (fn [e]
                                      (case (util/ekey e)
                                      (case (util/ekey e)
                                        "Escape"
                                        "Escape"
-                                       (when-let [f (:on-chosen opts)] (f))
+                                       (do
+                                         (exit-edit-property)
+                                         (when-let [f (:on-chosen opts)] (f)))
                                        nil))})})))
                                        nil))})})))
 
 
 (defn create-new-block!
 (defn create-new-block!

+ 3 - 3
src/main/frontend/handler/editor.cljs

@@ -1105,7 +1105,7 @@
                           :block/uuid)]
                           :block/uuid)]
       (let [pos (state/get-edit-pos)]
       (let [pos (state/get-edit-pos)]
         (route-handler/redirect-to-page! id)
         (route-handler/redirect-to-page! id)
-        (js/setTimeout #(edit-block! {:block/uuid id} pos id) 0)))
+        (js/setTimeout #(edit-block! {:block/uuid id} pos id) 50)))
     (js/window.history.forward)))
     (js/window.history.forward)))
 
 
 (defn zoom-out!
 (defn zoom-out!
@@ -1120,14 +1120,14 @@
                        (:block/uuid block-parent))]
                        (:block/uuid block-parent))]
             (do
             (do
               (route-handler/redirect-to-page! id)
               (route-handler/redirect-to-page! id)
-              (js/setTimeout #(edit-block! {:block/uuid block-id} :max block-id) 0))
+              (js/setTimeout #(edit-block! {:block/uuid block-id} :max block-id) 50))
             (let [page-id (some-> (db/entity [:block/uuid block-id])
             (let [page-id (some-> (db/entity [:block/uuid block-id])
                                   :block/page
                                   :block/page
                                   :db/id)]
                                   :db/id)]
 
 
               (when-let [page-name (:block/name (db/entity page-id))]
               (when-let [page-name (:block/name (db/entity page-id))]
                 (route-handler/redirect-to-page! page-name)
                 (route-handler/redirect-to-page! page-name)
-                (js/setTimeout #(edit-block! {:block/uuid block-id} :max block-id) 0)))))))
+                (js/setTimeout #(edit-block! {:block/uuid block-id} :max block-id) 50)))))))
     (js/window.history.back)))
     (js/window.history.back)))
 
 
 (defn cut-block!
 (defn cut-block!