Selaa lähdekoodia

fix: page deletion error messages not being displayed

and instead pretending to be successful. Also add error message for
built-in page. Related to LOG-3049
Gabriel Horner 1 vuosi sitten
vanhempi
sitoutus
f4ff4da0c8

+ 1 - 2
src/main/frontend/components/page.cljs

@@ -1051,8 +1051,7 @@
                      (p/let [_ (p/all (map (fn [page-name]
                                              (page-handler/<delete! page-name nil
                                                                     {:error-handler
-                                                                     (fn [msg]
-                                                                       (js/console.error msg)
+                                                                     (fn []
                                                                        (swap! failed-pages conj page-name))})) (map :block/name pages)))]
                        (if (seq @failed-pages)
                          (notification/show! (t :all-pages/failed-to-delete-pages (string/join ", " (map pr-str @failed-pages)))

+ 4 - 1
src/main/frontend/db_worker.cljs

@@ -476,7 +476,10 @@
   (page-delete
    [this repo page-name]
    (when-let [conn (worker-state/get-datascript-conn repo)]
-     (let [result (worker-page/delete! repo conn page-name nil {})]
+     (let [error-handler (fn [{:keys [msg]}]
+                           (worker-util/post-message :notification
+                                                     [[:div [:p msg]] :error]))
+           result (worker-page/delete! repo conn page-name {:error-handler error-handler})]
        (bean/->js {:result result}))))
 
   (apply-outliner-ops

+ 10 - 4
src/main/frontend/handler/common/page.cljs

@@ -14,6 +14,7 @@
             [frontend.handler.ui :as ui-handler]
             [frontend.config :as config]
             [frontend.fs :as fs]
+            [goog.object :as gobj]
             [promesa.core :as p]
             [frontend.handler.block :as block-handler]
             [frontend.handler.file-based.recent :as file-recent-handler]
@@ -151,15 +152,20 @@
 
 
 (defn <delete!
-  "Deletes a page and then either calls the ok-handler or the error-handler if unable to delete"
+  "Deletes a page. If delete is succcessful calls ok-handler. Otherwise calls error-handler
+   if given. Note that error-handler is being called in addition to error messages that worker
+   already provides"
   [page-name ok-handler & {:keys [error-handler]}]
   (when page-name
     (when-let [^Object worker @state/*db-worker]
       (-> (p/let [repo (state/get-current-repo)
-                  _ (.page-delete worker repo page-name)]
-            (when ok-handler (ok-handler)))
+                  res (.page-delete worker repo page-name)
+                  res' (gobj/get res "result")]
+            (if res'
+              (when ok-handler (ok-handler))
+              (when error-handler (error-handler))))
           (p/catch (fn [error]
-                     (when error-handler (error-handler error))))))))
+                     (js/console.error error)))))))
 
 ;; other fns
 ;; =========

+ 11 - 9
src/main/frontend/worker/handler/page.cljs

@@ -197,10 +197,11 @@
       {:msg (str "An unexpected failure while deleting: " e)})))
 
 (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? rename? error-handler]
-                                     :or {persist-op? true
-                                          error-handler (fn [{:keys [msg]}] (js/console.error msg))}}]
+  "Deletes a page. Returns true if able to delete page. If unable to delete,
+  calls error-handler fn and returns false"
+  [repo conn page-name & {:keys [persist-op? rename? error-handler]
+                          :or {persist-op? true
+                               error-handler (fn [{:keys [msg]}] (js/console.error msg))}}]
   (when (and repo page-name)
     (let [page-name (common-util/page-name-sanity-lc page-name)
           page (d/entity @conn [:block/name page-name])
@@ -210,12 +211,16 @@
                                      [:db.fn/retractEntity [:block/uuid (:block/uuid block)]])
                                    blocks)
           db-based? (sqlite-util/db-based-graph? repo)]
-      (when-not (ldb/built-in? page)
+      (if (ldb/built-in? page)
+        (do
+          (error-handler {:msg "Built-in page cannot be deleted"})
+          false)
         (if-let [msg (and db-based? (page-unable-to-delete conn page))]
           (do
             (ldb/transact! conn truncate-blocks-tx-data
                            {:outliner-op :truncate-page-blocks :persist-op? persist-op?})
-            (error-handler msg))
+            (error-handler msg)
+            false)
           (let [file (ldb/get-page-file @conn page-name)
                 file-path (:file/path file)
                 delete-file-tx (when file
@@ -245,7 +250,4 @@
                              (assoc :real-outliner-op :rename-page)
                              file-path
                              (assoc :file-path file-path)))
-
-            (when (fn? ok-handler) (ok-handler))
-
             true))))))

+ 1 - 1
src/main/frontend/worker/handler/page/rename.cljs

@@ -131,7 +131,7 @@
                        :merge? true
                        :other-tx tx-data))
 
-    (worker-page/delete! repo conn from-page-name (fn [_]) {:rename? true})))
+    (worker-page/delete! repo conn from-page-name {:rename? true})))
 
 (defn- compute-new-file-path
   "Construct the full path given old full path and the file sanitized body.

+ 1 - 1
src/main/frontend/worker/rtc/core.cljs

@@ -438,7 +438,7 @@
   [repo conn remove-page-ops]
   (doseq [op remove-page-ops]
     (when-let [page-name (:block/name (d/entity @conn [:block/uuid (:block-uuid op)]))]
-      (worker-page/delete! repo conn page-name nil {:persist-op? false}))))
+      (worker-page/delete! repo conn page-name {:persist-op? false}))))
 
 (defn filter-remote-data-by-local-unpushed-ops
   "when remote-data request client to move/update/remove/... blocks,