From d871dfceac5074b80005b7654e827471c2dc5ba9 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 26 Sep 2016 22:13:54 +0300 Subject: [PATCH] Simplify projects events. --- src/uxbox/main/data/projects.cljs | 86 +++++++++++-------------------- 1 file changed, 29 insertions(+), 57 deletions(-) diff --git a/src/uxbox/main/data/projects.cljs b/src/uxbox/main/data/projects.cljs index 38740c97a..f6e9c7885 100644 --- a/src/uxbox/main/data/projects.cljs +++ b/src/uxbox/main/data/projects.cljs @@ -16,12 +16,31 @@ [uxbox.util.schema :as sc] [uxbox.main.data.pages :as udp])) +;; --- Helpers + +(defn assoc-project + "A reduce function for assoc the project + to the state map." + [state proj] + (let [id (:id proj)] + (update-in state [:projects-by-id id] merge proj))) + +(defn dissoc-project + "A reduce function for dissoc the project + from the state map." + [state id] + (update-in state [:projects-by-id] dissoc id)) + ;; --- Initialize (declare fetch-projects) (declare projects-fetched?) (defrecord Initialize [] + rs/UpdateEvent + (-apply-update [_ state] + (assoc-in state [:dashboard :section] :dashboard/projects)) + rs/EffectEvent (-apply-effect [_ state] (when-not (seq (:projects-by-id state)) @@ -45,8 +64,6 @@ ;; --- Projects Fetched -(declare assoc-project) - (defrecord ProjectsFetched [projects] rs/UpdateEvent (-apply-update [_ state] @@ -114,8 +131,6 @@ ;; --- Delete Project (by id) -(declare dissoc-project) - (defrecord DeleteProject [id] rs/WatchEvent (-apply-watch [_ state s] @@ -166,58 +181,15 @@ ([projectid] (GoTo. projectid)) ([projectid pageid] (GoToPage. projectid pageid))) -;; --- UI related events +;; --- Update Opts (Filtering & Ordering) -(defn set-project-ordering - [order] - (reify - rs/UpdateEvent - (-apply-update [_ state] - (assoc-in state [:dashboard :project-order] order)))) - -(defn set-project-filtering - [term] - (reify - rs/WatchEvent - (-apply-watch [_ state s] - (assoc-in state [:dashboard :project-filter] term)))) - -(defn clear-project-filtering - [] - (reify - rs/UpdateEvent - (-apply-update [_ state] - (assoc-in state [:dashboard :project-filter] "")))) - -;; --- Helpers - -(defn sort-projects-by - [ordering projs] - (case ordering - :name (sort-by :name projs) - :created (reverse (sort-by :created-at projs)) - projs)) - -(defn contains-term? - [phrase term] - (str/contains? (str/lower phrase) (str/trim (str/lower term)))) - -(defn filter-projects-by - [term projs] - (if (str/blank? term) - projs - (filter #(contains-term? (:name %) term) projs))) - -(defn assoc-project - "A reduce function for assoc the project - to the state map." - [state proj] - (let [id (:id proj)] - (update-in state [:projects-by-id id] merge proj))) - -(defn dissoc-project - "A reduce function for dissoc the project - from the state map." - [state id] - (update-in state [:projects-by-id] dissoc id)) +(defrecord UpdateOpts [order filter] + rs/UpdateEvent + (-apply-update [_ state] + (update-in state [:dashboard :projects] merge + (when order {:order order}) + (when filter {:filter filter})))) +(defn update-opts + [& {:keys [order filter] :as opts}] + (UpdateOpts. order filter))