diff --git a/src/uxbox/data/auth.cljs b/src/uxbox/data/auth.cljs index 3030575fef..d7678980b0 100644 --- a/src/uxbox/data/auth.cljs +++ b/src/uxbox/data/auth.cljs @@ -6,7 +6,8 @@ ;; Copyright (c) 2015-2016 Juan de la Cruz (ns uxbox.data.auth - (:require [beicon.core :as rx] + (:require [hodgepodge.core :refer [local-storage]] + [beicon.core :as rx] [promesa.core :as p] [uxbox.repo :as rp] [uxbox.rstore :as rs] @@ -16,6 +17,21 @@ [uxbox.locales :refer (tr)] [uxbox.ui.messages :as uum])) +;; --- Logged In + +(defrecord LoggedIn [data] + rs/UpdateEvent + (-apply-update [this state] + (assoc state :auth data)) + + rs/WatchEvent + (-apply-watch [this state s] + (rx/of (r/navigate :dashboard/projects))) + + rs/EffectEvent + (-apply-effect [this state] + (assoc! local-storage ::auth data))) + ;; --- Login (defrecord Login [username password] @@ -25,11 +41,9 @@ (uum/error (tr "errors.auth")) (rx/empty)) (on-success [{value :payload}] - (rx/of (rs/swap #(assoc % :auth value)) - (r/navigate :dashboard/projects)))] - + (->LoggedIn value))] (->> (rp/do :login (merge (into {} this) {:scope "webapp"})) - (rx/mapcat on-success) + (rx/map on-success) (rx/catch on-error))))) (def ^:const ^:private +login-schema+ diff --git a/src/uxbox/state.cljs b/src/uxbox/state.cljs index 8a05fbb56f..cfbd9ee22e 100644 --- a/src/uxbox/state.cljs +++ b/src/uxbox/state.cljs @@ -11,17 +11,13 @@ [lentes.core :as l] [uxbox.rstore :as rs])) -(def +storage+ local-storage) -(def ^:const ^:private +persistent-keys+ - [:auth]) - (defonce state (atom {})) (defonce stream (rs/init {:dashboard {:project-order :name :project-filter ""} :route nil - :auth (::auth +storage+) + :auth (::auth local-storage) :workspace nil :shapes-by-id {} :elements-by-id {} @@ -30,18 +26,7 @@ :projects-by-id {} :pages-by-id {}})) -(defn- persist-state! - [state] - (assoc! +storage+ ::auth (:auth state))) - (defn init "Initialize the state materialization." [] - (rx/to-atom stream state) - (let [lens (l/select-keys +persistent-keys+) - stream (->> (l/focus-atom lens state) - (rx/from-atom) - (rx/dedupe) - (rx/debounce 1000) - (rx/tap #(println "[save]")))] - (rx/on-value stream #(persist-state! %)))) + (rx/to-atom stream state))