Avoid useless persistence api calls on page reordering.

This commit is contained in:
Andrey Antukh 2017-03-14 21:59:28 +01:00
parent e702b3358c
commit 7d2a3a6295
No known key found for this signature in database
GPG key ID: 4DFEBCB8316A8B95
2 changed files with 37 additions and 35 deletions

View file

@ -301,21 +301,21 @@
{:pre [(uuid? id)]} {:pre [(uuid? id)]}
(PersistMetadata. id)) (PersistMetadata. id))
(deftype PersistPages [] (deftype PersistPagesMetadata []
ptk/WatchEvent ptk/WatchEvent
(watch [_ state stream] (watch [_ state stream]
(letfn [(resolve-pages [state] (let [project (get-in state [:workspace :project])
(let [project (get-in state [:workspace :project])] xform (comp
(->> (vals (:pages state)) (map second)
(filter #(= project (:project %))) (filter #(= project (:project %)))
(sort-by #(get-in % [:metadata :order])))))] (map :id))]
(->> (rx/from-coll (resolve-pages state)) (->> (sequence xform (:pages state))
(rx/map :id) (rx/from-coll)
(rx/map persist-metadata))))) (rx/map persist-metadata)))))
(defn persist-pages (defn persist-pages-metadata
[] []
(PersistPages.)) (PersistPagesMetadata.))
;; --- Update Page ;; --- Update Page
@ -343,22 +343,6 @@
{:pre [(uuid? id) (us/valid? ::metadata metadata)]} {:pre [(uuid? id) (us/valid? ::metadata metadata)]}
(UpdateMetadata. id metadata)) (UpdateMetadata. id metadata))
;; --- Update Order
;;
;; A specialized event for update order
;; attribute on the page metadata
(deftype UpdateOrder [id order]
IMetadataUpdate
ptk/UpdateEvent
(update [this state]
(assoc-in state [:pages id :metadata :order] order)))
(defn update-order
[id order]
{:pre [(uuid? id) (number? order)]}
(UpdateOrder. id order))
;; --- Reorder Pages ;; --- Reorder Pages
;; ;;
;; A post processing event that normalizes the ;; A post processing event that normalizes the
@ -366,10 +350,9 @@
;; operation. ;; operation.
(deftype ReorderPages [] (deftype ReorderPages []
IMetadataUpdate
ptk/UpdateEvent ptk/UpdateEvent
(update [this state] (update [this state]
(let [project (l/focus ul/selected-project state) (let [project (get-in state [:workspace :project])
pages (->> (vals (:pages state)) pages (->> (vals (:pages state))
(filter #(= project (:project %))) (filter #(= project (:project %)))
(sort-by #(get-in % [:metadata :order])) (sort-by #(get-in % [:metadata :order]))
@ -378,12 +361,35 @@
(reduce (fn [state [i page]] (reduce (fn [state [i page]]
(assoc-in state [:pages page :metadata :order] (* 10 i))) (assoc-in state [:pages page :metadata :order] (* 10 i)))
state state
pages)))) pages)))
ptk/WatchEvent
(watch [_ state stream]
(rx/of (persist-pages-metadata))))
(defn reorder-pages (defn reorder-pages
[] []
(ReorderPages.)) (ReorderPages.))
;; --- Update Order
;;
;; A specialized event for update order
;; attribute on the page metadata
(deftype UpdateOrder [id order]
ptk/UpdateEvent
(update [this state]
(assoc-in state [:pages id :metadata :order] order))
ptk/WatchEvent
(watch [_ state stream]
(rx/of (reorder-pages))))
(defn update-order
[id order]
{:pre [(uuid? id) (number? order)]}
(UpdateOrder. id order))
;; --- Persist Page Form ;; --- Persist Page Form
;; ;;
;; A specialized event for persist data ;; A specialized event for persist data

View file

@ -81,13 +81,9 @@
over (:over @local)] over (:over @local)]
(case (:over @local) (case (:over @local)
:top (let [new-order (dec (get-in page [:metadata :order]))] :top (let [new-order (dec (get-in page [:metadata :order]))]
(st/emit! (udp/update-order id new-order)) (st/emit! (udp/update-order id new-order)))
(st/emit! (udp/reorder-pages))
(st/emit! (udp/persist-pages)))
:bottom (let [new-order (inc (get-in page [:metadata :order]))] :bottom (let [new-order (inc (get-in page [:metadata :order]))]
(st/emit! (udp/update-order id new-order)) (st/emit! (udp/update-order id new-order))))
(st/emit! (udp/reorder-pages))
(st/emit! (udp/persist-pages))))
(swap! local assoc :dragging false :over nil))) (swap! local assoc :dragging false :over nil)))
(on-drag-over [event] (on-drag-over [event]
(dom/prevent-default event) (dom/prevent-default event)