diff --git a/src/main/frontend/worker/handler/page/rename.cljs b/src/main/frontend/worker/handler/page/rename.cljs index 51faab6a8..bc49955d4 100644 --- a/src/main/frontend/worker/handler/page/rename.cljs +++ b/src/main/frontend/worker/handler/page/rename.cljs @@ -99,7 +99,6 @@ tx-data) (remove nil?))))] - (ldb/transact! conn txs {:outliner-op :rename-page :data (cond-> {:page-id (:db/id page) @@ -118,29 +117,30 @@ (defn rename! [repo conn config page-uuid new-name & {:keys [persist-op?] :or {persist-op? true}}] - (let [db @conn - page-e (d/entity db [:block/uuid page-uuid]) - old-name (:block/original-name page-e) - new-name (string/trim new-name) - old-page-name (common-util/page-name-sanity-lc old-name) - new-page-name (common-util/page-name-sanity-lc new-name) - new-page-exists? (some? (ldb/get-page db new-name)) - name-changed? (not= old-name new-name)] - (cond - (string/blank? new-name) - :invalid-empty-name + (let [db @conn] + (when-let [page-e (d/entity db [:block/uuid page-uuid])] + (let [old-name (:block/original-name page-e) + new-name (string/trim new-name) + old-page-name (common-util/page-name-sanity-lc old-name) + new-page-name (common-util/page-name-sanity-lc new-name) + new-page-exists? (when-let [p (ldb/get-page db new-name)] + (not= (:db/id p) (:db/id page-e))) + name-changed? (not= old-name new-name)] + (cond + (string/blank? new-name) + :invalid-empty-name - new-page-exists? - :rename-page-exists + new-page-exists? + :rename-page-exists - (ldb/built-in? page-e) - :built-in-page + (ldb/built-in? page-e) + :built-in-page - (and old-name new-name name-changed?) - (if (= old-page-name new-page-name) ; case changed - (ldb/transact! conn - [{:db/id (:db/id page-e) - :block/original-name new-name}] - {:persist-op? persist-op? - :outliner-op :rename-page}) - (rename-page! repo conn config page-e new-name))))) + (and old-name new-name name-changed?) + (if (= old-page-name new-page-name) ; case changed + (ldb/transact! conn + [{:db/id (:db/id page-e) + :block/original-name new-name}] + {:persist-op? persist-op? + :outliner-op :rename-page}) + (rename-page! repo conn config page-e new-name))))))) diff --git a/src/test/frontend/worker/handler/page/rename_test.cljs b/src/test/frontend/worker/handler/page/rename_test.cljs index 87064fbff..73ce48dc1 100644 --- a/src/test/frontend/worker/handler/page/rename_test.cljs +++ b/src/test/frontend/worker/handler/page/rename_test.cljs @@ -21,24 +21,18 @@ (use-fixtures :each start-and-destroy-db) -(defn- page-rename [old-name new-name] - (worker-page-rename/rename! repo (db/get-db repo false) {} old-name new-name)) +(defn- page-rename [page-uuid new-name] + (worker-page-rename/rename! repo (db/get-db repo false) {} page-uuid new-name)) (deftest rename-test (testing "Case change" (let [page (db/get-page "test")] - (page-rename "test" "Test") - (let [entity (db/get-page "test")] - (is (= "Test" (:block/original-name entity))) - ;; db id not changed - (is (= (:db/id page) (:db/id entity)))))) + (page-rename (:block/uuid page) "Test") + (is (= "Test" (:block/original-name (db/entity (:db/id page))))))) (testing "Name changed" - (let [page (db/get-page "test")] - (page-rename "Test" "New name") - (let [entity (db/get-page "new name")] - (is (= "New name" (:block/original-name entity))) - (is (= (:db/id page) (:db/id entity)))))) + (let [page (db/get-page "Test")] + (is (= "New name" (:block/original-name (db/entity (:db/id page))))))) ;; (testing "Merge existing page" ;; (page-handler/create! "Existing page" {:redirect? false :create-first-block? true})