Browse Source

enhance(rtc): add delete-graph to debug-ui

rcmerci 1 year ago
parent
commit
84efd9f3e9

+ 42 - 12
src/main/frontend/db/rtc/debug_ui.cljs

@@ -10,7 +10,8 @@
             [frontend.ui :as ui]
             [frontend.util :as util]
             [promesa.core :as p]
-            [rum.core :as rum]))
+            [rum.core :as rum]
+            [logseq.shui.ui :as shui]))
 
 (defonce debug-state (atom nil))
 
@@ -49,7 +50,11 @@
                                    ^object worker @db-browser/*worker]
                                (p/let [result (.rtc-get-graphs worker repo token)
                                        graph-list (bean/->clj result)]
-                                 (swap! debug-state assoc :remote-graphs (map :graph-uuid graph-list))))))]
+                                 (swap! debug-state assoc
+                                        :remote-graphs
+                                        (map
+                                         #(select-keys % [:graph-uuid :graph-status])
+                                         graph-list))))))]
 
      [:pre.select-text
       (-> {:user-uuid (user/user-uuid)
@@ -120,15 +125,19 @@
                                         ^object worker @db-browser/*worker]
                                     (.rtc-download-graph worker repo token graph-uuid)))))})
       [:div.flex.flex-col
-       [:select
-        {:on-change (fn [e]
-                      (let [value (util/evalue e)]
-                        (swap! debug-state assoc :graph-uuid-to-download value)))}
-        (if (seq (:remote-graphs state))
-          (cons [:option {:key "select a remote graph" :value nil} "select a remote graph"]
-                (for [graph-uuid (:remote-graphs state)]
-                  [:option {:key graph-uuid :value graph-uuid} (str (subs graph-uuid 0 14) "...")]))
-          (list [:option {:key "refresh-first" :value nil} "refresh remote-graphs first"]))]
+       (shui/select
+        {:on-value-change (fn [v]
+                            (some->> (parse-uuid v)
+                                     str
+                                     (swap! debug-state assoc :graph-uuid-to-download)))}
+        (shui/select-trigger
+         {:class "!px-2 !py-0 !h-8"}
+         (shui/select-value
+          {:placeholder "Select a graph-uuid"}))
+        (shui/select-content
+         (shui/select-group
+          (for [{:keys [graph-uuid graph-status]} (:remote-graphs state)]
+            (shui/select-item {:value graph-uuid :disabled (some? graph-status)} graph-uuid)))))
        [:input.form-input.my-2
         {:on-change (fn [e] (swap! debug-state assoc :download-graph-to-repo (util/evalue e)))
          :on-focus (fn [e] (let [v (.-value (.-target e))]
@@ -141,4 +150,25 @@
                               (let [repo (state/get-current-repo)
                                     token (state/get-auth-id-token)
                                     ^js worker @db-browser/*worker]
-                                (.rtc-upload-graph worker repo token)))})]]))
+                                (.rtc-upload-graph worker repo token)))})]
+     [:div
+      (ui/button (str "delete graph")
+                 {:on-click (fn []
+                              (when-let [graph-uuid (:graph-uuid-to-delete state)]
+                                (let [token (state/get-auth-id-token)
+                                      ^object worker @db-browser/*worker]
+                                  (prn ::delete-graph graph-uuid)
+                                  (.rtc-delete-graph worker token graph-uuid))))})
+      (shui/select
+       {:on-value-change (fn [v]
+                           (some->> (parse-uuid v)
+                                    str
+                                    (swap! debug-state assoc :graph-uuid-to-delete)))}
+       (shui/select-trigger
+        {:class "!px-2 !py-0 !h-8"}
+        (shui/select-value
+         {:placeholder "Select a graph-uuid"}))
+       (shui/select-content
+        (shui/select-group
+         (for [{:keys [graph-uuid graph-status]} (:remote-graphs state)]
+           (shui/select-item {:value graph-uuid :disabled (some? graph-status)} graph-uuid)))))]]))

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

@@ -616,6 +616,10 @@
    [_this repo token]
    (rtc-core/<get-graphs repo token))
 
+  (rtc-delete-graph
+   [_this token graph-uuid]
+   (rtc-core/<delete-graph token graph-uuid))
+
   (rtc-get-block-content-versions
    [_this block-id]
    (rtc-core/<get-block-content-versions @rtc-core/*state block-id))

+ 5 - 0
src/main/frontend/worker/rtc/const.cljs

@@ -171,6 +171,11 @@
       [:graph-uuid :uuid]
       [:target-user-uuids {:optional true} [:sequential :uuid]]
       [:target-user-emails {:optional true} [:sequential :string]]]]
+    ["delete-graph"
+     [:map
+      [:req-id :string]
+      [:action :string]
+      [:graph-uuid :uuid]]]
     ["query-block-content-versions"
      [:map
       [:req-id :string]

+ 25 - 7
src/main/frontend/worker/rtc/core.cljs

@@ -917,7 +917,7 @@
       (<! (ws/<ensure-ws-open! state))
       (reset! (:*graph-uuid state) graph-uuid)
       (with-sub-data-from-ws state
-        (<! (ws/<send! state {:action "register-graph-updates" :req-id (get-req-id) :graph-uuid graph-uuid}))
+        (<? (ws/<send! state {:action "register-graph-updates" :req-id (get-req-id) :graph-uuid graph-uuid}))
         (<! (get-result-ch)))
 
       (async/sub data-from-ws-pub "push-updates" push-data-from-ws-ch)
@@ -962,7 +962,7 @@
   [state graph-uuid & {:keys [target-user-uuids target-user-emails]}]
   (go
     (let [r (with-sub-data-from-ws state
-              (<! (ws/<send! state (cond-> {:req-id (get-req-id)
+              (<? (ws/<send! state (cond-> {:req-id (get-req-id)
                                             :action "grant-access"
                                             :graph-uuid graph-uuid}
                                      target-user-uuids (assoc :target-user-uuids target-user-uuids)
@@ -985,7 +985,7 @@
     (go
       (when (some-> state :*graph-uuid deref)
         (with-sub-data-from-ws state
-          (<! (ws/<send! state {:req-id (get-req-id)
+          (<? (ws/<send! state {:req-id (get-req-id)
                                 :action "query-block-content-versions"
                                 :block-uuids [block-uuid]
                                 :graph-uuid @(:*graph-uuid state)}))
@@ -1104,17 +1104,35 @@
     (go
       (let [state (or @*state (<! (<init-state repo token true)))
             graph-list (with-sub-data-from-ws state
-                         (<! (ws/<send! state {:req-id (get-req-id)
+                         (<? (ws/<send! state {:req-id (get-req-id)
                                                :action "list-graphs"}))
                          (:graphs (<! (get-result-ch))))]
         (p/resolve! d (bean/->js graph-list))))
     d))
 
+
+(defn <delete-graph
+  [token graph-uuid]
+  (let [d (p/deferred)]
+    (go
+      (let [state (or @*state (<! (<init-state nil token true)))
+            r (with-sub-data-from-ws state
+                (<? (ws/<send! state {:req-id (get-req-id)
+                                      :action "delete-graph"
+                                      :graph-uuid graph-uuid}))
+                (<! (get-result-ch)))
+            {:keys [ex-message]} r]
+        (if ex-message
+          (do (prn ::delete-graph-failed graph-uuid)
+              (p/resolve! d false))
+          (p/resolve! d true))))
+    d))
+
 (add-watch *state :notify-main-thread
            (fn [_ _ old new]
-             (when-let [*repo (:*repo new)]
-               (let [new-state (get-debug-state @*repo new)
-                     old-state (get-debug-state @*repo old)]
+             (when-let [repo @(:*repo new)]
+               (let [new-state (get-debug-state repo new)
+                     old-state (get-debug-state repo old)]
                  (when (or (not= new-state old-state)
                            (= :open (:rtc-state new-state)))
                    (worker-util/post-message :rtc-sync-state new-state))))))

+ 8 - 8
src/main/frontend/worker/rtc/full_upload_download_graph.cljs

@@ -10,10 +10,10 @@
             [frontend.worker.async-util :include-macros true :refer [<? go-try]]
             [frontend.worker.rtc.op-mem-layer :as op-mem-layer]
             [frontend.worker.rtc.ws :refer [<send!]]
-            [logseq.db.frontend.schema :as db-schema]
             [frontend.worker.state :as worker-state]
-            [promesa.core :as p]
-            [frontend.worker.util :as worker-util]))
+            [frontend.worker.util :as worker-util]
+            [logseq.db.frontend.schema :as db-schema]
+            [promesa.core :as p]))
 
 (def transit-r (transit/reader :json))
 
@@ -41,13 +41,13 @@
   (go
     (let [{:keys [url key all-blocks-str]}
           (with-sub-data-from-ws state
-            (<! (<send! state {:req-id (get-req-id) :action "presign-put-temp-s3-obj"}))
+            (<? (<send! state {:req-id (get-req-id) :action "presign-put-temp-s3-obj"}))
             (let [all-blocks (export-as-blocks @conn)
                   all-blocks-str (transit/write (transit/writer :json) all-blocks)]
               (merge (<! (get-result-ch)) {:all-blocks-str all-blocks-str})))]
       (<! (http/put url {:body all-blocks-str}))
       (with-sub-data-from-ws state
-        (<! (<send! state {:req-id (get-req-id) :action "full-upload-graph" :s3-key key}))
+        (<? (<send! state {:req-id (get-req-id) :action "full-upload-graph" :s3-key key}))
         (let [r (<! (get-result-ch))]
           (if-not (:graph-uuid r)
             (ex-info "upload graph failed" r)
@@ -65,7 +65,6 @@
    :block-type/hidden       "hidden"
    :block-type/closed-value "closed value"})
 
-
 (defn- replace-db-id-with-temp-id
   [blocks]
   (mapv
@@ -121,7 +120,6 @@
                 b)))
           blocks)))
 
-
 (defn- <transact-remote-all-blocks-to-sqlite
   [all-blocks repo]
   (go-try
@@ -144,7 +142,9 @@
   (go-try
    (let [{:keys [url]}
          (with-sub-data-from-ws state
-           (<send! state {:req-id (get-req-id) :action "full-download-graph" :graph-uuid graph-uuid})
+           (<? (<send! state {:req-id (get-req-id)
+                              :action "full-download-graph"
+                              :graph-uuid graph-uuid}))
            (<! (get-result-ch)))
          {:keys [status body] :as r} (<! (http/get url))
          repo (str "logseq_db_rtc-" repo)]