diff --git a/src/main/frontend/components/page.cljs b/src/main/frontend/components/page.cljs index b2021a208d..eadaec4fa0 100644 --- a/src/main/frontend/components/page.cljs +++ b/src/main/frontend/components/page.cljs @@ -484,24 +484,39 @@ edit-input-id (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 -(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 ::control-show?) (rum/local nil ::current-page) (rum/local false ::configure-show?) [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) repo (or repo current-repo) *configure-show? (::configure-show? state) page-name (util/page-name-sanity-lc path-page-name) block-id (parse-uuid page-name) 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) db-based? (config/db-based-graph? repo) built-in-property? (and (= "property" (:block/type page)) @@ -510,14 +525,6 @@ whiteboard? (:whiteboard? option) ;; in a whiteboard portal shape? whiteboard-page? (model/whiteboard-page? page-name) ;; is this page a whiteboard? 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) page-name (:block/name page) page-original-name (:block/original-name page) diff --git a/src/main/frontend/components/property/value.cljs b/src/main/frontend/components/property/value.cljs index 9efaa17bf6..70f5bb4da2 100644 --- a/src/main/frontend/components/property/value.cljs +++ b/src/main/frontend/components/property/value.cljs @@ -234,12 +234,16 @@ (when-let [f (:on-chosen opts)] (f))) :show-new-when-not-exact-match? true :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 (fn [e] (case (util/ekey e) "Escape" - (when-let [f (:on-chosen opts)] (f)) + (do + (exit-edit-property) + (when-let [f (:on-chosen opts)] (f))) nil))})}))) (defn create-new-block! diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index d719640100..cd9c08e412 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -1105,7 +1105,7 @@ :block/uuid)] (let [pos (state/get-edit-pos)] (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))) (defn zoom-out! @@ -1120,14 +1120,14 @@ (:block/uuid block-parent))] (do (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]) :block/page :db/id)] (when-let [page-name (:block/name (db/entity page-id))] (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))) (defn cut-block!