From d1fc7959a1f62490e0c5a34c5113485715b2620a Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 24 Dec 2015 19:32:10 +0200 Subject: [PATCH] Add colors collections persistence. --- frontend/uxbox/core.cljs | 1 + frontend/uxbox/data/load.cljs | 33 ++++++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/frontend/uxbox/core.cljs b/frontend/uxbox/core.cljs index c55c0d8c7..6da165345 100644 --- a/frontend/uxbox/core.cljs +++ b/frontend/uxbox/core.cljs @@ -13,6 +13,7 @@ "Initialize the storage subsystem." [] (let [lens (l/select-keys [:pages-by-id + :colors-by-id :projects-by-id]) stream (->> (l/focus-atom lens st/state) (rx/from-atom) diff --git a/frontend/uxbox/data/load.cljs b/frontend/uxbox/data/load.cljs index 1eb986302..c1ef1ec9e 100644 --- a/frontend/uxbox/data/load.cljs +++ b/frontend/uxbox/data/load.cljs @@ -7,6 +7,30 @@ [uxbox.data.projects :as dp] [bouncer.validators :as v])) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Helpers +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defn assoc-color + "A reduce function for assoc the project + to the state map." + [state color-coll] + (let [uuid (:id color-coll)] + (update-in state [:colors-by-id] assoc uuid color-coll))) + +(defn persist-state + [state] + (let [pages (into #{} (vals (:pages-by-id state))) + projects (into #{} (vals (:projects-by-id state))) + color-colls (into #{} (vals (:colors-by-id state)))] + (assoc! local-storage :data {:pages pages + :projects projects + :color-collections color-colls}))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Events +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (defn load-data "Load data from local storage." [] @@ -16,12 +40,7 @@ (if-let [data (get local-storage :data nil)] (as-> state $ (reduce dp/assoc-project $ (:projects data)) - (reduce dp/assoc-page $ (:pages data))) + (reduce dp/assoc-page $ (:pages data)) + (reduce assoc-color $ (:color-collections data))) state)))) -(defn persist-state - [state] - (let [pages (into #{} (vals (:pages-by-id state))) - projects (into #{} (vals (:projects-by-id state)))] - (assoc! local-storage :data {:pages pages - :projects projects})))