Browse Source

refactor(publishing): move fn in their own place

defclass 5 years ago
parent
commit
95ece00e78

+ 14 - 8
src/main/frontend/components/header.cljs

@@ -84,6 +84,20 @@
             {:title (t :my-publishing)
              :options {:href (rfe/href :my-publishing)}})
 
+          (when-let [project (and current-repo
+                                  (project-handler/get-current-project current-repo projects))]
+            (let [link (str config/website "/" project)]
+              {:title (str (t :go-to) "/" project)
+               :options {:href link
+                         :target "_blank"}
+               :icon svg/external-link}))
+
+          (when (and logged? current-repo)
+            {:title (t :export)
+             :options {:on-click (fn []
+                                   (export/export-repo-as-html! current-repo))}
+             :icon nil})
+
           {:title (t :settings)
            :options {:href (rfe/href :settings)}
            :icon svg/settings-sm}
@@ -149,14 +163,6 @@
        [:div.repos.hidden.md:block
         (repo/repos-dropdown true)]
 
-       (let [projects (state/sub [:me :projects])]
-         (when-let [project (project-handler/get-current-project current-repo projects)]
-           [:a.opacity-70.hover:opacity-100.ml-4
-            {:title (str (t :go-to) "/" project)
-             :href (str config/website "/" project)
-             :target "_blank"}
-            svg/external-link]))
-
        (when (and (nfs/supported?) (empty? repos))
          (ui/tooltip
           "Warning: this is an experimental feature, please only use it for testing purpose."

+ 8 - 57
src/main/frontend/components/publishing.cljs

@@ -11,64 +11,15 @@
             [promesa.core :as p]
             [frontend.handler.page :as page-handler]
             [frontend.handler.notification :as notification]
-            [clojure.string :as string]
             [frontend.ui :as ui]
             [frontend.components.svg :as svg]
             [frontend.handler.project :as project-handler]))
 
-(defn get-published-pages
-  []
-  (when-let [repo (state/get-current-repo)]
-    (when (db/get-conn repo)
-      (->> (db/q repo [:page/published] {:use-cache? false}
-             '[:find (pull ?page [*])
-               :in $
-               :where
-               [?page :page/properties ?properties]
-               [(get ?properties :published) ?publish]
-               [(= "true" ?publish)]])
-        db/react))))
-
-(defn delete-page-from-logseq
-  [project permalink]
-  (let [url (util/format "%s%s/%s" config/api project permalink)]
-    (js/Promise.
-      (fn [resolve reject]
-        (util/delete url
-          (fn [result]
-            (resolve result))
-          (fn [error]
-            (log/error :page/http-delete-failed error)
-            (reject error)))))))
-
 (defn update-state-and-notify
   [page-name]
   (page-handler/page-add-properties! page-name {:published false})
   (notification/show! (util/format "Remove Page \"%s\" from Logseq server success" page-name) :success))
 
-(defn update-project
-  [project-name data]
-  (let [url (util/format "%sprojects/%s" config/api project-name)]
-    (js/Promise.
-      (fn [resolve reject]
-        (util/post url data
-          (fn [result]
-            (resolve result))
-          (fn [error]
-            (log/error :project/http-update-failed error)
-            (reject error)))))))
-
-(defn delete-project
-  [project-name]
-  (let [url (util/format "%sprojects/%s" config/api project-name)]
-    (js/Promise.
-      (fn [resolve reject]
-        (util/delete url
-          (fn [result]
-            (resolve result))
-          (fn [error]
-            (log/error :project/http-delete-failed error)
-            (reject error)))))))
 
 (defn project
   [editor-state current-project pages]
@@ -94,14 +45,14 @@
                       (let [editor (.getElementById js/document "cp__publishing-project-input")
                             v (.-value editor)
                             data {:name v}]
-                        (-> (p/let [result (update-project current-project data)]
+                        (-> (p/let [result (project-handler/update-project current-project data)]
                               (when (:result result)
                                 (state/update-current-project :name v)
                                 (notification/show! "Updated project name successfully." :success)
                                 (reset! editor-state :display)))
                             (p/catch
                               (fn [error]
-                                (notification/show! "Failed to updated project name." :failed))))))
+                                (notification/show! "Failed to update project name." :failed))))))
           :background "green")]
 
        [:div.cp__publishing-pj-bt
@@ -111,10 +62,10 @@
                       (util/stop e)
                       (let [confirm-message
                             (util/format
-                              "This operation will also delete all publishing under project \"%s\", continue?"
+                              "This operation will delete all the published pages under the project \"%s\", are you sure?"
                               current-project)]
                         (when (.confirm js/window confirm-message)
-                          (p/let [result (delete-project current-project)]
+                          (p/let [result (project-handler/delete-project current-project)]
                             (when (:result result)
                               (reset! editor-state :display)
                               (doseq [page pages]
@@ -122,7 +73,7 @@
                                       page-name (:page/name page)]
                                   (page-handler/page-add-properties! page-name {:published false})))
                               (state/remove-current-project)
-                              (notification/show! "Delete project successful." :success))))))
+                              (notification/show! "The project was deleted successfully." :success))))))
           :background "pink")]
 
        [:div.cp__publishing-pj-bt
@@ -138,7 +89,7 @@
   [state]
   (let [current-repo (state/sub :git/current-repo)
         projects (state/sub [:me :projects])
-        pages (get-published-pages)
+        pages (db/get-published-pages)
         editor-state (get state ::project-state)
         current-project (project-handler/get-current-project current-repo projects)]
     (rum/with-context [[t] i18n/*tongue-context*]
@@ -173,7 +124,7 @@
                             [:a {:on-click
                                  (fn [e]
                                    (util/stop e)
-                                   (-> (p/let [_ (delete-page-from-logseq current-project permalink)]
+                                   (-> (p/let [_ (page-handler/delete-page-from-logseq current-project permalink)]
                                          (update-state-and-notify page-name))
                                        (p/catch
                                          (fn [error]
@@ -181,7 +132,7 @@
                                                  not-found-on-server 404]
                                              (if (= not-found-on-server status)
                                                (update-state-and-notify page-name)
-                                               (let [message (util/format "Remove Page \"%s\" from Logseq server failed."
+                                               (let [message (util/format "Failed to remove the page \"%s\" from Logseq"
                                                                page-name)]
                                                  (notification/show! message :failed))))))))}
                              (t :publishing/delete)]]]]))]]])])))

+ 2 - 3
src/main/frontend/db.cljs

@@ -790,15 +790,14 @@
   []
   (when-let [repo (state/get-current-repo)]
     (when (get-conn repo)
-      (->> (q repo [:page/published] {}
+      (->> (q repo [:page/published] {:use-cache? false}
              '[:find (pull ?page [*])
                :in $
                :where
                [?page :page/properties ?properties]
                [(get ?properties :published) ?publish]
                [(= "true" ?publish)]])
-        react
-        first))))
+        react))))
 
 (defn get-files
   [repo]

+ 13 - 1
src/main/frontend/handler/page.cljs

@@ -21,7 +21,7 @@
             [frontend.git :as git]
             [frontend.fs :as fs]
             [promesa.core :as p]
-            [goog.object :as gobj]
+            [lambdaisland.glogi :as log]
             [frontend.format.mldoc :as mldoc]))
 
 (defn- get-directory
@@ -423,3 +423,15 @@
 (defn init-commands!
   []
   (commands/init-commands! get-page-ref-text))
+
+(defn delete-page-from-logseq
+  [project permalink]
+  (let [url (util/format "%s%s/%s" config/api project permalink)]
+    (js/Promise.
+      (fn [resolve reject]
+        (util/delete url
+          (fn [result]
+            (resolve result))
+          (fn [error]
+            (log/error :page/http-delete-failed error)
+            (reject error)))))))

+ 26 - 1
src/main/frontend/handler/project.cljs

@@ -3,7 +3,8 @@
             [frontend.util :as util :refer-macros [profile]]
             [clojure.string :as string]
             [frontend.config :as config]
-            [frontend.handler.notification :as notification]))
+            [frontend.handler.notification :as notification]
+            [lambdaisland.glogi :as log]))
 
 (defn get-current-project
   [current-repo projects]
@@ -83,3 +84,27 @@
                     (not (string/blank? (:name settings)))
                     (>= (count (string/trim (:name settings))) 2))
            (add-project! (:name settings))))))))
+
+(defn update-project
+  [project-name data]
+  (let [url (util/format "%sprojects/%s" config/api project-name)]
+    (js/Promise.
+      (fn [resolve reject]
+        (util/post url data
+          (fn [result]
+            (resolve result))
+          (fn [error]
+            (log/error :project/http-update-failed error)
+            (reject error)))))))
+
+(defn delete-project
+  [project-name]
+  (let [url (util/format "%sprojects/%s" config/api project-name)]
+    (js/Promise.
+      (fn [resolve reject]
+        (util/delete url
+          (fn [result]
+            (resolve result))
+          (fn [error]
+            (log/error :project/http-delete-failed error)
+            (reject error)))))))