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:
parent
e702b3358c
commit
7d2a3a6295
2 changed files with 37 additions and 35 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue