|
@@ -1,9 +1,11 @@
|
|
|
(ns ^:no-doc frontend.handler.history
|
|
(ns ^:no-doc frontend.handler.history
|
|
|
(:require [frontend.db :as db]
|
|
(:require [frontend.db :as db]
|
|
|
|
|
+ [frontend.state :as state]
|
|
|
[frontend.handler.editor :as editor]
|
|
[frontend.handler.editor :as editor]
|
|
|
[frontend.modules.editor.undo-redo :as undo-redo]
|
|
[frontend.modules.editor.undo-redo :as undo-redo]
|
|
|
[frontend.state :as state]
|
|
[frontend.state :as state]
|
|
|
[frontend.util :as util]
|
|
[frontend.util :as util]
|
|
|
|
|
+ [frontend.handler.route :as route-handler]
|
|
|
[goog.dom :as gdom]))
|
|
[goog.dom :as gdom]))
|
|
|
|
|
|
|
|
(defn restore-cursor!
|
|
(defn restore-cursor!
|
|
@@ -17,14 +19,33 @@
|
|
|
(:block/uuid block)
|
|
(:block/uuid block)
|
|
|
{:custom-content (:block/content block)}))))))
|
|
{:custom-content (:block/content block)}))))))
|
|
|
|
|
|
|
|
|
|
+(defn- get-route-data
|
|
|
|
|
+ [route-match]
|
|
|
|
|
+ (when (seq route-match)
|
|
|
|
|
+ {:to (get-in route-match [:data :name])
|
|
|
|
|
+ :path-params (:path-params route-match)
|
|
|
|
|
+ :query-params (:query-params route-match)}))
|
|
|
|
|
+
|
|
|
|
|
+(defn restore-app-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)))
|
|
|
|
|
+
|
|
|
(defn undo!
|
|
(defn undo!
|
|
|
[e]
|
|
[e]
|
|
|
(util/stop e)
|
|
(util/stop e)
|
|
|
(state/set-editor-op! :undo)
|
|
(state/set-editor-op! :undo)
|
|
|
(state/clear-editor-action!)
|
|
(state/clear-editor-action!)
|
|
|
(editor/save-current-block!)
|
|
(editor/save-current-block!)
|
|
|
- (let [{:keys [editor-cursor]} (undo-redo/undo)]
|
|
|
|
|
- (restore-cursor! editor-cursor))
|
|
|
|
|
|
|
+ (let [{:keys [editor-cursor app-state]} (undo-redo/undo)]
|
|
|
|
|
+ (restore-cursor! editor-cursor)
|
|
|
|
|
+ (restore-app-state! app-state))
|
|
|
(state/set-editor-op! nil))
|
|
(state/set-editor-op! nil))
|
|
|
|
|
|
|
|
(defn redo!
|
|
(defn redo!
|
|
@@ -32,6 +53,7 @@
|
|
|
(util/stop e)
|
|
(util/stop e)
|
|
|
(state/set-editor-op! :redo)
|
|
(state/set-editor-op! :redo)
|
|
|
(state/clear-editor-action!)
|
|
(state/clear-editor-action!)
|
|
|
- (let [{:keys [editor-cursor]} (undo-redo/redo)]
|
|
|
|
|
- (restore-cursor! editor-cursor))
|
|
|
|
|
|
|
+ (let [{:keys [editor-cursor app-state]} (undo-redo/redo)]
|
|
|
|
|
+ (restore-cursor! editor-cursor)
|
|
|
|
|
+ (restore-app-state! app-state))
|
|
|
(state/set-editor-op! nil))
|
|
(state/set-editor-op! nil))
|