mirror of https://github.com/logseq/logseq
feat(undo): add multiple repo support
parent
07c25097c0
commit
e218a8823d
|
@ -7,32 +7,55 @@
|
||||||
|
|
||||||
;;;; APIs
|
;;;; APIs
|
||||||
|
|
||||||
(def undo-stack (atom []))
|
(def ^:private undo-redo-states (atom {}))
|
||||||
(def redo-stack (atom []))
|
|
||||||
|
(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
|
(defn push-undo
|
||||||
[txs]
|
[txs]
|
||||||
(swap! undo-stack conj txs))
|
(let [undo-stack (get-undo-stack)]
|
||||||
|
(swap! undo-stack conj txs)))
|
||||||
|
|
||||||
(defn pop-undo
|
(defn pop-undo
|
||||||
[]
|
[]
|
||||||
(when-let [removed-e (peek @undo-stack)]
|
(let [undo-stack (get-undo-stack)]
|
||||||
(swap! undo-stack pop)
|
(when-let [removed-e (peek @undo-stack)]
|
||||||
removed-e))
|
(swap! undo-stack pop)
|
||||||
|
removed-e)))
|
||||||
|
|
||||||
(defn push-redo
|
(defn push-redo
|
||||||
[txs]
|
[txs]
|
||||||
(swap! redo-stack conj txs))
|
(let [redo-stack (get-redo-stack)]
|
||||||
|
(swap! redo-stack conj txs)))
|
||||||
|
|
||||||
(defn pop-redo
|
(defn pop-redo
|
||||||
[]
|
[]
|
||||||
(when-let [removed-e (peek @redo-stack)]
|
(let [redo-stack (get-redo-stack)]
|
||||||
(swap! redo-stack pop)
|
(when-let [removed-e (peek @redo-stack)]
|
||||||
removed-e))
|
(swap! redo-stack pop)
|
||||||
|
removed-e)))
|
||||||
|
|
||||||
(defn reset-redo
|
(defn reset-redo
|
||||||
[]
|
[]
|
||||||
(reset! redo-stack []))
|
(let [redo-stack (get-redo-stack)]
|
||||||
|
(reset! redo-stack [])))
|
||||||
|
|
||||||
(defn get-txs
|
(defn get-txs
|
||||||
[redo? txs]
|
[redo? txs]
|
||||||
|
|
Loading…
Reference in New Issue