diff --git a/src/main/frontend/db_worker.cljs b/src/main/frontend/db_worker.cljs index 939d4f84fb..aa21fa9d37 100644 --- a/src/main/frontend/db_worker.cljs +++ b/src/main/frontend/db_worker.cljs @@ -22,7 +22,8 @@ [frontend.worker.rtc.core :as rtc-core] [clojure.core.async :as async] [frontend.worker.async-util :include-macros true :refer [js {:result result})))) + (file-writes-finished? [this] (empty? @file/*writes)) diff --git a/src/main/frontend/handler/common/page.cljs b/src/main/frontend/handler/common/page.cljs index b86ae7b8bd..b512c99564 100644 --- a/src/main/frontend/handler/common/page.cljs +++ b/src/main/frontend/handler/common/page.cljs @@ -108,13 +108,14 @@ (defn after-page-deleted! - [repo page-name file-path] + [repo page-name file-path tx-meta] (let [repo-dir (config/get-repo-dir repo)] ;; TODO: move favorite && unfavorite to worker too (unfavorite-page! page-name) - (when (= (some-> (state/get-current-page) common-util/page-name-sanity-lc) - (common-util/page-name-sanity-lc page-name)) + (when (and (not= :rename-page (:real-outliner-op tx-meta)) + (= (some-> (state/get-current-page) common-util/page-name-sanity-lc) + (common-util/page-name-sanity-lc page-name))) (route-handler/redirect-to-home!)) ;; TODO: why need this? @@ -146,6 +147,7 @@ page (db/entity [:block/name new-page-name]) redirect? (= (some-> (state/get-current-page) common-util/page-name-sanity-lc) (common-util/page-name-sanity-lc old-page-name))] + ;; Redirect to the newly renamed page (when redirect? (route-handler/redirect! {:to (if (model/whiteboard-page? page) :whiteboard :page) diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index 20abe1ee67..dab00b65a6 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -270,28 +270,15 @@ (assoc :block/uuid (:block/uuid block))) opts' (assoc opts :outliner-op :save-block) original-block (db/entity (:db/id block)) - original-props (:block/properties original-block) - result (ui-outliner-tx/transact! + original-props (:block/properties original-block)] + (ui-outliner-tx/transact! opts' (outliner-save-block! block') ;; page properties changed (when-let [page-name (and (:block/pre-block? block') (not= original-props (:block/properties block')) (some-> (:block/page block') :db/id (db-utils/pull) :block/name))] - (state/set-page-properties-changed! page-name)))] - - ;; file based graph only - ;; sanitized page name changed - (when-let [title (get-in block' [:block/properties :title])] - (if (string? title) - (when-let [old-page-name (:block/name (db/entity (:db/id (:block/page block'))))] - (when (and (:block/pre-block? block') - (not (string/blank? title)) - (not= (util/page-name-sanity-lc title) old-page-name)) - (state/pub-event! [:page/title-property-changed old-page-name title true]))) - (js/console.error (str "Title is not a string: " title)))) - - result)))) + (state/set-page-properties-changed! page-name))))))) ;; id: block dom id, "ls-block-counter-uuid" (defn- another-block-with-same-id-exists? diff --git a/src/main/frontend/handler/events.cljs b/src/main/frontend/handler/events.cljs index 0f497f04a5..8877159d47 100644 --- a/src/main/frontend/handler/events.cljs +++ b/src/main/frontend/handler/events.cljs @@ -345,16 +345,13 @@ (defmethod handle :modal/set-git-username-and-email [[_ _content]] (state/set-modal! git-component/set-git-username-and-email)) -(defmethod handle :page/title-property-changed [[_ old-title new-title]] - (page-handler/rename! old-title new-title)) - (defmethod handle :page/create [[_ page-name opts]] (if (= page-name (date/today)) (page-handler/create-today-journal!) (page-handler/clj result))] + (case result' + :invalid-empty-name + (notification/show! "Please use a valid name, empty name is not allowed!" :error) + :merge-whiteboard-pages + (notification/show! "Can't merge whiteboard pages" :error) + nil)))) (defn reorder-favorites! [favorites] diff --git a/src/main/frontend/modules/outliner/pipeline.cljs b/src/main/frontend/modules/outliner/pipeline.cljs index 1a1f753117..0dcaebd966 100644 --- a/src/main/frontend/modules/outliner/pipeline.cljs +++ b/src/main/frontend/modules/outliner/pipeline.cljs @@ -90,7 +90,7 @@ :tx-meta (:tx-meta tx-report)}])))) (when (= (:outliner-op tx-meta) :delete-page) - (state/pub-event! [:page/deleted repo (:deleted-page tx-meta) (:file-path tx-meta)])) + (state/pub-event! [:page/deleted repo (:deleted-page tx-meta) (:file-path tx-meta) tx-meta])) (when (= (:outliner-op tx-meta) :rename-page) (state/pub-event! [:page/renamed repo (:data tx-meta)])) diff --git a/src/main/frontend/worker/handler/page.cljs b/src/main/frontend/worker/handler/page.cljs index 47ba512456..e3491f0028 100644 --- a/src/main/frontend/worker/handler/page.cljs +++ b/src/main/frontend/worker/handler/page.cljs @@ -197,7 +197,7 @@ (defn delete! "Deletes a page and then either calls the ok-handler or the error-handler if unable to delete" - [repo conn page-name ok-handler & {:keys [persist-op? error-handler] + [repo conn page-name ok-handler & {:keys [persist-op? rename? error-handler] :or {persist-op? true error-handler (fn [{:keys [msg]}] (js/console.error msg))}}] (when (and repo page-name) @@ -239,6 +239,8 @@ (cond-> {:outliner-op :delete-page :deleted-page page-name :persist-op? persist-op?} + rename? + (assoc :real-outliner-op :rename-page) file-path (assoc :file-path file-path))) diff --git a/src/main/frontend/worker/handler/page/rename.cljs b/src/main/frontend/worker/handler/page/rename.cljs index 2f8dd50210..0105b84600 100644 --- a/src/main/frontend/worker/handler/page/rename.cljs +++ b/src/main/frontend/worker/handler/page/rename.cljs @@ -89,8 +89,10 @@ (distinct) (vec))) +(declare rename-page-aux) + (defn- based-merge-pages! - [repo conn config from-page-name to-page-name persist-op?] + [repo conn config from-page-name to-page-name {:keys [old-name new-name persist-op?]}] (when (and (ldb/page-exists? @conn from-page-name) (ldb/page-exists? @conn to-page-name) (not= from-page-name to-page-name)) @@ -124,12 +126,12 @@ (replace-page-ref from-page to-page) (page-rename/replace-page-ref db config from-page-name to-page-name)) tx-data (concat blocks-tx-data replace-ref-tx-data)] - (ldb/transact! conn tx-data {:persist-op? persist-op?}) - (rename-update-namespace! repo conn config from-page - (common-util/get-page-original-name from-page) - (common-util/get-page-original-name to-page))) - (worker-page/delete! repo conn from-page-name (fn [_])))) + (rename-page-aux repo conn config old-name new-name + :merge? true + :other-tx tx-data)) + + (worker-page/delete! repo conn from-page-name (fn [_]) {:rename? true}))) (defn- compute-new-file-path "Construct the full path given old full path and the file sanitized body. @@ -156,7 +158,7 @@ (defn- rename-page-aux "Only accepts unsanitized page names" - [repo conn config old-name new-name] + [repo conn config old-name new-name & {:keys [merge? other-tx]}] (let [db @conn old-page-name (common-util/page-name-sanity-lc old-name) new-page-name (common-util/page-name-sanity-lc new-name) @@ -164,12 +166,14 @@ page (d/pull @conn '[*] [:block/name old-page-name])] (when (and repo page) (let [old-original-name (:block/original-name page) - page-txs [{:db/id (:db/id page) - :block/uuid (:block/uuid page) - :block/name new-page-name - :block/original-name new-name}] + page-txs (when-not merge? + [{:db/id (:db/id page) + :block/uuid (:block/uuid page) + :block/name new-page-name + :block/original-name new-name}]) {:keys [old-path new-path tx-data]} (update-file-tx db old-page-name new-name) txs (concat page-txs + other-tx (when-not db-based? (->> (concat @@ -265,11 +269,14 @@ (ldb/transact! conn [{:db/id (:db/id page-e) :block/original-name new-name}] - {:persist-op? persist-op?}) + {:persist-op? persist-op? + :outliner-op :rename-page}) (and (not= old-page-name new-page-name) (d/entity @conn [:block/name new-page-name])) ; merge page - (based-merge-pages! repo conn config old-page-name new-page-name persist-op?) + (based-merge-pages! repo conn config old-page-name new-page-name {:old-name old-name + :new-name new-name + :persist-op? persist-op?}) :else ; rename (rename-namespace-pages! repo conn config old-name new-name))