瀏覽代碼

fix: wrong page exists alert when renaming a page

Tienson Qin 3 年之前
父節點
當前提交
3e6eea5c19
共有 2 個文件被更改,包括 33 次插入33 次删除
  1. 18 21
      src/main/frontend/components/page.cljs
  2. 15 12
      src/main/frontend/handler/page.cljs

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

@@ -186,11 +186,11 @@
 
 (rum/defcs page-title <
   (rum/local false ::edit?)
-  (rum/local "" ::title-value)
+  {:init (fn [state]
+           (assoc state ::title-value (atom (nth (:rum/args state) 2))))}
   [state page-name icon title format fmt-journal?]
   (when title
     (let [*title-value (get state ::title-value)
-          *input-ref (rum/create-ref)
           *edit? (get state ::edit?)
           repo (state/get-current-repo)
           title-element (if (and (string/includes? title "[[")
@@ -209,24 +209,30 @@
                   (pdf-assets/human-hls-filename-display title)
                   (if fmt-journal? (date/journal-title->custom-format title) title))
           old-name (or title page-name)
-          new-page-exist? (when @*title-value
-                            (db/entity [:block/name @*title-value]))
           confirm-fn (ui/make-confirm-modal
                       {:title         "Do you really want to change the page name?"
                        :on-confirm    (fn [_e {:keys [close-fn]}]
                                         (close-fn)
                                         (page-handler/rename! (or title page-name) @*title-value)
-                                        (reset! *edit? false)
-                                        (reset! *title-value ""))
+                                        (reset! *edit? false))
                        :on-cancel     (fn []
-                                        (set! (.-value (rum/deref *input-ref)) old-name)
-                                        (reset! *edit? true)
-                                        (reset! *title-value ""))})]
+                                        (reset! *title-value old-name)
+                                        (reset! *edit? true))})
+          blur-fn (fn [e]
+                    (cond
+                      (= old-name @*title-value)
+                      nil
+
+                      (page-handler/page-exists? @*title-value)
+                      (notification/show! "Page already exists!" :error)
+
+                      :else
+                      (state/set-modal! confirm-fn))
+                    (util/stop e))]
       (if @*edit?
         [:h1.title {:style {:margin-left -2}}
          [:input.w-full
           {:type          "text"
-           :ref           *input-ref
            :auto-focus    true
            :style         {:outline "none"
                            :font-weight 600}
@@ -236,19 +242,10 @@
                             (let [value (util/evalue e)]
                               (when-not (string/blank? value)
                                 (reset! *title-value (string/trim value)))))
-           :on-blur       (fn [e]
-                            (if-not new-page-exist?
-                              (when (not= old-name @*title-value)
-                                (state/set-modal! confirm-fn))
-                             (notification/show! "Page already exists!" :error))
-                            (util/stop e))
+           :on-blur       blur-fn
            :on-key-down   (fn [e]
                             (when (= (gobj/get e "key") "Enter")
-                              (if-not new-page-exist?
-                                (when (not= old-name @*title-value)
-                                  (state/set-modal! confirm-fn))
-                                (notification/show! "Page already exists!" :error))
-                              (util/stop e)))}]]
+                              (blur-fn e)))}]]
         [:a.page-title {:on-mouse-down (fn [e]
                                          (when (util/right-click? e)
                                            (state/set-state! :page-title/context {:page page-name})))

+ 15 - 12
src/main/frontend/handler/page.cljs

@@ -428,25 +428,28 @@
         namespace     (or (string/includes? old-name "/")
                           (db/get-namespace-pages repo old-name))
         name-changed? (not= old-name new-name)]
+    (prn {:old-name old-name
+          :new-name new-name})
+    (js/console.trace)
     (if (and old-name
              new-name
              (not (string/blank? new-name))
              name-changed?)
-      (do (cond
-            (= (string/lower-case old-name) (string/lower-case new-name))
-            (rename-page-aux old-name new-name)
+      (do
+        (cond
+          (= (string/lower-case old-name) (string/lower-case new-name))
+          (rename-page-aux old-name new-name)
 
-            (db/pull [:block/name (string/lower-case new-name)])
-            (notification/show! "Page already exists!" :error)
+          (db/pull [:block/name (string/lower-case new-name)])
+          (notification/show! "Page already exists!" :error)
 
-            namespace
-            (rename-namespace-pages! repo old-name new-name)
+          namespace
+          (rename-namespace-pages! repo old-name new-name)
 
-            :else
-            (rename-page-aux old-name new-name))
-          (rename-nested-pages old-name new-name))
-      (cond
-        (string/blank? new-name)
+          :else
+          (rename-page-aux old-name new-name))
+        (rename-nested-pages old-name new-name))
+      (when (string/blank? new-name)
         (notification/show! "Please use a valid name, empty name is not allowed!" :error)))))
 
 (defn- split-col-by-element