0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-10 09:08:31 -05:00

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

View file

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