mirror of
https://github.com/penpot/penpot.git
synced 2025-06-12 21:41:39 +02: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)]}
|
{: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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue