From 7d2a3a6295ef894d57f44c4f8e3a786868d8b117 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 14 Mar 2017 21:59:28 +0100 Subject: [PATCH] Avoid useless persistence api calls on page reordering. --- frontend/src/uxbox/main/data/pages.cljs | 64 ++++++++++--------- .../main/ui/workspace/sidebar/sitemap.cljs | 8 +-- 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/frontend/src/uxbox/main/data/pages.cljs b/frontend/src/uxbox/main/data/pages.cljs index 7794a0816..933a479c2 100644 --- a/frontend/src/uxbox/main/data/pages.cljs +++ b/frontend/src/uxbox/main/data/pages.cljs @@ -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)) - (filter #(= project (:project %))) - (sort-by #(get-in % [:metadata :order])))))] - (->> (rx/from-coll (resolve-pages state)) - (rx/map :id) + (let [project (get-in state [:workspace :project]) + xform (comp + (map second) + (filter #(= project (:project %))) + (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 diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap.cljs index cfb6fd8a1..c656d34e1 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap.cljs @@ -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)