Просмотр исходного кода

chore: remove old history implementation

Tienson Qin 1 год назад
Родитель
Сommit
37d6196000

+ 52 - 49
src/main/frontend/components/right_sidebar.cljs

@@ -19,7 +19,6 @@
             [logseq.shui.ui :as shui]
             [frontend.util :as util]
             [frontend.config :as config]
-            [frontend.modules.editor.undo-redo :as undo-redo]
             [medley.core :as medley]
             [reitit.frontend.easy :as rfe]
             [rum.core :as rum]
@@ -69,49 +68,52 @@
                          :sidebar-key sidebar-key} repo block-id {:indent? false})]
      (block-cp repo idx block)]))
 
-(rum/defc history-action-info
-  [[k v]]
-  (when v [:.ml-4 (ui/foldable
-                   [:div (str k)]
-                   [:.ml-4 (case k
-                             :tx-id
-                             [:.my-1 [:pre.code.pre-wrap-white-space.bg-base-4 (str v)]]
-
-                             :blocks
-                             (map (fn [block]
-                                    [:.my-1 [:pre.code.pre-wrap-white-space.bg-base-4 (str block)]]) v)
-
-                             :txs
-                             (map (fn [[_ key val]]
-                                    (when val
-                                      [:pre.code.pre-wrap-white-space.bg-base-4
-                                       [:span.font-bold (str key) " "] (str val)])) v)
-
-                             (map (fn [[key val]]
-                                    (when val
-                                      [:pre.code.pre-wrap-white-space.bg-base-4
-                                       [:span.font-bold (str key) " "] (str val)])) v))]
-                   {:default-collapsed? true})]))
-
-(rum/defc history-stack
-  [label stack]
-  [:.ml-4 (ui/foldable
-           [:div label " (" (count stack) ")"]
-           (map-indexed (fn [index item]
-                          [:.ml-4 (ui/foldable [:div (str index " " (-> item :tx-meta :outliner-op))]
-                                               (map history-action-info item)
-                                               {:default-collapsed? true})]) stack)
-           {:default-collapsed? true})])
+(comment
+  (rum/defc history-action-info
+   [[k v]]
+   (when v [:.ml-4 (ui/foldable
+                    [:div (str k)]
+                    [:.ml-4 (case k
+                              :tx-id
+                              [:.my-1 [:pre.code.pre-wrap-white-space.bg-base-4 (str v)]]
+
+                              :blocks
+                              (map (fn [block]
+                                     [:.my-1 [:pre.code.pre-wrap-white-space.bg-base-4 (str block)]]) v)
+
+                              :txs
+                              (map (fn [[_ key val]]
+                                     (when val
+                                       [:pre.code.pre-wrap-white-space.bg-base-4
+                                        [:span.font-bold (str key) " "] (str val)])) v)
+
+                              (map (fn [[key val]]
+                                     (when val
+                                       [:pre.code.pre-wrap-white-space.bg-base-4
+                                        [:span.font-bold (str key) " "] (str val)])) v))]
+                    {:default-collapsed? true})])))
+
+(comment
+  (rum/defc history-stack
+   [label stack]
+   [:.ml-4 (ui/foldable
+            [:div label " (" (count stack) ")"]
+            (map-indexed (fn [index item]
+                           [:.ml-4 (ui/foldable [:div (str index " " (-> item :tx-meta :outliner-op))]
+                                                (map history-action-info item)
+                                                {:default-collapsed? true})]) stack)
+            {:default-collapsed? true})]))
 
 (rum/defc history < rum/reactive
   []
-  (let [state (undo-redo/get-state)
-        page-only-mode? (state/sub :history/page-only-mode?)]
-    [:div.ml-4
-     [:div.ml-3.font-bold (if page-only-mode? (t :right-side-bar/history-pageonly) (t :right-side-bar/history-global))]
-     [:div.p-4 [:.ml-4.mb-2
-                (history-stack (t :right-side-bar/history-undos) (rum/react (:undo-stack state)))
-                (history-stack (t :right-side-bar/history-redos) (rum/react (:redo-stack state)))]]]))
+  ;; (let [state (undo-redo/get-state)
+  ;;       page-only-mode? (state/sub :history/page-only-mode?)]
+  ;;   [:div.ml-4
+  ;;    [:div.ml-3.font-bold (if page-only-mode? (t :right-side-bar/history-pageonly) (t :right-side-bar/history-global))]
+  ;;    [:div.p-4 [:.ml-4.mb-2
+  ;;               (history-stack (t :right-side-bar/history-undos) (rum/react (:undo-stack state)))
+  ;;               (history-stack (t :right-side-bar/history-redos) (rum/react (:redo-stack state)))]]])
+  )
 
 (defn build-sidebar-item
   [repo idx db-id block-type *db-id init-key]
@@ -127,9 +129,9 @@
     [[:.flex.items-center (ui/icon "hierarchy" {:class "text-md mr-2"}) (t :right-side-bar/page-graph)]
      (page/page-graph)]
 
-    :history
-    [[:.flex.items-center (ui/icon "history" {:class "text-md mr-2"}) (t :right-side-bar/history)]
-     (history)]
+    ;; :history
+    ;; [[:.flex.items-center (ui/icon "history" {:class "text-md mr-2"}) (t :right-side-bar/history)]
+    ;;  (history)]
 
     :block-ref
     #_:clj-kondo/ignore
@@ -460,11 +462,12 @@
                                                                        (state/sidebar-add-block! repo "rtc" :rtc))}
             "(Dev) RTC"]])
 
-        (when (and config/dev? (state/sub [:ui/developer-mode?]))
-          [:div.text-sm
-           [:button.button.cp__right-sidebar-settings-btn {:on-click (fn [_e]
-                                                                       (state/sidebar-add-block! repo "history" :history))}
-            (t :right-side-bar/history)]])]]
+        ;; (when (and config/dev? (state/sub [:ui/developer-mode?]))
+        ;;   [:div.text-sm
+        ;;    [:button.button.cp__right-sidebar-settings-btn {:on-click (fn [_e]
+        ;;                                                                (state/sidebar-add-block! repo "history" :history))}
+        ;;     (t :right-side-bar/history)]])
+        ]]
 
       [:.sidebar-item-list.flex-1.scrollbar-spacing.px-2
        (if @*anim-finished?

+ 13 - 22
src/main/frontend/handler/history.cljs

@@ -1,10 +1,8 @@
 (ns ^:no-doc frontend.handler.history
-  (:require [frontend.config :as config]
-            [frontend.db :as db]
+  (:require [frontend.db :as db]
             [frontend.db.transact :as db-transact]
             [frontend.handler.editor :as editor]
             [frontend.handler.route :as route-handler]
-            [frontend.modules.editor.undo-redo :as undo-redo]
             [frontend.state :as state]
             [frontend.util :as util]
             [goog.dom :as gdom]
@@ -30,15 +28,14 @@
 
 (defn restore-app-state!
   [state]
-  (when-not (:history/page-only-mode? @state/state)
-   (let [route-match (:route-match state)
-         current-route (:route-match @state/state)
-         prev-route-data (get-route-data route-match)
-         current-route-data (get-route-data current-route)]
-     (when (and (not= prev-route-data current-route-data)
-                prev-route-data)
-       (route-handler/redirect! prev-route-data))
-     (swap! state/state merge state))))
+  (let [route-match (:route-match state)
+        current-route (:route-match @state/state)
+        prev-route-data (get-route-data route-match)
+        current-route-data (get-route-data current-route)]
+    (when (and (not= prev-route-data current-route-data)
+               prev-route-data)
+      (route-handler/redirect! prev-route-data))
+    (swap! state/state merge state)))
 
 (defn undo!
   [e]
@@ -50,11 +47,8 @@
        (editor/save-current-block!)
        (state/clear-editor-action!)
        (state/set-block-op-type! nil)
-       (if (config/db-based-graph? repo)
-         (let [^js worker @state/*db-worker]
-           (.undo worker repo))
-         (let [cursor-state (undo-redo/undo)]
-           (state/set-state! :ui/restore-cursor-state (select-keys cursor-state [:editor-cursor :app-state]))))))))
+       (let [^js worker @state/*db-worker]
+         (.undo worker repo))))))
 
 (defn redo!
   [e]
@@ -62,8 +56,5 @@
     (when (db-transact/request-finished?)
       (util/stop e)
       (state/clear-editor-action!)
-      (if (config/db-based-graph? repo)
-        (let [^js worker @state/*db-worker]
-          (.redo worker repo))
-        (let [cursor-state (undo-redo/redo)]
-          (state/set-state! :ui/restore-cursor-state (select-keys cursor-state [:editor-cursor :app-state])))))))
+      (let [^js worker @state/*db-worker]
+        (.redo worker repo)))))

+ 0 - 220
src/main/frontend/modules/editor/undo_redo.cljs

@@ -1,220 +0,0 @@
-(ns frontend.modules.editor.undo-redo
-  (:require [frontend.db :as db]
-            [frontend.handler.notification :as notification]
-            [frontend.util.page :as page-util]
-            [frontend.state :as state]
-            [clojure.set :as set]
-            [medley.core :as medley]
-            [frontend.handler.route :as route-handler]
-            [promesa.core :as p]))
-
-;;;; APIs
-
-(def ^:private undo-redo-states (atom {}))
-(def *pause-listener (atom false))
-
-(defn get-state
-  []
-  (let [repo (state/get-current-repo)]
-    (assert (string? repo) "Repo should satisfy string?")
-    (if-let [state (get @undo-redo-states repo)]
-      state
-      (let [new-state {:undo-stack (atom [])
-                       :redo-stack (atom [])}]
-        (swap! undo-redo-states assoc repo new-state)
-        new-state))))
-
-(defn- get-undo-stack
-  []
-  (-> (get-state) :undo-stack))
-
-(defn- get-redo-stack
-  []
-  (-> (get-state) :redo-stack))
-
-(defn push-undo
-  [txs]
-  (let [undo-stack (get-undo-stack)]
-    (swap! undo-stack conj txs)))
-
-(defn pop-undo
-  []
-  (let [undo-stack (get-undo-stack)]
-    (when-let [stack @undo-stack]
-      (when (seq stack)
-        (let [removed-e (peek stack)
-              popped-stack (pop stack)]
-          (reset! undo-stack popped-stack)
-          removed-e)))))
-
-(defn push-redo
-  [txs]
-  (let [redo-stack (get-redo-stack)]
-    (swap! redo-stack conj txs)))
-
-(defn pop-redo
-  []
-  (let [redo-stack (get-redo-stack)]
-    (when-let [removed-e (peek @redo-stack)]
-      (swap! redo-stack pop)
-      removed-e)))
-
-(defn page-pop-redo
-  [page-id]
-  (prn "[debug] redo: " (:block/original-name (db/pull page-id)))
-  (when-let [redo-stack (get-redo-stack)]
-    (when-let [stack @redo-stack]
-      (when (seq stack)
-        (let [reversed-stack (medley/indexed (reverse stack))
-              idx (some (fn [[idx item]]
-                          (some #(when (or (= (:db/id %) page-id)
-                                           (= (:db/id (:block/page %)) page-id)) idx) (:blocks item))) reversed-stack)]
-          (when idx
-            (let [idx' (- (count stack) idx 1)
-                  before (subvec stack 0 idx')
-                  after (subvec stack (inc idx'))
-                  others (vec (concat before after))]
-              (reset! redo-stack others)
-              (prn "[debug] redo remove: " (nth stack idx'))
-              (nth stack idx'))))))))
-
-(defn- smart-pop-redo
-  []
-  (if (:history/page-only-mode? @state/state)
-    (if-let [page-id (page-util/get-editing-page-id)]
-      (page-pop-redo page-id)
-      (pop-redo))
-    (pop-redo)))
-
-(defn reset-redo
-  []
-  (let [redo-stack (get-redo-stack)]
-    (reset! redo-stack [])))
-
-(defn get-txs
-  [redo? txs]
-  (let [txs (if redo? txs (reverse txs))]
-    (mapv (fn [[id attr value tx add?]]
-            (let [op (cond
-                       (and redo? add?) :db/add
-                       (and (not redo?) add?) :db/retract
-                       (and redo? (not add?)) :db/retract
-                       (and (not redo?) (not add?)) :db/add)]
-              [op id attr value tx]))
-          txs)))
-
-;;;; Invokes
-
-(defn- transact!
-  [txs tx-meta]
-  (db/transact! (state/get-current-repo) txs tx-meta))
-
-(defn- page-pop-undo
-  [page-id]
-  (let [undo-stack (get-undo-stack)]
-    (when-let [stack @undo-stack]
-      (when (seq stack)
-        (let [reversed-stack (medley/indexed (reverse stack))
-              idx (some (fn [[idx item]]
-                          (some #(when (or (= (:db/id %) page-id)
-                                           (= (:db/id (:block/page %)) page-id)) idx) (:blocks item))) reversed-stack)]
-          (when idx
-            (let [idx' (- (count stack) idx 1)
-                  before (subvec stack 0 idx')
-                  after (subvec stack (inc idx'))
-                  others (vec (concat before after))]
-              (reset! undo-stack others)
-              (prn "[debug] undo remove: " (nth stack idx'))
-              (nth stack idx'))))))))
-
-(defn- smart-pop-undo
-  []
-  (if (:history/page-only-mode? @state/state)
-    (if-let [page-id (page-util/get-editing-page-id)]
-      (page-pop-undo page-id)
-      (pop-undo))
-    (pop-undo)))
-
-(defn pause-listener!
-  []
-  (reset! *pause-listener true))
-
-(defn resume-listener!
-  []
-  (reset! *pause-listener false))
-
-(defn undo
-  []
-  (when-let [e (smart-pop-undo)]
-    (pause-listener!)
-    (state/set-editor-op! :undo)
-    (let [{:keys [txs tx-meta tx-id]} e
-          new-txs (get-txs false txs)
-          editor-cursor (:before (get @(get @state/state :history/tx->editor-cursor) tx-id))]
-      (push-redo e)
-      (p/do!
-       (transact! new-txs (assoc tx-meta :undo? true))
-
-       (when (= :rename-page (:outliner-op tx-meta))
-         (when-let [old-page (:old-name (:data tx-meta))]
-           (route-handler/redirect-to-page! old-page))))
-      (assoc e
-             :txs-op new-txs
-             :editor-cursor editor-cursor))))
-
-(defn redo
-  []
-  (when-let [{:keys [txs tx-meta tx-id] :as e} (smart-pop-redo)]
-    (pause-listener!)
-    (state/set-editor-op! :redo)
-    (let [new-txs (get-txs true txs)
-          editor-cursor (let [s (get @(get @state/state :history/tx->editor-cursor) tx-id)]
-                          (if (= (:outliner-op tx-meta) :save-block)
-                            (:before s)
-                            (or (:after s) (:before s))))]
-      (push-undo e)
-      (p/do!
-       (transact! new-txs (assoc tx-meta :redo? true))
-
-       (when (= :rename-page (:outliner-op tx-meta))
-         (when-let [new-page (:new-name (:data tx-meta))]
-           (route-handler/redirect-to-page! new-page))))
-
-      (assoc e
-             :txs-op new-txs
-             :editor-cursor editor-cursor))))
-
-(defn toggle-undo-redo-mode!
-  []
-  (swap! state/state update :history/page-only-mode? not)
-  (let [mode (if (:history/page-only-mode? @state/state) "Page only" "Global")]
-    (notification/show!
-     [:p (str "Undo/redo mode: " mode)])))
-
-
-(defn listen-db-changes!
-  [{:keys [tx-id tx-data tx-meta blocks pages]}]
-  (when (and (seq tx-data)
-             (not (or (:undo? tx-meta)
-                      (:redo? tx-meta)))
-             (not @*pause-listener)
-             (not (set/subset?
-                   (set (map :a tx-data))
-                   #{:block/created-at :block/updated-at})))
-    (reset-redo)
-    (if (:replace? tx-meta)
-      (when-let [removed-e (pop-undo)]
-        (let [entity (update removed-e :txs concat tx-data)]
-          (push-undo entity)))
-      (let [updated-blocks (concat blocks pages)
-            entity {:blocks updated-blocks
-                    :tx-id tx-id
-                    :txs tx-data
-                    :tx-meta tx-meta
-                    :app-state (select-keys @state/state
-                                            [:route-match
-                                             :ui/sidebar-open?
-                                             :ui/sidebar-collapsed-blocks
-                                             :sidebar/blocks])}]
-        (push-undo entity))))
-  (resume-listener!))

+ 1 - 14
src/main/frontend/modules/outliner/pipeline.cljs

@@ -1,22 +1,12 @@
 (ns frontend.modules.outliner.pipeline
-  (:require [frontend.config :as config]
-            [frontend.db :as db]
+  (:require [frontend.db :as db]
             [frontend.db.react :as react]
             [frontend.state :as state]
-            [frontend.modules.editor.undo-redo :as undo-redo]
             [datascript.core :as d]
             [frontend.handler.ui :as ui-handler]
             [frontend.handler.history :as history]
             [frontend.util :as util]))
 
-(defn store-undo-data!
-  [{:keys [tx-meta] :as opts}]
-  (when-not config/test?
-    (when (or (:outliner/transact? tx-meta)
-              (:outliner-op tx-meta)
-              (:whiteboard/transact? tx-meta))
-      (undo-redo/listen-db-changes! opts))))
-
 (defn- get-tx-id
   [tx-report]
   (get-in tx-report [:tempids :db/current-tx]))
@@ -68,9 +58,6 @@
                            (concat update-blocks-fully-loaded tx-data))
                          tx-data)
               tx-report (d/transact! conn tx-data' tx-meta)]
-          (when local-tx?
-            (let [tx-id (get-tx-id tx-report)]
-              (store-undo-data! (assoc opts :tx-id tx-id))))
           (when-not (or undo? redo?)
             (update-current-tx-editor-cursor! tx-report)))
 

+ 0 - 6
src/main/frontend/modules/shortcut/config.cljs

@@ -19,7 +19,6 @@
             [frontend.handler.plugin-config :as plugin-config-handler]
             [frontend.handler.window :as window-handler]
             [frontend.handler.jump :as jump-handler]
-            [frontend.modules.editor.undo-redo :as undo-redo]
             [frontend.dicts :as dicts]
             [frontend.modules.shortcut.before :as m]
             [frontend.state :as state]
@@ -360,9 +359,6 @@
    :editor/zoom-out                         {:binding (if mac? "mod+," "alt+left")
                                              :fn      editor-handler/zoom-out!}
 
-   :editor/toggle-undo-redo-mode            {:binding []
-                                             :fn      undo-redo/toggle-undo-redo-mode!}
-
    :editor/toggle-number-list               {:binding "t n"
                                              :fn      #(state/pub-event! [:editor/toggle-own-number-list (state/get-selection-block-ids)])}
 
@@ -722,7 +718,6 @@
      (-> (build-category-map
            [:editor/insert-link
             :editor/select-all-blocks
-            :editor/toggle-undo-redo-mode
             :editor/toggle-number-list
             :editor/undo
             :editor/redo
@@ -888,7 +883,6 @@
      :shortcut.category/toggle
      [:ui/toggle-help
       :editor/toggle-open-blocks
-      :editor/toggle-undo-redo-mode
       :editor/toggle-number-list
       :ui/toggle-wide-mode
       :ui/toggle-document-mode

+ 0 - 1
src/main/frontend/state.cljs

@@ -310,7 +310,6 @@
       :whiteboard/onboarding-tour?           (or (storage/get :whiteboard-onboarding-tour?) false)
       :whiteboard/last-persisted-at          {}
       :whiteboard/pending-tx-data            {}
-      :history/page-only-mode?               false
       :history/tx-before-editor-cursor       (atom nil)
       ;; db tx-id -> editor cursor
       :history/tx->editor-cursor             (atom {})

+ 0 - 1
src/resources/dicts/en.edn

@@ -727,7 +727,6 @@
   :editor/select-parent           "Select parent block"
   :editor/zoom-in                 "Zoom in editing block / Forwards otherwise"
   :editor/zoom-out                "Zoom out editing block / Backwards otherwise"
-  :editor/toggle-undo-redo-mode   "Toggle undo redo mode (global or page only)"
   :editor/toggle-number-list      "Toggle number list"
   :editor/add-property            "Add property"
   :editor/jump                    "Jump to a property key or value"