diff --git a/frontend/src/uxbox/main.cljs b/frontend/src/uxbox/main.cljs index 735255c4d..3a84fe2d5 100644 --- a/frontend/src/uxbox/main.cljs +++ b/frontend/src/uxbox/main.cljs @@ -5,14 +5,13 @@ ;; Copyright (c) 2015-2016 Andrey Antukh (ns uxbox.main - (:require [uxbox.store :as st] + (:require [uxbox.main.store :as st] [uxbox.main.locales :as lc] - [uxbox.main.ui :as ui] - [uxbox.main.state :refer [initial-state]])) + [uxbox.main.ui :as ui])) (defn ^:export init [] (lc/init) - (st/init initial-state) + (st/init) (ui/init-routes) (ui/init)) diff --git a/frontend/src/uxbox/main/data/auth.cljs b/frontend/src/uxbox/main/data/auth.cljs index b3cce4e0b..caa082fbb 100644 --- a/frontend/src/uxbox/main/data/auth.cljs +++ b/frontend/src/uxbox/main/data/auth.cljs @@ -8,12 +8,12 @@ (:require [cljs.spec :as s] [beicon.core :as rx] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.repo :as rp] [uxbox.main.state :refer [initial-state]] [uxbox.main.data.projects :as udp] [uxbox.main.data.users :as udu] - [uxbox.main.data.messages :as udm] + [uxbox.util.messages :as uum] [uxbox.util.router :as rt] [uxbox.util.spec :as us] [uxbox.util.i18n :refer (tr)] @@ -58,7 +58,7 @@ (let [params {:username username :password password :scope "webapp"} - on-error #(udm/error (tr "errors.auth.unauthorized"))] + on-error #(rx/of (uum/error (tr "errors.auth.unauthorized")))] (->> (rp/req :fetch/token params) (rx/map :payload) (rx/map logged-in) @@ -133,7 +133,7 @@ (->> stream (rx/filter #(= % ::recovery-requested)) (rx/take 1) - (rx/do #(udm/info! (tr "auth.message.recovery-token-sent")))))))) + (rx/map #(uum/info (tr "auth.message.recovery-token-sent")))))))) (s/def ::recovery-request-event (s/keys :req-un [::username])) @@ -151,7 +151,7 @@ (letfn [(on-error [{payload :payload}] (rx/of (rt/navigate :auth/login) - (udm/show-error (tr "errors.auth.invalid-recovery-token"))))] + (uum/error (tr "errors.auth.invalid-recovery-token"))))] (->> (rp/req :auth/validate-recovery-token token) (rx/ignore) (rx/catch rp/client-error? on-error))))) @@ -167,11 +167,11 @@ ptk/WatchEvent (watch [_ state stream] (letfn [(on-error [{payload :payload}] - (udm/error (tr "errors.auth.invalid-recovery-token"))) + (rx/of (uum/error (tr "errors.auth.invalid-recovery-token")))) (on-success [{payload :payload}] (rx/of (rt/navigate :auth/login) - (udm/show-info (tr "auth.message.password-recovered"))))] + (uum/info (tr "auth.message.password-recovered"))))] (->> (rp/req :auth/recovery {:token token :password password}) (rx/mapcat on-success) (rx/catch rp/client-error? on-error))))) diff --git a/frontend/src/uxbox/main/data/colors.cljs b/frontend/src/uxbox/main/data/colors.cljs index fba0b2538..9af5dcb29 100644 --- a/frontend/src/uxbox/main/data/colors.cljs +++ b/frontend/src/uxbox/main/data/colors.cljs @@ -12,7 +12,7 @@ [potok.core :as ptk] [uxbox.util.router :as r] [uxbox.util.color :as color] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.repo :as rp])) ;; --- Initialize diff --git a/frontend/src/uxbox/main/data/dashboard.cljs b/frontend/src/uxbox/main/data/dashboard.cljs index 93ce7ad39..a56aae470 100644 --- a/frontend/src/uxbox/main/data/dashboard.cljs +++ b/frontend/src/uxbox/main/data/dashboard.cljs @@ -9,7 +9,7 @@ [uxbox.util.uuid :as uuid] [potok.core :as ptk] [uxbox.util.router :as r] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.util.forms :as sc] [uxbox.main.repo :as rp] [uxbox.main.data.projects :as dp] diff --git a/frontend/src/uxbox/main/data/history.cljs b/frontend/src/uxbox/main/data/history.cljs index 80383c699..bbd129041 100644 --- a/frontend/src/uxbox/main/data/history.cljs +++ b/frontend/src/uxbox/main/data/history.cljs @@ -14,7 +14,7 @@ [uxbox.util.i18n :refer (tr)] [uxbox.util.forms :as sc] [uxbox.main.data.pages :as udp] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.util.time :as dt] [uxbox.util.data :refer (without-keys replace-by-id diff --git a/frontend/src/uxbox/main/data/icons.cljs b/frontend/src/uxbox/main/data/icons.cljs index cda2dcb4f..89713574a 100644 --- a/frontend/src/uxbox/main/data/icons.cljs +++ b/frontend/src/uxbox/main/data/icons.cljs @@ -13,7 +13,7 @@ [uxbox.util.router :as r] [uxbox.util.dom :as dom] [uxbox.util.files :as files] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.repo :as rp])) ;; --- Initialize diff --git a/frontend/src/uxbox/main/data/images.cljs b/frontend/src/uxbox/main/data/images.cljs index 83f1f08f2..7d8e5aa7b 100644 --- a/frontend/src/uxbox/main/data/images.cljs +++ b/frontend/src/uxbox/main/data/images.cljs @@ -12,7 +12,7 @@ [potok.core :as ptk] [uxbox.util.router :as r] [uxbox.util.files :as files] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.repo :as rp])) ;; --- Initialize diff --git a/frontend/src/uxbox/main/data/lightbox.cljs b/frontend/src/uxbox/main/data/lightbox.cljs index 32da7aaba..98e3d64f9 100644 --- a/frontend/src/uxbox/main/data/lightbox.cljs +++ b/frontend/src/uxbox/main/data/lightbox.cljs @@ -8,7 +8,7 @@ (:require [beicon.core :as rx] [lentes.core :as l] [potok.core :as ptk] - [uxbox.store :as st])) + [uxbox.main.store :as st])) ;; --- Show Lightbox diff --git a/frontend/src/uxbox/main/data/messages.cljs b/frontend/src/uxbox/main/data/messages.cljs deleted file mode 100644 index 485e4e8c7..000000000 --- a/frontend/src/uxbox/main/data/messages.cljs +++ /dev/null @@ -1,112 +0,0 @@ -;; This Source Code Form is subject to the terms of the Mozilla Public -;; License, v. 2.0. If a copy of the MPL was not distributed with this -;; file, You can obtain one at http://mozilla.org/MPL/2.0/. -;; -;; Copyright (c) 2016 Andrey Antukh - -(ns uxbox.main.data.messages - (:require [cuerdas.core :as str] - [beicon.core :as rx] - [lentes.core :as l] - [potok.core :as ptk] - [uxbox.store :as st] - [uxbox.util.timers :as ts])) - -;; --- Constants - -(def +animation-timeout+ 600) - -;; --- Message Event - -(declare hide-message) -(declare show-message?) - -(defrecord ShowMessage [data] - ptk/UpdateEvent - (update [_ state] - (let [message (assoc data :state :visible)] - (assoc state :message message))) - - ptk/WatchEvent - (watch [_ state s] - (let [stoper (->> (rx/filter show-message? s) - (rx/take 1))] - (->> (rx/of (hide-message)) - (rx/delay (:timeout data)) - (rx/take-until stoper))))) - -(defn show-message - [message] - (ShowMessage. message)) - -(defn show-message? - [v] - (instance? ShowMessage v)) - -(defn show-error - [message & {:keys [timeout] :or {timeout 3000}}] - (show-message {:content message - :type :error - :timeout timeout})) - -(defn show-info - [message & {:keys [timeout] :or {timeout 3000}}] - (show-message {:content message - :type :info - :timeout timeout})) - -(defn show-dialog - [message & {:keys [on-accept on-cancel]}] - (show-message {:content message - :on-accept on-accept - :on-cancel on-cancel - :timeout js/Number.MAX_SAFE_INTEGER - :type :dialog})) - -;; --- Hide Message - -(defrecord HideMessage [^:mutable canceled?] - ptk/UpdateEvent - (update [_ state] - (update state :message - (fn [v] - (if (nil? v) - (do (set! canceled? true) nil) - (assoc v :state :hide))))) - - ptk/WatchEvent - (watch [_ state s] - (if canceled? - (rx/empty) - (->> (rx/of #(dissoc state :message)) - (rx/delay +animation-timeout+))))) - -(defn hide-message - [] - (HideMessage. false)) - -;; --- Direct Call Api - -(defn error! - [& args] - (ts/schedule 0 #(st/emit! (apply show-error args)))) - -(defn info! - [& args] - (ts/schedule 0 #(st/emit! (apply show-info args)))) - -(defn dialog! - [& args] - (ts/schedule 0 #(st/emit! (apply show-dialog args)))) - -(defn close! - [] - (st/emit! (hide-message))) - -(defn error - [& args] - (rx/of (apply show-error args))) - -(defn info - [& args] - (rx/of (apply show-info args))) diff --git a/frontend/src/uxbox/main/data/pages.cljs b/frontend/src/uxbox/main/data/pages.cljs index 36ae5955a..56d7e24c6 100644 --- a/frontend/src/uxbox/main/data/pages.cljs +++ b/frontend/src/uxbox/main/data/pages.cljs @@ -10,7 +10,7 @@ [beicon.core :as rx] [lentes.core :as l] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.repo :as rp] [uxbox.main.lenses :as ul] [uxbox.util.rlocks :as rlocks] diff --git a/frontend/src/uxbox/main/data/projects.cljs b/frontend/src/uxbox/main/data/projects.cljs index f0210f73c..a7d663476 100644 --- a/frontend/src/uxbox/main/data/projects.cljs +++ b/frontend/src/uxbox/main/data/projects.cljs @@ -9,7 +9,7 @@ [cuerdas.core :as str] [beicon.core :as rx] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.repo :as rp] [uxbox.main.data.pages :as udp] [uxbox.util.spec :as us] diff --git a/frontend/src/uxbox/main/data/shapes.cljs b/frontend/src/uxbox/main/data/shapes.cljs index 39143c383..3e6c22147 100644 --- a/frontend/src/uxbox/main/data/shapes.cljs +++ b/frontend/src/uxbox/main/data/shapes.cljs @@ -9,7 +9,7 @@ [lentes.core :as l] [beicon.core :as rx] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.constants :as c] [uxbox.main.lenses :as ul] [uxbox.main.geom :as geom] diff --git a/frontend/src/uxbox/main/data/undo.cljs b/frontend/src/uxbox/main/data/undo.cljs index a1e2189ab..0568b660f 100644 --- a/frontend/src/uxbox/main/data/undo.cljs +++ b/frontend/src/uxbox/main/data/undo.cljs @@ -9,7 +9,7 @@ [beicon.core :as rx] [potok.core :as ptk] [uxbox.main.data.pages :as udp] - [uxbox.store :as st])) + [uxbox.main.store :as st])) ;; --- Watch Page Changes diff --git a/frontend/src/uxbox/main/data/users.cljs b/frontend/src/uxbox/main/data/users.cljs index 518e20236..ea9409bd3 100644 --- a/frontend/src/uxbox/main/data/users.cljs +++ b/frontend/src/uxbox/main/data/users.cljs @@ -8,10 +8,10 @@ (:require [cljs.spec :as s] [beicon.core :as rx] [potok.core :as ptk] + [uxbox.main.repo :as rp] [uxbox.util.spec :as us] [uxbox.util.i18n :refer (tr)] - [uxbox.main.repo :as rp] - [uxbox.main.data.messages :as udm])) + [uxbox.util.messages :as uum])) (s/def ::fullname string?) (s/def ::email us/email?) @@ -47,11 +47,8 @@ (defrecord ProfileUpdated [data] ptk/WatchEvent (watch [_ state s] - (rx/of (profile-fetched data))) - - ptk/EffectEvent - (effect [_ state stream] - (udm/info! (tr "settings.profile-saved")))) + (rx/of (profile-fetched data) + (uum/info (tr "settings.profile-saved"))))) (defn profile-updated [data] @@ -84,9 +81,9 @@ ;; --- Password Updated (defrecord PasswordUpdated [] - ptk/EffectEvent - (effect [_ state stream] - (udm/info! (tr "settings.password-saved")))) + ptk/WatchEvent + (watch [_ state stream] + (rx/of (uum/info (tr "settings.password-saved"))))) (defn password-updated [] diff --git a/frontend/src/uxbox/main/data/workspace.cljs b/frontend/src/uxbox/main/data/workspace.cljs index 4b2005c6d..802bcb9fa 100644 --- a/frontend/src/uxbox/main/data/workspace.cljs +++ b/frontend/src/uxbox/main/data/workspace.cljs @@ -9,7 +9,7 @@ [beicon.core :as rx] [potok.core :as ptk] [lentes.core :as l] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.constants :as c] [uxbox.main.lenses :as ul] [uxbox.main.workers :as uwrk] diff --git a/frontend/src/uxbox/main/exports.cljs b/frontend/src/uxbox/main/exports.cljs index a1789a7fc..41f34da11 100644 --- a/frontend/src/uxbox/main/exports.cljs +++ b/frontend/src/uxbox/main/exports.cljs @@ -6,7 +6,7 @@ (ns uxbox.main.exports "The main logic for SVG export functionality." - (:require [uxbox.store :as st] + (:require [uxbox.main.store :as st] [uxbox.main.ui.shapes.rect :refer (rect-shape)] [uxbox.main.ui.shapes.icon :refer (icon-shape)] [uxbox.main.ui.shapes.text :refer (text-shape)] diff --git a/frontend/src/uxbox/main/geom.cljs b/frontend/src/uxbox/main/geom.cljs index 1d17082c6..894bf5a11 100644 --- a/frontend/src/uxbox/main/geom.cljs +++ b/frontend/src/uxbox/main/geom.cljs @@ -9,7 +9,7 @@ [uxbox.util.geom.matrix :as gmt] [uxbox.util.geom.point :as gpt] [uxbox.util.math :as mth] - [uxbox.store :as st])) + [uxbox.main.store :as st])) ;; --- Relative Movement diff --git a/frontend/src/uxbox/main/refs.cljs b/frontend/src/uxbox/main/refs.cljs index 62ff757b4..75a0da1d3 100644 --- a/frontend/src/uxbox/main/refs.cljs +++ b/frontend/src/uxbox/main/refs.cljs @@ -8,7 +8,7 @@ "A collection of derived refs." (:require [lentes.core :as l] [beicon.core :as rx] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.lenses :as ul])) ;; --- Helpers diff --git a/frontend/src/uxbox/main/store.cljs b/frontend/src/uxbox/main/store.cljs new file mode 100644 index 000000000..590421d57 --- /dev/null +++ b/frontend/src/uxbox/main/store.cljs @@ -0,0 +1,58 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) 2015-2017 Andrey Antukh + +(ns uxbox.main.store + (:require [beicon.core :as rx] + [lentes.core :as l] + [potok.core :as ptk] + [uxbox.builtins.colors :as colors] + [uxbox.util.storage :refer [storage]])) + +(enable-console-print!) + +(def ^:dynamic *on-error* identity) + +(defonce state (atom {})) +(defonce loader (atom false)) +(defonce store (ptk/store {:on-error #(*on-error* %)})) +(defonce stream (ptk/input-stream store)) + +(def auth-ref + (-> (l/key :auth) + (l/derive state))) + +(defn emit! + ([event] + (ptk/emit! store event)) + ([event & events] + (apply ptk/emit! store (cons event events)))) + +(defn- initial-state + [] + {:dashboard {:project-order :name + :project-filter "" + :images-order :name + :images-filter ""} + :route nil + :auth (:auth storage nil) + :clipboard #queue [] + :undo {} + :profile nil + :workspace nil + :images-collections nil + :images nil + :icons-collections nil + :icons nil + :colors-collections colors/collections + :shapes nil + :projects nil + :pages nil}) + +(defn init + "Initialize the state materialization." + [] + (emit! initial-state) + (rx/to-atom store state)) diff --git a/frontend/src/uxbox/main/ui.cljs b/frontend/src/uxbox/main/ui.cljs index a7c281fe5..d4b496d25 100644 --- a/frontend/src/uxbox/main/ui.cljs +++ b/frontend/src/uxbox/main/ui.cljs @@ -2,19 +2,20 @@ ;; License, v. 2.0. If a copy of the MPL was not distributed with this ;; file, You can obtain one at http://mozilla.org/MPL/2.0/. ;; -;; Copyright (c) 2015-2016 Andrey Antukh -;; Copyright (c) 2015-2016 Juan de la Cruz +;; Copyright (c) 2015-2017 Andrey Antukh +;; Copyright (c) 2015-2017 Juan de la Cruz (ns uxbox.main.ui (:require [beicon.core :as rx] [lentes.core :as l] [cuerdas.core :as str] [bide.core :as bc] - [uxbox.store :as st] + [potok.core :as ptk] + [uxbox.main.store :as st] [uxbox.main.data.projects :as dp] [uxbox.main.data.users :as udu] [uxbox.main.data.auth :refer [logout]] - [uxbox.main.data.messages :as dmsg] + [uxbox.util.messages :as uum] [uxbox.main.ui.loader :refer (loader)] [uxbox.main.ui.lightbox :refer (lightbox)] [uxbox.main.ui.icons :as i] @@ -22,14 +23,13 @@ [uxbox.main.ui.dashboard :as dashboard] [uxbox.main.ui.settings :as settings] [uxbox.main.ui.workspace :refer (workspace)] - [uxbox.util.timers :as ts] + [uxbox.main.ui.shapes] [uxbox.util.router :as rt] - [potok.core :as ptk] + [uxbox.util.timers :as ts] [uxbox.util.i18n :refer (tr)] [uxbox.util.data :refer (parse-int uuid-str?)] [uxbox.util.dom :as dom] - [uxbox.util.mixins :as mx :include-macros true] - [uxbox.main.ui.shapes])) + [uxbox.util.mixins :as mx :include-macros true])) ;; --- Constants @@ -62,18 +62,18 @@ ;; Conflict (= status 412) - (dmsg/error! (tr "errors.conflict")) + (st/emit! (uum/error (tr "errors.conflict"))) ;; Network error (= (:status error) 0) (do - (dmsg/error! (tr "errors.network")) + (st/emit! (uum/error (tr "errors.network"))) (js/console.error "Stack:" (.-stack error))) ;; Something else :else (do - (dmsg/error! (tr "errors.generic")) + (st/emit! (uum/error (tr "errors.generic"))) (js/console.error "Stack:" (.-stack error))))) (set! st/*on-error* on-error) @@ -95,7 +95,7 @@ location (:id route) params (:params route)] (if (and (restricted? location) (not auth)) - (do (ts/schedule 0 #(rt/go :auth/login)) nil) + (do (ts/schedule 0 #(st/emit! (rt/navigate :auth/login))) nil) (case location :auth/login (auth/login-page) :auth/register (auth/register-page) @@ -166,7 +166,7 @@ (defn init-routes [] - (rt/init routes)) + (rt/init st/store routes {:default :auth/login})) (defn init [] diff --git a/frontend/src/uxbox/main/ui/auth/login.cljs b/frontend/src/uxbox/main/ui/auth/login.cljs index 006ee21a1..82dae2829 100644 --- a/frontend/src/uxbox/main/ui/auth/login.cljs +++ b/frontend/src/uxbox/main/ui/auth/login.cljs @@ -9,11 +9,10 @@ (:require [lentes.core :as l] [cuerdas.core :as str] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.auth :as da] - [uxbox.main.data.messages :as udm] [uxbox.main.ui.icons :as i] - [uxbox.main.ui.messages :as uum] + [uxbox.main.ui.messages :refer [messages-widget]] [uxbox.main.ui.navigation :as nav] [uxbox.util.mixins :as mx :include-macros true] [uxbox.util.router :as rt] @@ -21,12 +20,12 @@ [uxbox.util.forms :as forms])) (def form-data (forms/focus-data :login st/state)) -(def set-value! (partial forms/set-value! :login)) +(def set-value! (partial forms/set-value! st/store :login)) (defn- login-page-will-mount [own] (when @st/auth-ref - (rt/go :dashboard/projects)) + (st/emit! (rt/navigate :dashboard/projects))) own) (def +login-form+ @@ -68,8 +67,10 @@ :value "Continue" :type "submit"}] [:div.login-links - [:a {:on-click #(rt/go :auth/recovery-request)} "Forgot your password?"] - [:a {:on-click #(rt/go :auth/register)} "Don't have an account?"]]]]))) + [:a {:on-click #(st/emit! (rt/navigate :auth/recovery-request))} + "Forgot your password?"] + [:a {:on-click #(st/emit! (rt/navigate :auth/register))} + "Don't have an account?"]]]]))) (mx/defc login-page {:mixins [mx/static] @@ -77,6 +78,6 @@ [] [:div.login [:div.login-body - (uum/messages) + (messages-widget) [:a i/logo] (login-form)]]) diff --git a/frontend/src/uxbox/main/ui/auth/recovery.cljs b/frontend/src/uxbox/main/ui/auth/recovery.cljs index 4c416e984..e60e28f1d 100644 --- a/frontend/src/uxbox/main/ui/auth/recovery.cljs +++ b/frontend/src/uxbox/main/ui/auth/recovery.cljs @@ -8,22 +8,22 @@ (ns uxbox.main.ui.auth.recovery (:require [lentes.core :as l] [cuerdas.core :as str] - [uxbox.util.router :as rt] - [uxbox.store :as st] [potok.core :as ptk] + [uxbox.main.store :as st] + [uxbox.main.data.auth :as uda] + [uxbox.main.ui.icons :as i] + [uxbox.main.ui.messages :refer [messages-widget]] + [uxbox.main.ui.navigation :as nav] + [uxbox.util.router :as rt] [uxbox.util.forms :as forms] [uxbox.util.mixins :as mx :include-macros true] - [uxbox.util.dom :as dom] - [uxbox.main.data.auth :as uda] - [uxbox.main.data.messages :as udm] - [uxbox.main.ui.icons :as i] - [uxbox.main.ui.messages :as uum] - [uxbox.main.ui.navigation :as nav])) + [uxbox.util.dom :as dom])) + ;; --- Recovery Form (def form-data (forms/focus-data :recovery st/state)) -(def set-value! (partial forms/set-value! :recovery)) +(def set-value! (partial forms/set-value! st/store :recovery)) (def +recovery-form+ {:password [forms/required forms/string]}) @@ -40,7 +40,8 @@ (on-submit [event] (dom/prevent-default event) (st/emit! (uda/recovery data) - (forms/clear :recovery)))] + (forms/clear-form :recovery) + (forms/clear-errors :recovery)))] [:form {:on-submit on-submit} [:div.login-content [:input.input-text @@ -56,7 +57,7 @@ :value "Recover password" :type "submit"}] [:div.login-links - [:a {:on-click #(rt/go :auth/login)} "Go back!"]]]]))) + [:a {:on-click #(st/emit! (rt/navigate :auth/login))} "Go back!"]]]]))) ;; --- Recovery Page @@ -67,12 +68,11 @@ own)) (mx/defc recovery-page - {:mixins [mx/static] - :will-mount recovery-page-will-mount - :will-unmount (forms/cleaner-fn :recovery)} + {:mixins [mx/static (forms/clear-mixin st/store :recovery)] + :will-mount recovery-page-will-mount} [token] [:div.login [:div.login-body - (uum/messages) + (messages-widget) [:a i/logo] (recovery-form token)]]) diff --git a/frontend/src/uxbox/main/ui/auth/recovery_request.cljs b/frontend/src/uxbox/main/ui/auth/recovery_request.cljs index 0e6d29cd3..b2590d26b 100644 --- a/frontend/src/uxbox/main/ui/auth/recovery_request.cljs +++ b/frontend/src/uxbox/main/ui/auth/recovery_request.cljs @@ -2,26 +2,26 @@ ;; License, v. 2.0. If a copy of the MPL was not distributed with this ;; file, You can obtain one at http://mozilla.org/MPL/2.0/. ;; -;; Copyright (c) 2015-2016 Andrey Antukh -;; Copyright (c) 2015-2016 Juan de la Cruz +;; Copyright (c) 2015-2017 Andrey Antukh +;; Copyright (c) 2015-2017 Juan de la Cruz (ns uxbox.main.ui.auth.recovery-request (:require [lentes.core :as l] [cuerdas.core :as str] - [uxbox.util.router :as rt] [potok.core :as ptk] + [uxbox.main.store :as st] + [uxbox.main.data.auth :as uda] + [uxbox.main.ui.icons :as i] + [uxbox.main.ui.messages :refer [messages-widget]] + [uxbox.main.ui.navigation :as nav] + [uxbox.util.router :as rt] [uxbox.util.forms :as forms] [uxbox.util.mixins :as mx :include-macros true] - [uxbox.util.dom :as dom] - [uxbox.store :as st] - [uxbox.main.data.auth :as uda] - [uxbox.main.data.messages :as udm] - [uxbox.main.ui.icons :as i] - [uxbox.main.ui.messages :as uum] - [uxbox.main.ui.navigation :as nav])) + [uxbox.util.dom :as dom])) + (def form-data (forms/focus-data :recovery-request st/state)) -(def set-value! (partial forms/set-value! :recovery-request)) +(def set-value! (partial forms/set-value! st/store :recovery-request)) (def +recovery-request-form+ {:username [forms/required forms/string]}) @@ -37,7 +37,8 @@ (on-submit [event] (dom/prevent-default event) (st/emit! (uda/recovery-request data) - (forms/clear :recovery-request)))] + (forms/clear-form :recovery-request) + (forms/clear-errors :recovery-request)))] [:form {:on-submit on-submit} [:div.login-content [:input.input-text @@ -53,16 +54,15 @@ :value "Recover password" :type "submit"}] [:div.login-links - [:a {:on-click #(rt/go :auth/login)} "Go back!"]]]]))) + [:a {:on-click #(st/emit! (rt/navigate :auth/login))} "Go back!"]]]]))) ;; --- Recovery Request Page (mx/defc recovery-request-page - {:mixins [mx/static] - :will-unmount (forms/cleaner-fn :recovery-request)} + {:mixins [mx/static (forms/clear-mixin st/store :recovery-request)]} [] [:div.login [:div.login-body - (uum/messages) + (messages-widget) [:a i/logo] (recovery-request-form)]]) diff --git a/frontend/src/uxbox/main/ui/auth/register.cljs b/frontend/src/uxbox/main/ui/auth/register.cljs index 718c38245..6a3d4699f 100644 --- a/frontend/src/uxbox/main/ui/auth/register.cljs +++ b/frontend/src/uxbox/main/ui/auth/register.cljs @@ -8,24 +8,23 @@ (ns uxbox.main.ui.auth.register (:require [lentes.core :as l] [cuerdas.core :as str] - [uxbox.util.router :as rt] [potok.core :as ptk] + [uxbox.main.store :as st] + [uxbox.main.data.auth :as uda] + [uxbox.main.ui.icons :as i] + [uxbox.main.ui.messages :refer [messages-widget]] + [uxbox.main.ui.navigation :as nav] + [uxbox.util.router :as rt] [uxbox.util.forms :as forms] [uxbox.util.mixins :as mx :include-macros true] - [uxbox.util.dom :as dom] - [uxbox.store :as st] - [uxbox.main.data.auth :as uda] - [uxbox.main.data.messages :as udm] - [uxbox.main.ui.icons :as i] - [uxbox.main.ui.messages :as uum] - [uxbox.main.ui.navigation :as nav])) + [uxbox.util.dom :as dom])) ;; --- Register Form (def form-data (forms/focus-data :register st/state)) (def form-errors (forms/focus-errors :register st/state)) -(def set-value! (partial forms/set-value! :register)) -(def set-error! (partial forms/set-error! :register)) +(def set-value! (partial forms/set-value! st/store :register)) +(def set-error! (partial forms/set-error! st/store :register)) (def +register-form+ {:username [forms/required forms/string] @@ -94,8 +93,7 @@ :value "Register" :type "submit"}] [:div.login-links - ;; [:a {:on-click #(rt/go :auth/recover-password)} "Forgot your password?"] - [:a {:on-click #(rt/go :auth/login)} "Already have an account?"]]]]))) + [:a {:on-click #(st/emit! (rt/navigate :auth/login))} "Already have an account?"]]]]))) ;; --- Register Page @@ -104,6 +102,6 @@ [own] [:div.login [:div.login-body - (uum/messages) + (messages-widget) [:a i/logo] (register-form)]]) diff --git a/frontend/src/uxbox/main/ui/dashboard/colors.cljs b/frontend/src/uxbox/main/ui/dashboard/colors.cljs index a41070a26..fa16d6a69 100644 --- a/frontend/src/uxbox/main/ui/dashboard/colors.cljs +++ b/frontend/src/uxbox/main/ui/dashboard/colors.cljs @@ -8,11 +8,12 @@ (ns uxbox.main.ui.dashboard.colors (:require [cuerdas.core :as str] [lentes.core :as l] + [potok.core :as ptk] [uxbox.main.data.colors :as dc] [uxbox.main.data.dashboard :as dd] [uxbox.main.data.lightbox :as udl] - [uxbox.store :as st] - [uxbox.main.ui.messages :as uum] + [uxbox.main.store :as st] + [uxbox.main.ui.messages :refer [messages-widget]] [uxbox.main.ui.colorpicker :refer (colorpicker)] [uxbox.main.ui.dashboard.header :refer (header)] [uxbox.main.ui.icons :as i] @@ -22,8 +23,7 @@ [uxbox.util.dom :as dom] [uxbox.util.i18n :as t :refer (tr)] [uxbox.util.lens :as ul] - [uxbox.util.mixins :as mx :include-macros true] - [potok.core :as ptk])) + [uxbox.util.mixins :as mx :include-macros true])) ;; --- Refs @@ -332,7 +332,7 @@ colls (mx/react collections-ref) coll (get colls (:id state))] [:main.dashboard-main - (uum/messages) + (messages-widget) (header) [:section.dashboard-content (nav state colls) diff --git a/frontend/src/uxbox/main/ui/dashboard/header.cljs b/frontend/src/uxbox/main/ui/dashboard/header.cljs index e2208e061..33777db28 100644 --- a/frontend/src/uxbox/main/ui/dashboard/header.cljs +++ b/frontend/src/uxbox/main/ui/dashboard/header.cljs @@ -7,7 +7,7 @@ (ns uxbox.main.ui.dashboard.header (:require [lentes.core :as l] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.projects :as dp] [uxbox.main.ui.navigation :as nav] [uxbox.main.ui.icons :as i] diff --git a/frontend/src/uxbox/main/ui/dashboard/icons.cljs b/frontend/src/uxbox/main/ui/dashboard/icons.cljs index 854f35c0e..4ac05a3c9 100644 --- a/frontend/src/uxbox/main/ui/dashboard/icons.cljs +++ b/frontend/src/uxbox/main/ui/dashboard/icons.cljs @@ -8,7 +8,7 @@ (ns uxbox.main.ui.dashboard.icons (:require [lentes.core :as l] [cuerdas.core :as str] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.lightbox :as udl] [uxbox.main.data.icons :as di] [uxbox.main.ui.icons :as i] diff --git a/frontend/src/uxbox/main/ui/dashboard/images.cljs b/frontend/src/uxbox/main/ui/dashboard/images.cljs index d9cdf8125..2995cd488 100644 --- a/frontend/src/uxbox/main/ui/dashboard/images.cljs +++ b/frontend/src/uxbox/main/ui/dashboard/images.cljs @@ -9,7 +9,7 @@ (:require [cuerdas.core :as str] [lentes.core :as l] [uxbox.util.i18n :as t :refer (tr)] - [uxbox.store :as st] + [uxbox.main.store :as st] [potok.core :as ptk] [uxbox.main.data.lightbox :as udl] [uxbox.main.data.images :as di] diff --git a/frontend/src/uxbox/main/ui/dashboard/projects.cljs b/frontend/src/uxbox/main/ui/dashboard/projects.cljs index 460095313..ef40d0edd 100644 --- a/frontend/src/uxbox/main/ui/dashboard/projects.cljs +++ b/frontend/src/uxbox/main/ui/dashboard/projects.cljs @@ -8,21 +8,21 @@ (ns uxbox.main.ui.dashboard.projects (:require [lentes.core :as l] [cuerdas.core :as str] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.constants :as c] [uxbox.main.data.projects :as udp] [uxbox.main.data.lightbox :as udl] [uxbox.main.ui.icons :as i] - [uxbox.main.ui.dashboard.header :refer (header)] + [uxbox.main.ui.dashboard.header :refer [header]] [uxbox.main.ui.dashboard.projects-createlightbox] [uxbox.main.ui.lightbox :as lbx] - [uxbox.main.ui.messages :as uum] + [uxbox.main.ui.messages :refer [messages-widget]] [uxbox.main.ui.keyboard :as kbd] [uxbox.main.exports :as exports] [uxbox.util.i18n :as t :refer (tr)] [uxbox.util.router :as r] [potok.core :as ptk] - [uxbox.util.data :refer (read-string)] + [uxbox.util.data :refer [read-string]] [uxbox.util.dom :as dom] [uxbox.util.blob :as blob] [uxbox.util.mixins :as mx :include-macros true] @@ -241,7 +241,7 @@ (let [state (mx/react dashboard-ref) projects-map (mx/react projects-map-ref)] [:main.dashboard-main - (uum/messages) + (messages-widget) (header) [:section.dashboard-content (menu state projects-map) diff --git a/frontend/src/uxbox/main/ui/dashboard/projects_createlightbox.cljs b/frontend/src/uxbox/main/ui/dashboard/projects_createlightbox.cljs index 8b5f6786a..1f9ee0e72 100644 --- a/frontend/src/uxbox/main/ui/dashboard/projects_createlightbox.cljs +++ b/frontend/src/uxbox/main/ui/dashboard/projects_createlightbox.cljs @@ -9,20 +9,19 @@ (:require [lentes.core :as l] [cuerdas.core :as str] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.constants :as c] [uxbox.main.exports :as exports] [uxbox.main.data.projects :as udp] [uxbox.main.data.lightbox :as udl] [uxbox.main.ui.icons :as i] - [uxbox.main.ui.dashboard.header :refer (header)] + [uxbox.main.ui.dashboard.header :refer [header]] [uxbox.main.ui.lightbox :as lbx] - [uxbox.main.ui.messages :as uum] [uxbox.main.ui.keyboard :as kbd] - [uxbox.util.i18n :as t :refer (tr)] + [uxbox.util.i18n :as t :refer [tr]] [uxbox.util.router :as r] [uxbox.util.forms :as forms] - [uxbox.util.data :refer (read-string)] + [uxbox.util.data :refer [read-string]] [uxbox.util.dom :as dom] [uxbox.util.blob :as blob] [uxbox.util.mixins :as mx :include-macros true] @@ -30,9 +29,9 @@ (def form-data (forms/focus-data :create-project st/state)) (def form-errors (forms/focus-errors :create-project st/state)) -(def set-value! (partial forms/set-value! :create-project)) -(def set-error! (partial forms/set-error! :create-project)) -(def clear! (partial forms/clear! :create-project)) +(def set-value! (partial forms/set-value! st/store :create-project)) +(def set-error! (partial forms/set-error! st/store :create-project)) +(def clear! (partial forms/clear! st/store :create-project)) (def ^:private create-project-form {:name [forms/required forms/string] @@ -74,7 +73,7 @@ (mx/defcs new-project-lightbox {:mixins [mx/static mx/reactive - (forms/clear-mixin :create-project)]} + (forms/clear-mixin st/store :create-project)]} [own] (let [data (merge c/project-defaults (mx/react form-data)) errors (mx/react form-errors) diff --git a/frontend/src/uxbox/main/ui/lightbox.cljs b/frontend/src/uxbox/main/ui/lightbox.cljs index fd5da1e9f..b79f263be 100644 --- a/frontend/src/uxbox/main/ui/lightbox.cljs +++ b/frontend/src/uxbox/main/ui/lightbox.cljs @@ -2,7 +2,7 @@ (:require [sablono.core :as html :refer-macros [html]] [rum.core :as rum] [lentes.core :as l] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.lightbox :as udl] [uxbox.util.mixins :as mx :include-macros true] [uxbox.main.ui.keyboard :as k] diff --git a/frontend/src/uxbox/main/ui/loader.cljs b/frontend/src/uxbox/main/ui/loader.cljs index 755098d10..abd85c5b7 100644 --- a/frontend/src/uxbox/main/ui/loader.cljs +++ b/frontend/src/uxbox/main/ui/loader.cljs @@ -2,27 +2,17 @@ ;; License, v. 2.0. If a copy of the MPL was not distributed with this ;; file, You can obtain one at http://mozilla.org/MPL/2.0/. ;; -;; Copyright (c) 2016 Andrey Antukh +;; Copyright (c) 2016-2017 Andrey Antukh (ns uxbox.main.ui.loader - (:require [sablono.core :refer-macros [html]] - [rum.core :as rum] - [uxbox.store :as st] + (:require [uxbox.main.store :as st] [uxbox.main.ui.icons :as i] - [uxbox.util.mixins :as mx :include-macros true] - [uxbox.main.ui.shapes])) + [uxbox.util.mixins :as mx :include-macros true])) ;; --- Component -(defn loader-render - [own] +(mx/defc loader + {:mixins [mx/reactive mx/static]} + [] (when (mx/react st/loader) - (html - [:div.loader-content i/loader]))) - -(def loader - (mx/component - {:render loader-render - :name "loader" - :mixins [mx/reactive mx/static]})) - + [:div.loader-content i/loader])) diff --git a/frontend/src/uxbox/main/ui/messages.cljs b/frontend/src/uxbox/main/ui/messages.cljs index 077ea2c60..db2959ded 100644 --- a/frontend/src/uxbox/main/ui/messages.cljs +++ b/frontend/src/uxbox/main/ui/messages.cljs @@ -1,91 +1,16 @@ (ns uxbox.main.ui.messages - (:require [sablono.core :as html :refer-macros [html]] - [rum.core :as rum] - [lentes.core :as l] - [uxbox.store :as st] - [uxbox.main.data.messages :as udm] - [uxbox.main.ui.icons :as i] - [uxbox.util.timers :as ts] - [uxbox.util.mixins :as mx :include-macros true] - [uxbox.util.data :refer (classnames)] - [uxbox.util.dom :as dom])) - -;; --- Lenses + (:require [lentes.core :as l] + [uxbox.main.store :as st] + [uxbox.util.messages :as uum] + [uxbox.util.mixins :as mx :include-macros true])) (def ^:private message-ref (-> (l/key :message) (l/derive st/state))) -;; --- Notification Component - -(defn notification-render - [own {:keys [type] :as message}] - (let [classes (classnames :error (= type :error) - :info (= type :info) - :hide-message (= (:state message) :hide) - :quick true) - close #(udm/close!)] - (html - [:div.message {:class classes} - [:div.message-body - [:span.close {:on-click close} - i/close] - [:span (:content message)]]]))) - -(def ^:private notification-box - (mx/component - {:render notification-render - :name "notification" - :mixins [mx/static]})) - -;; --- Dialog Component - -(defn dialog-render - [own {:keys [on-accept on-cancel] :as message}] - (let [classes (classnames :info true - :hide-message (= (:state message) :hide))] - (letfn [(accept [event] - (dom/prevent-default event) - (on-accept) - (ts/schedule 0 udm/close!)) - - (cancel [event] - (dom/prevent-default event) - (when on-cancel - (on-cancel)) - (ts/schedule 0 udm/close!))] - (html - [:div.message {:class classes} - [:div.message-body - [:span.close {:on-click cancel} i/close] - [:span (:content message)] - [:div.message-action - [:a.btn-transparent.btn-small - {:on-click accept} - "Accept"] - [:a.btn-transparent.btn-small - {:on-click cancel} - "Cancel"]]]])))) - -(def ^:private dialog-box - (mx/component - {:render dialog-render - :name "dialog" - :mixins [mx/static]})) - -;; --- Main Component (entry point) - -(defn messages-render - [own] - (let [message (mx/react message-ref)] - (case (:type message) - :error (notification-box message) - :info (notification-box message) - :dialog (dialog-box message) - nil))) - -(def messages - (mx/component - {:render messages-render - :name "messages" - :mixins [mx/static mx/reactive]})) +(mx/defc messages-widget + {:mixins [mx/static mx/reactive]} + [] + (let [message (mx/react message-ref) + on-close #(st/emit! (uum/hide))] + (uum/messages-widget (assoc message :on-close on-close)))) diff --git a/frontend/src/uxbox/main/ui/settings/header.cljs b/frontend/src/uxbox/main/ui/settings/header.cljs index a3ecb6bff..4ae6c38d5 100644 --- a/frontend/src/uxbox/main/ui/settings/header.cljs +++ b/frontend/src/uxbox/main/ui/settings/header.cljs @@ -12,7 +12,7 @@ [uxbox.util.i18n :refer (tr)] [uxbox.util.router :as r] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.projects :as dp] [uxbox.main.ui.navigation :as nav] [uxbox.main.ui.icons :as i] diff --git a/frontend/src/uxbox/main/ui/settings/password.cljs b/frontend/src/uxbox/main/ui/settings/password.cljs index f629bbb94..da6e1a67f 100644 --- a/frontend/src/uxbox/main/ui/settings/password.cljs +++ b/frontend/src/uxbox/main/ui/settings/password.cljs @@ -8,21 +8,21 @@ (ns uxbox.main.ui.settings.password (:require [lentes.core :as l] [cuerdas.core :as str] - [uxbox.util.i18n :as t :refer (tr)] [potok.core :as ptk] - [uxbox.util.forms :as forms] - [uxbox.util.dom :as dom] - [uxbox.util.mixins :as mx :include-macros true] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.users :as udu] [uxbox.main.ui.icons :as i] - [uxbox.main.ui.messages :as uum] - [uxbox.main.ui.settings.header :refer (header)])) + [uxbox.main.ui.messages :refer [messages-widget]] + [uxbox.main.ui.settings.header :refer [header]] + [uxbox.util.forms :as forms] + [uxbox.util.dom :as dom] + [uxbox.util.mixins :as mx :include-macros true])) + (def form-data (forms/focus-data :profile-password st/state)) (def form-errors (forms/focus-errors :profile-password st/state)) -(def set-value! (partial forms/set-value! :profile-password)) -(def set-errors! (partial forms/set-errors! :profile-password)) +(def set-value! (partial forms/set-value! st/store :profile-password)) +(def set-errors! (partial forms/set-errors! st/store :profile-password)) (def +password-form+ [[:password-1 forms/required forms/string [forms/min-len 6]] @@ -42,7 +42,6 @@ (on-submit [event] (println "on-submit" data) #_(st/emit! (udu/update-password form)))] - (println "password-form" data) [:form.password-form [:span.user-settings-label "Change password"] [:input.input-text @@ -79,8 +78,8 @@ {:mixins [mx/static]} [] [:main.dashboard-main + (messages-widget) (header) - (uum/messages) [:section.dashboard-content.user-settings [:section.user-settings-content (password-form)]]]) diff --git a/frontend/src/uxbox/main/ui/settings/profile.cljs b/frontend/src/uxbox/main/ui/settings/profile.cljs index b68e6a5fe..7da4eca0d 100644 --- a/frontend/src/uxbox/main/ui/settings/profile.cljs +++ b/frontend/src/uxbox/main/ui/settings/profile.cljs @@ -2,28 +2,30 @@ ;; License, v. 2.0. If a copy of the MPL was not distributed with this ;; file, You can obtain one at http://mozilla.org/MPL/2.0/. ;; -;; Copyright (c) 2016 Andrey Antukh -;; Copyright (c) 2016 Juan de la Cruz +;; Copyright (c) 2016-2017 Andrey Antukh +;; Copyright (c) 2016-2017 Juan de la Cruz (ns uxbox.main.ui.settings.profile (:require [cuerdas.core :as str] [lentes.core :as l] + [potok.core :as ptk] + [uxbox.main.store :as st] + [uxbox.main.ui.icons :as i] + [uxbox.main.ui.settings.header :refer [header]] + [uxbox.main.ui.messages :refer [messages-widget]] + [uxbox.main.data.users :as udu] [uxbox.util.forms :as forms] [uxbox.util.router :as r] - [potok.core :as ptk] [uxbox.util.mixins :as mx :include-macros true] - [uxbox.util.interop :refer (iterable->seq)] - [uxbox.util.dom :as dom] - [uxbox.store :as st] - [uxbox.main.ui.icons :as i] - [uxbox.main.ui.settings.header :refer (header)] - [uxbox.main.ui.messages :as uum] - [uxbox.main.data.users :as udu])) + [uxbox.util.interop :refer [iterable->seq]] + [uxbox.util.dom :as dom])) + (def form-data (forms/focus-data :profile st/state)) (def form-errors (forms/focus-errors :profile st/state)) -(def set-value! (partial forms/set-value! :profile)) -(def set-error! (partial forms/set-error! :profile)) +(def set-value! (partial forms/set-value! st/store :profile)) +(def set-error! (partial forms/set-error! st/store :profile)) +(def clear! (partial forms/clear! st/store :profile)) (def profile-ref (-> (l/key :profile) @@ -37,8 +39,8 @@ ;; --- Profile Form (mx/defc profile-form - {:mixins [mx/static mx/reactive] - :will-unmount (forms/cleaner-fn :profile)} + {:mixins [mx/static mx/reactive + (forms/clear-mixin st/store :profile)]} [] ;; TODO: properly persist theme (let [data (merge {:theme "light"} @@ -56,10 +58,8 @@ (set-error! :email "Email already exists") :uxbox.services.users/username-already-exists (set-error! :username "Username already exists"))) - (on-success [] - (forms/clear! :profile)) (on-submit [event] - (st/emit! (udu/update-profile data on-success on-error)))] + (st/emit! (udu/update-profile data clear! on-error)))] [:form.profile-form [:span.user-settings-label "Name, username and email"] [:input.input-text @@ -142,8 +142,8 @@ {:mixins [mx/static]} [] [:main.dashboard-main + (messages-widget) (header) - (uum/messages) [:section.dashboard-content.user-settings [:section.user-settings-content [:span.user-settings-label "Your avatar"] diff --git a/frontend/src/uxbox/main/ui/shapes/common.cljs b/frontend/src/uxbox/main/ui/shapes/common.cljs index e6de8e863..f62b2e844 100644 --- a/frontend/src/uxbox/main/ui/shapes/common.cljs +++ b/frontend/src/uxbox/main/ui/shapes/common.cljs @@ -8,7 +8,7 @@ (:require [lentes.core :as l] [beicon.core :as rx] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.refs :as refs] [uxbox.main.streams :as streams] [uxbox.main.geom :as geom] diff --git a/frontend/src/uxbox/main/ui/shapes/group.cljs b/frontend/src/uxbox/main/ui/shapes/group.cljs index 5a5e358bc..cd99bf9e4 100644 --- a/frontend/src/uxbox/main/ui/shapes/group.cljs +++ b/frontend/src/uxbox/main/ui/shapes/group.cljs @@ -6,7 +6,7 @@ (ns uxbox.main.ui.shapes.group (:require [lentes.core :as l] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.geom :as geom] [uxbox.main.ui.shapes.common :as common] [uxbox.main.ui.shapes.attrs :as attrs] diff --git a/frontend/src/uxbox/main/ui/shapes/image.cljs b/frontend/src/uxbox/main/ui/shapes/image.cljs index 4df379e4b..4c55d9a96 100644 --- a/frontend/src/uxbox/main/ui/shapes/image.cljs +++ b/frontend/src/uxbox/main/ui/shapes/image.cljs @@ -8,7 +8,7 @@ (:require [beicon.core :as rx] [lentes.core :as l] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.ui.shapes.common :as common] [uxbox.main.ui.shapes.attrs :as attrs] [uxbox.main.data.images :as udi] diff --git a/frontend/src/uxbox/main/ui/shapes/path.cljs b/frontend/src/uxbox/main/ui/shapes/path.cljs index a90c747a1..cb4b0be50 100644 --- a/frontend/src/uxbox/main/ui/shapes/path.cljs +++ b/frontend/src/uxbox/main/ui/shapes/path.cljs @@ -6,7 +6,7 @@ (ns uxbox.main.ui.shapes.path (:require [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.ui.shapes.common :as common] [uxbox.main.ui.shapes.attrs :as attrs] [uxbox.main.data.shapes :as uds] diff --git a/frontend/src/uxbox/main/ui/shapes/selection.cljs b/frontend/src/uxbox/main/ui/shapes/selection.cljs index a39f86c40..5fe854fd7 100644 --- a/frontend/src/uxbox/main/ui/shapes/selection.cljs +++ b/frontend/src/uxbox/main/ui/shapes/selection.cljs @@ -10,7 +10,7 @@ (:require [lentes.core :as l] [beicon.core :as rx] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.constants :as c] [uxbox.main.refs :as refs] [uxbox.main.streams :as streams] diff --git a/frontend/src/uxbox/main/ui/shapes/text.cljs b/frontend/src/uxbox/main/ui/shapes/text.cljs index e4a8f2fce..9362c3a3f 100644 --- a/frontend/src/uxbox/main/ui/shapes/text.cljs +++ b/frontend/src/uxbox/main/ui/shapes/text.cljs @@ -9,7 +9,7 @@ [lentes.core :as l] [goog.events :as events] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.geom :as geom] [uxbox.main.data.shapes :as uds] [uxbox.main.ui.shapes.common :as common] diff --git a/frontend/src/uxbox/main/ui/users.cljs b/frontend/src/uxbox/main/ui/users.cljs index 9b920fb98..47aff87c1 100644 --- a/frontend/src/uxbox/main/ui/users.cljs +++ b/frontend/src/uxbox/main/ui/users.cljs @@ -7,13 +7,13 @@ (ns uxbox.main.ui.users (:require [cuerdas.core :as str] [lentes.core :as l] - [uxbox.util.router :as r] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.auth :as da] [uxbox.main.data.lightbox :as udl] [uxbox.main.ui.icons :as i] [uxbox.main.ui.navigation :as nav] + [uxbox.util.router :as rt] [uxbox.util.mixins :as mx :include-macros true])) ;; --- User Menu @@ -22,13 +22,13 @@ {:mixins [mx/static]} [open?] [:ul.dropdown {:class (when-not open? "hide")} - [:li {:on-click #(r/go :settings/profile)} + [:li {:on-click #(st/emit! (rt/navigate :settings/profile))} i/user [:span "Profile"]] - [:li {:on-click #(r/go :settings/password)} + [:li {:on-click #(st/emit! (rt/navigate :settings/password))} i/lock [:span "Password"]] - [:li {:on-click #(r/go :settings/notifications)} + [:li {:on-click #(st/emit! (rt/navigate :settings/notifications))} i/mail [:span "Notifications"]] [:li {:on-click #(st/emit! (da/logout))} @@ -38,8 +38,8 @@ ;; --- User Widget (def profile-ref - (as-> (l/key :profile) $ - (l/derive $ st/state))) + (-> (l/key :profile) + (l/derive st/state))) (mx/defcs user {:mixins [mx/static mx/reactive (mx/local {:open false})]} diff --git a/frontend/src/uxbox/main/ui/workspace.cljs b/frontend/src/uxbox/main/ui/workspace.cljs index b3b73014c..1946ff1ba 100644 --- a/frontend/src/uxbox/main/ui/workspace.cljs +++ b/frontend/src/uxbox/main/ui/workspace.cljs @@ -8,7 +8,7 @@ (ns uxbox.main.ui.workspace (:require [beicon.core :as rx] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.constants :as c] [uxbox.main.refs :as refs] [uxbox.main.streams :as streams] @@ -16,7 +16,7 @@ [uxbox.main.data.pages :as udp] [uxbox.main.data.history :as udh] [uxbox.main.data.undo :as udu] - [uxbox.main.ui.messages :as uum] + [uxbox.main.ui.messages :refer [messages-widget]] [uxbox.main.ui.confirm] [uxbox.main.ui.workspace.images] [uxbox.main.ui.keyboard :as kbd] @@ -121,9 +121,9 @@ :no-tool-bar-left (not left-sidebar?) :scrolling (:viewport-positionig workspace))] [:div + (messages-widget) (header) (colorpalette) - (uum/messages) [:main.main-content diff --git a/frontend/src/uxbox/main/ui/workspace/canvas.cljs b/frontend/src/uxbox/main/ui/workspace/canvas.cljs index 7b8b8d66a..809a0e9a6 100644 --- a/frontend/src/uxbox/main/ui/workspace/canvas.cljs +++ b/frontend/src/uxbox/main/ui/workspace/canvas.cljs @@ -10,7 +10,7 @@ [lentes.core :as l] [goog.events :as events] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.constants :as c] [uxbox.main.refs :as refs] [uxbox.main.streams :as streams] diff --git a/frontend/src/uxbox/main/ui/workspace/clipboard.cljs b/frontend/src/uxbox/main/ui/workspace/clipboard.cljs index 5aef8a1dc..b23afdfa6 100644 --- a/frontend/src/uxbox/main/ui/workspace/clipboard.cljs +++ b/frontend/src/uxbox/main/ui/workspace/clipboard.cljs @@ -7,7 +7,7 @@ (ns uxbox.main.ui.workspace.clipboard (:require [lentes.core :as l] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.lightbox :as udl] [uxbox.main.data.workspace :as udw] [uxbox.main.ui.icons :as i] diff --git a/frontend/src/uxbox/main/ui/workspace/colorpalette.cljs b/frontend/src/uxbox/main/ui/workspace/colorpalette.cljs index 5bde9e883..094359611 100644 --- a/frontend/src/uxbox/main/ui/workspace/colorpalette.cljs +++ b/frontend/src/uxbox/main/ui/workspace/colorpalette.cljs @@ -9,7 +9,7 @@ (:require [beicon.core :as rx] [lentes.core :as l] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.refs :as refs] [uxbox.main.data.workspace :as dw] [uxbox.main.data.shapes :as uds] diff --git a/frontend/src/uxbox/main/ui/workspace/colorpicker.cljs b/frontend/src/uxbox/main/ui/workspace/colorpicker.cljs index 2b8a0674c..1c0520ac1 100644 --- a/frontend/src/uxbox/main/ui/workspace/colorpicker.cljs +++ b/frontend/src/uxbox/main/ui/workspace/colorpicker.cljs @@ -8,7 +8,7 @@ (ns uxbox.main.ui.workspace.colorpicker (:require [lentes.core :as l] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.refs :as refs] [uxbox.main.geom :as geom] [uxbox.main.data.workspace :as udw] diff --git a/frontend/src/uxbox/main/ui/workspace/download.cljs b/frontend/src/uxbox/main/ui/workspace/download.cljs index cd7e22c0a..aca404ef9 100644 --- a/frontend/src/uxbox/main/ui/workspace/download.cljs +++ b/frontend/src/uxbox/main/ui/workspace/download.cljs @@ -10,7 +10,7 @@ [beicon.core :as rx] [potok.core :as ptk] [lentes.core :as l] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.refs :as refs] [uxbox.main.data.lightbox :as udl] [uxbox.main.exports :as exports] diff --git a/frontend/src/uxbox/main/ui/workspace/drawarea.cljs b/frontend/src/uxbox/main/ui/workspace/drawarea.cljs index 8b78cd77c..c87f21b08 100644 --- a/frontend/src/uxbox/main/ui/workspace/drawarea.cljs +++ b/frontend/src/uxbox/main/ui/workspace/drawarea.cljs @@ -10,7 +10,7 @@ [potok.core :as ptk] [uxbox.util.mixins :as mx :include-macros true] [uxbox.util.rlocks :as rlocks] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.constants :as c] [uxbox.main.refs :as refs] [uxbox.main.streams :as streams] diff --git a/frontend/src/uxbox/main/ui/workspace/header.cljs b/frontend/src/uxbox/main/ui/workspace/header.cljs index b585d2903..9616e9826 100644 --- a/frontend/src/uxbox/main/ui/workspace/header.cljs +++ b/frontend/src/uxbox/main/ui/workspace/header.cljs @@ -10,7 +10,7 @@ [uxbox.config :as cfg] [uxbox.util.router :as r] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.refs :as refs] [uxbox.main.data.workspace :as dw] [uxbox.main.data.history :as udh] diff --git a/frontend/src/uxbox/main/ui/workspace/images.cljs b/frontend/src/uxbox/main/ui/workspace/images.cljs index b50fb9bb2..120e5410e 100644 --- a/frontend/src/uxbox/main/ui/workspace/images.cljs +++ b/frontend/src/uxbox/main/ui/workspace/images.cljs @@ -12,7 +12,7 @@ [uxbox.util.mixins :as mx :include-macros true] [uxbox.util.data :as data :refer (read-string)] [uxbox.util.dom :as dom] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.lightbox :as udl] [uxbox.main.data.images :as udi] [uxbox.main.data.workspace :as udw] diff --git a/frontend/src/uxbox/main/ui/workspace/recent_colors.cljs b/frontend/src/uxbox/main/ui/workspace/recent_colors.cljs index c09fdbea7..1a37b8ff6 100644 --- a/frontend/src/uxbox/main/ui/workspace/recent_colors.cljs +++ b/frontend/src/uxbox/main/ui/workspace/recent_colors.cljs @@ -8,7 +8,7 @@ (ns uxbox.main.ui.workspace.recent-colors (:require [lentes.core :as l] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.refs :as refs] [uxbox.main.data.workspace :as dw] [uxbox.main.ui.icons :as i] diff --git a/frontend/src/uxbox/main/ui/workspace/rules.cljs b/frontend/src/uxbox/main/ui/workspace/rules.cljs index 92c5791af..62c3ba292 100644 --- a/frontend/src/uxbox/main/ui/workspace/rules.cljs +++ b/frontend/src/uxbox/main/ui/workspace/rules.cljs @@ -10,7 +10,7 @@ [rum.core :as rum] [cuerdas.core :as str] [beicon.core :as rx] - [uxbox.store :as s] + [uxbox.main.store :as s] [uxbox.main.constants :as c] [uxbox.main.streams :as streams] [uxbox.util.dom :as dom] diff --git a/frontend/src/uxbox/main/ui/workspace/selrect.cljs b/frontend/src/uxbox/main/ui/workspace/selrect.cljs index 218893c55..6e585f417 100644 --- a/frontend/src/uxbox/main/ui/workspace/selrect.cljs +++ b/frontend/src/uxbox/main/ui/workspace/selrect.cljs @@ -9,7 +9,7 @@ "Mouse selection interaction and component." (:require [beicon.core :as rx] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.constants :as c] [uxbox.main.refs :as refs] [uxbox.main.streams :as streams] diff --git a/frontend/src/uxbox/main/ui/workspace/shortcuts.cljs b/frontend/src/uxbox/main/ui/workspace/shortcuts.cljs index 05cb460e9..b22042097 100644 --- a/frontend/src/uxbox/main/ui/workspace/shortcuts.cljs +++ b/frontend/src/uxbox/main/ui/workspace/shortcuts.cljs @@ -9,7 +9,7 @@ (:require [goog.events :as events] [beicon.core :as rx] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.lightbox :as udl] [uxbox.main.data.workspace :as dw] [uxbox.main.data.shapes :as uds] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar.cljs index 5f126bd82..1580ed845 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar.cljs @@ -8,7 +8,7 @@ (ns uxbox.main.ui.workspace.sidebar (:require [lentes.core :as l] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.refs :as refs] [uxbox.main.ui.workspace.sidebar.options :refer (options-toolbox)] [uxbox.main.ui.workspace.sidebar.layers :refer (layers-toolbox)] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/drawtools.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/drawtools.cljs index a369cb270..48c539059 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/drawtools.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/drawtools.cljs @@ -9,7 +9,7 @@ (:require [sablono.core :as html :refer-macros [html]] [lentes.core :as l] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.refs :as refs] [uxbox.main.data.workspace :as dw] [uxbox.main.ui.icons :as i] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/history.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/history.cljs index 41c03dce3..a97388bad 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/history.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/history.cljs @@ -10,12 +10,11 @@ [rum.core :as rum] [lentes.core :as l] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.refs :as refs] [uxbox.main.data.workspace :as dw] [uxbox.main.data.pages :as udp] [uxbox.main.data.history :as udh] - [uxbox.main.data.messages :as udm] [uxbox.main.ui.icons :as i] [uxbox.util.i18n :refer (tr)] [uxbox.util.router :as r] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/icons.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/icons.cljs index 269daa8ba..96a86973b 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/icons.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/icons.cljs @@ -9,7 +9,7 @@ (:require [lentes.core :as l] [uxbox.util.router :as r] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.lenses :as ul] [uxbox.main.data.workspace :as udw] [uxbox.main.data.icons :as udi] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/layers.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/layers.cljs index 177244aba..08e9dd3ae 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/layers.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/layers.cljs @@ -10,7 +10,7 @@ [cuerdas.core :as str] [goog.events :as events] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.refs :as refs] [uxbox.main.data.workspace :as udw] [uxbox.main.data.shapes :as uds] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/options.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/options.cljs index becef838f..efb440425 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/options.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/options.cljs @@ -11,7 +11,7 @@ [uxbox.util.i18n :refer (tr)] [uxbox.util.router :as r] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.workspace :as udw] [uxbox.main.data.shapes :as uds] [uxbox.main.ui.icons :as i] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/options/circle_measures.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/options/circle_measures.cljs index b202b0fa6..bcf73de60 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/options/circle_measures.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/options/circle_measures.cljs @@ -12,7 +12,7 @@ [uxbox.util.i18n :refer (tr)] [uxbox.util.router :as r] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.workspace :as udw] [uxbox.main.data.shapes :as uds] [uxbox.main.ui.icons :as i] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/options/fill.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/options/fill.cljs index 903e046fe..34eedaa51 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/options/fill.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/options/fill.cljs @@ -10,7 +10,7 @@ [uxbox.util.i18n :refer (tr)] [uxbox.util.router :as r] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.shapes :as uds] [uxbox.main.data.lightbox :as udl] [uxbox.main.ui.icons :as i] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/options/icon_measures.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/options/icon_measures.cljs index 0ea28feba..fc3014dab 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/options/icon_measures.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/options/icon_measures.cljs @@ -12,7 +12,7 @@ [uxbox.util.i18n :refer (tr)] [uxbox.util.router :as r] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.workspace :as udw] [uxbox.main.data.shapes :as uds] [uxbox.main.ui.icons :as i] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/options/interactions.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/options/interactions.cljs index 87b290441..84100b399 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/options/interactions.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/options/interactions.cljs @@ -13,7 +13,7 @@ [uxbox.util.router :as r] [potok.core :as ptk] [uxbox.util.mixins :as mx :include-macros true] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.shapes :as uds] [uxbox.main.data.lightbox :as udl] [uxbox.main.ui.workspace.sidebar.sitemap :refer (pages-ref)] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/options/page.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/options/page.cljs index 056f93f53..4d606dd4e 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/options/page.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/options/page.cljs @@ -10,7 +10,7 @@ (:require [lentes.core :as l] [potok.core :as ptk] [cuerdas.core :as str] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.constants :as c] [uxbox.main.refs :as refs] [uxbox.main.data.pages :as udp] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/options/rect_measures.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/options/rect_measures.cljs index bb8db75ce..a777f21bb 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/options/rect_measures.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/options/rect_measures.cljs @@ -10,7 +10,7 @@ [uxbox.util.i18n :refer (tr)] [uxbox.util.router :as r] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.workspace :as udw] [uxbox.main.data.shapes :as uds] [uxbox.main.ui.icons :as i] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/options/stroke.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/options/stroke.cljs index f563b1119..6bdd8b14e 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/options/stroke.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/options/stroke.cljs @@ -10,7 +10,7 @@ [uxbox.util.i18n :refer (tr)] [uxbox.util.router :as r] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.data.shapes :as uds] [uxbox.main.data.lightbox :as udl] [uxbox.main.ui.icons :as i] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/options/text.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/options/text.cljs index 95eb5f0ae..962cc87df 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/options/text.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/options/text.cljs @@ -8,7 +8,7 @@ (ns uxbox.main.ui.workspace.sidebar.options.text (:require [lentes.core :as l] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.geom :as geom] [uxbox.main.data.workspace :as udw] [uxbox.main.data.shapes :as uds] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap.cljs index 957f4eec2..6ce09d8c6 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap.cljs @@ -9,7 +9,7 @@ (:require [lentes.core :as l] [cuerdas.core :as str] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.main.store :as st] [uxbox.main.refs :as refs] [uxbox.main.data.projects :as dp] [uxbox.main.data.pages :as udp] diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap_pageform.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap_pageform.cljs index fa647dbbf..cb53fda86 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap_pageform.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap_pageform.cljs @@ -8,7 +8,8 @@ (ns uxbox.main.ui.workspace.sidebar.sitemap-pageform (:require [lentes.core :as l] [cuerdas.core :as str] - [uxbox.store :as st] + [potok.core :as ptk] + [uxbox.main.store :as st] [uxbox.main.constants :as c] [uxbox.main.data.pages :as udp] [uxbox.main.data.workspace :as dw] @@ -17,14 +18,13 @@ [uxbox.main.ui.lightbox :as lbx] [uxbox.util.i18n :refer (tr)] [uxbox.util.router :as r] - [potok.core :as ptk] [uxbox.util.forms :as forms] [uxbox.util.mixins :as mx :include-macros true] [uxbox.util.data :refer (deep-merge parse-int)] [uxbox.util.dom :as dom])) (def form-data (forms/focus-data :workspace-page-form st/state)) -(def set-value! (partial forms/set-value! :workspace-page-form)) +(def set-value! (partial forms/set-value! st/store :workspace-page-form)) ;; --- Lightbox @@ -118,10 +118,7 @@ :type "button"}])]))) (mx/defc page-form-lightbox - {:mixins [mx/static] - :will-unmount (fn [own] - (forms/clear! :workspace-page-form) - own)} + {:mixins [mx/static (forms/clear-mixin st/store :workspace-page-form)]} [{:keys [id] :as page}] (letfn [(on-cancel [event] (dom/prevent-default event) diff --git a/frontend/src/uxbox/util/forms.cljs b/frontend/src/uxbox/util/forms.cljs index e5b2abaee..e4d5cfd61 100644 --- a/frontend/src/uxbox/util/forms.cljs +++ b/frontend/src/uxbox/util/forms.cljs @@ -11,7 +11,6 @@ [lentes.core :as l] [beicon.core :as rx] [potok.core :as ptk] - [uxbox.store :as st] [uxbox.util.mixins :as mx :include-macros true] [uxbox.util.i18n :refer (tr)])) @@ -113,8 +112,8 @@ (SetError. type field error))) (defn set-error! - [& args] - (st/emit! (apply set-error args))) + [store & args] + (ptk/emit! store (apply set-error args))) ;; --- Set Errors @@ -133,8 +132,8 @@ (SetErrors. type errors))) (defn set-errors! - [& args] - (st/emit! (apply set-errors args))) + [store & args] + (ptk/emit! store (apply set-errors args))) ;; --- Set Value @@ -155,8 +154,8 @@ (SetValue. type field value)) (defn set-value! - [type field value] - (st/emit! (set-value type field value))) + [store type field value] + (ptk/emit! store (set-value type field value))) ;; --- Validate Form @@ -195,8 +194,8 @@ (ClearForm. type)) (defn clear-form! - [type] - (st/emit! (clear-form type))) + [store type] + (ptk/emit! store (clear-form type))) ;; --- Clear Form @@ -211,24 +210,16 @@ (ClearErrors. type)) (defn clear-errors! - [type] - (st/emit! (clear-errors type))) + [store type] + (ptk/emit! store (clear-errors type))) ;; --- Clear -(defrecord Clear [type] - ptk/WatchEvent - (watch [_ state s] - (rx/of (clear-form type) - (clear-errors type)))) - -(defn clear - [type] - (Clear. type)) - (defn clear! - [type] - (st/emit! (clear type))) + [store type] + (ptk/emit! store + (clear-form type) + (clear-errors type))) ;; --- Helpers @@ -257,15 +248,8 @@ (when (get errors field) "invalid")) -(defn cleaner-fn - [type] - {:pre [(keyword? type)]} - (fn [own] - (clear! type) - own)) - (defn clear-mixin - [type] + [store type] {:will-unmount (fn [own] - (clear! type) + (clear! store type) own)}) diff --git a/frontend/src/uxbox/util/messages.cljs b/frontend/src/uxbox/util/messages.cljs new file mode 100644 index 000000000..19f07d37e --- /dev/null +++ b/frontend/src/uxbox/util/messages.cljs @@ -0,0 +1,152 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) 2016-2017 Andrey Antukh + +(ns uxbox.util.messages + "Messages notifications." + (:require [lentes.core :as l] + [cuerdas.core :as str] + [beicon.core :as rx] + [potok.core :as ptk] + [uxbox.main.ui.icons :as i] + [uxbox.util.timers :as ts] + [uxbox.util.mixins :as mx :include-macros true] + [uxbox.util.data :refer [classnames]] + [uxbox.util.dom :as dom])) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Data Events +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; --- Constants + +(def +animation-timeout+ 600) + +;; --- Message Event + +(declare hide) +(declare show?) + +(deftype Show [data] + ptk/UpdateEvent + (update [_ state] + (let [message (assoc data :state :visible)] + (assoc state :message message))) + + ptk/WatchEvent + (watch [_ state s] + (let [stoper (->> (rx/filter show? s) + (rx/take 1))] + (->> (rx/of (hide)) + (rx/delay (:timeout data)) + (rx/take-until stoper))))) + +(defn show + [message] + (Show. message)) + +(defn show? + [v] + (instance? Show v)) + +(defn error + [message & {:keys [timeout] :or {timeout 3000}}] + (show {:content message + :type :error + :timeout timeout})) + +(defn info + [message & {:keys [timeout] :or {timeout 3000}}] + (show {:content message + :type :info + :timeout timeout})) + +(defn dialog + [message & {:keys [on-accept on-cancel]}] + (show {:content message + :on-accept on-accept + :on-cancel on-cancel + :timeout js/Number.MAX_SAFE_INTEGER + :type :dialog})) + +;; --- Hide Message + +(deftype Hide [^:mutable canceled?] + ptk/UpdateEvent + (update [_ state] + (update state :message + (fn [v] + (if (nil? v) + (do (set! canceled? true) nil) + (assoc v :state :hide))))) + + ptk/WatchEvent + (watch [_ state stream] + (if canceled? + (rx/empty) + (->> (rx/of #(dissoc state :message)) + (rx/delay +animation-timeout+))))) + +(defn hide + [] + (Hide. false)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; UI Components +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; --- Notification Component + +(mx/defc notification-box + {:mixins [mx/static]} + [{:keys [type on-close] :as message}] + (let [classes (classnames :error (= type :error) + :info (= type :info) + :hide-message (= (:state message) :hide) + :quick true)] + [:div.message {:class classes} + [:div.message-body + [:span.close {:on-click on-close} i/close] + [:span (:content message)]]])) + +;; --- Dialog Component + +(mx/defc dialog-box + {:mixins [mx/static mx/reactive]} + [{:keys [on-accept on-cancel on-close] :as message}] + (let [classes (classnames :info true + :hide-message (= (:state message) :hide))] + (letfn [(accept [event] + (dom/prevent-default event) + (on-accept) + (ts/schedule 0 on-close)) + + (cancel [event] + (dom/prevent-default event) + (when on-cancel + (on-cancel)) + (ts/schedule 0 on-close))] + [:div.message {:class classes} + [:div.message-body + [:span.close {:on-click cancel} i/close] + [:span (:content message)] + [:div.message-action + [:a.btn-transparent.btn-small + {:on-click accept} + "Accept"] + [:a.btn-transparent.btn-small + {:on-click cancel} + "Cancel"]]]]))) + +;; --- Main Component (entry point) + +(mx/defc messages-widget + {:mixins [mx/static mx/reactive]} + [message] + (case (:type message) + :error (notification-box message) + :info (notification-box message) + :dialog (dialog-box message) + nil)) diff --git a/frontend/src/uxbox/util/rlocks.cljs b/frontend/src/uxbox/util/rlocks.cljs index 592f48b11..8e80af215 100644 --- a/frontend/src/uxbox/util/rlocks.cljs +++ b/frontend/src/uxbox/util/rlocks.cljs @@ -13,7 +13,7 @@ (:require [beicon.core :as rx])) (defonce lock (atom ::none)) -(defonce stream (rx/bus)) +(defonce stream (rx/subject)) (defn acquire! ([type] diff --git a/frontend/src/uxbox/util/router.cljs b/frontend/src/uxbox/util/router.cljs index 4168aaf69..f5995a33a 100644 --- a/frontend/src/uxbox/util/router.cljs +++ b/frontend/src/uxbox/util/router.cljs @@ -2,22 +2,19 @@ ;; License, v. 2.0. If a copy of the MPL was not distributed with this ;; file, You can obtain one at http://mozilla.org/MPL/2.0/. ;; -;; Copyright (c) 2015-2016 Andrey Antukh -;; Copyright (c) 2015-2016 Juan de la Cruz +;; Copyright (c) 2015-2017 Andrey Antukh (ns uxbox.util.router (:require [bide.core :as r] [beicon.core :as rx] [potok.core :as ptk] - [uxbox.store :as st])) - -(enable-console-print!) + [uxbox.main.store :as st])) (defonce +router+ nil) ;; --- Update Location (Event) -(defrecord UpdateLocation [id params] +(deftype UpdateLocation [id params] ptk/UpdateEvent (update [_ state] (let [route (merge {:id id} @@ -35,7 +32,7 @@ ;; --- Navigate (Event) -(defrecord Navigate [id params] +(deftype Navigate [id params] ptk/EffectEvent (effect [_ state stream] (r/navigate! +router+ id params))) @@ -49,22 +46,16 @@ ;; --- Public Api (defn init - ([routes] - (init routes nil)) - ([routes {:keys [default] :or {default :auth/login}}] - (let [opts {:on-navigate #(st/emit! (update-location %1 %2)) + ([store routes] + (init store routes nil)) + ([store routes {:keys [default] :or {default :auth/login}}] + (let [opts {:on-navigate #(ptk/emit! store (update-location %1 %2)) :default default} router (-> (r/router routes) (r/start! opts))] (set! +router+ router) router))) -(defn go - "Redirect the user to other url." - ([id] (go id nil)) - ([id params] - (st/emit! (navigate id params)))) - (defn route-for "Given a location handler and optional parameter map, return the URI for such handler and parameters." diff --git a/frontend/src/uxbox/view.cljs b/frontend/src/uxbox/view.cljs index fabd74a16..e6a60735c 100644 --- a/frontend/src/uxbox/view.cljs +++ b/frontend/src/uxbox/view.cljs @@ -2,24 +2,15 @@ ;; License, v. 2.0. If a copy of the MPL was not distributed with this ;; file, You can obtain one at http://mozilla.org/MPL/2.0/. ;; -;; Copyright (c) 2016 Andrey Antukh +;; Copyright (c) 2016-2017 Andrey Antukh (ns uxbox.view (:require [uxbox.config] - [uxbox.store :as st] + [uxbox.view.store :as st] [uxbox.view.ui :as ui])) -(defn- initial-state - [] - {:route nil - :project nil - :pages nil - :page nil - :flags #{:sitemap} - :shapes {}}) - (defn ^:export init [] - (st/init initial-state) + (st/init) (ui/init-routes) (ui/init)) diff --git a/frontend/src/uxbox/view/router.cljs b/frontend/src/uxbox/view/router.cljs new file mode 100644 index 000000000..ea058dfff --- /dev/null +++ b/frontend/src/uxbox/view/router.cljs @@ -0,0 +1,77 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) 2015-2017 Andrey Antukh + +(ns uxbox.util.router + (:require [bide.core :as r] + [beicon.core :as rx] + [potok.core :as ptk] + [uxbox.main.store :as st])) + +(enable-console-print!) + +(defonce +router+ nil) + +;; --- Update Location (Event) + +(deftype UpdateLocation [id params] + ptk/UpdateEvent + (update [_ state] + (let [route (merge {:id id} + (when params + {:params params}))] + (assoc state :route route)))) + +(defn update-location? + [v] + (instance? UpdateLocation v)) + +(defn update-location + [name params] + (UpdateLocation. name params)) + +;; --- Navigate (Event) + +(deftype Navigate [id params] + ptk/EffectEvent + (effect [_ state stream] + (r/navigate! +router+ id params))) + +(defn navigate + ([id] (navigate id nil)) + ([id params] + {:pre [(keyword? id)]} + (Navigate. id params))) + +;; --- Public Api + +(defn init + ([routes] + (init routes nil)) + ([routes {:keys [default] :or {default :auth/login}}] + (let [opts {:on-navigate #(st/emit! (update-location %1 %2)) + :default default} + router (-> (r/router routes) + (r/start! opts))] + (set! +router+ router) + router))) + +(defn go + "Redirect the user to other url." + ([id] (go id nil)) + ([id params] + (st/emit! (navigate id params)))) + +(defn route-for + "Given a location handler and optional parameter map, return the URI + for such handler and parameters." + ([id] + (if +router+ + (r/resolve +router+ id) + "")) + ([id params] + (if +router+ + (r/resolve +router+ id params) + ""))) diff --git a/frontend/src/uxbox/store.cljs b/frontend/src/uxbox/view/store.cljs similarity index 79% rename from frontend/src/uxbox/store.cljs rename to frontend/src/uxbox/view/store.cljs index 3b3d8cffb..081849cbe 100644 --- a/frontend/src/uxbox/store.cljs +++ b/frontend/src/uxbox/view/store.cljs @@ -4,13 +4,11 @@ ;; ;; Copyright (c) 2015-2017 Andrey Antukh -(ns uxbox.store +(ns uxbox.view.store (:require [beicon.core :as rx] [lentes.core :as l] [potok.core :as ptk])) -(enable-console-print!) - (def ^:dynamic *on-error* identity) (defonce state (atom {})) @@ -28,9 +26,17 @@ ([event & events] (apply ptk/emit! store (cons event events)))) +(defn- initial-state + [] + {:route nil + :project nil + :pages nil + :page nil + :flags #{:sitemap} + :shapes {}}) + (defn init "Initialize the state materialization." - [initial-state] - (let [istate (if (fn? initial-state) (initial-state) initial-state)] - (emit! (constantly istate)) - (rx/to-atom store state))) + [] + (emit! initial-state) + (rx/to-atom store state)) diff --git a/frontend/src/uxbox/view/ui.cljs b/frontend/src/uxbox/view/ui.cljs index bc5db0179..49394e106 100644 --- a/frontend/src/uxbox/view/ui.cljs +++ b/frontend/src/uxbox/view/ui.cljs @@ -2,20 +2,19 @@ ;; License, v. 2.0. If a copy of the MPL was not distributed with this ;; file, You can obtain one at http://mozilla.org/MPL/2.0/. ;; -;; Copyright (c) 2016 Andrey Antukh +;; Copyright (c) 2016-2017 Andrey Antukh (ns uxbox.view.ui (:require [lentes.core :as l] - [uxbox.util.i18n :refer (tr)] [potok.core :as ptk] - [uxbox.store :as st] - [uxbox.main.data.messages :as dmsg] - [uxbox.main.ui.loader :refer (loader)] - [uxbox.main.ui.lightbox :refer (lightbox)] [uxbox.main.ui.icons :as i] - [uxbox.view.ui.notfound :refer (notfound-page)] - [uxbox.view.ui.viewer :refer (viewer-page)] + [uxbox.view.store :as st] + [uxbox.view.ui.loader :refer [loader]] + [uxbox.view.ui.notfound :refer [notfound-page]] + [uxbox.view.ui.viewer :refer [viewer-page]] + [uxbox.util.i18n :refer [tr]] [uxbox.util.router :as rt] + [uxbox.util.messages :as uum] [uxbox.util.mixins :as mx :include-macros true] [uxbox.util.dom :as dom])) @@ -31,13 +30,13 @@ ;; Network error (= (:status error) 0) (do - (dmsg/error! (tr "errors.network")) + (st/emit! (uum/error (tr "errors.network"))) (js/console.error "Stack:" (.-stack error))) ;; Something else :else (do - (dmsg/error! (tr "errors.generic")) + (st/emit! (uum/error (tr "errors.generic"))) (js/console.error "Stack:" (.-stack error))))) (set! st/*on-error* on-error) @@ -64,10 +63,9 @@ (defn init-routes [] - (rt/init routes {:default :view/notfound})) + (rt/init st/store routes {:default :view/notfound})) (defn init [] (mx/mount (app) (dom/get-element "app")) - (mx/mount (lightbox) (dom/get-element "lightbox")) (mx/mount (loader) (dom/get-element "loader"))) diff --git a/frontend/src/uxbox/view/ui/loader.cljs b/frontend/src/uxbox/view/ui/loader.cljs new file mode 100644 index 000000000..b29765183 --- /dev/null +++ b/frontend/src/uxbox/view/ui/loader.cljs @@ -0,0 +1,19 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) 2016-2017 Andrey Antukh + +(ns uxbox.view.ui.loader + (:require [uxbox.main.ui.icons :as i] + [uxbox.view.store :as st] + [uxbox.util.mixins :as mx :include-macros true])) + +;; --- Component + +(mx/defc loader + {:mixins [mx/reactive mx/static]} + [] + (when (mx/react st/loader) + [:div.loader-content i/loader])) + diff --git a/frontend/src/uxbox/view/ui/viewer.cljs b/frontend/src/uxbox/view/ui/viewer.cljs index 6b91ba03c..37daa0376 100644 --- a/frontend/src/uxbox/view/ui/viewer.cljs +++ b/frontend/src/uxbox/view/ui/viewer.cljs @@ -12,7 +12,7 @@ [uxbox.util.router :as rt] [uxbox.util.mixins :as mx :include-macros true] [uxbox.main.ui.icons :as i] - [uxbox.store :as st] + [uxbox.view.store :as st] [uxbox.view.data.viewer :as dv] [uxbox.view.ui.viewer.nav :refer (nav)] [uxbox.view.ui.viewer.canvas :refer (canvas)] diff --git a/frontend/src/uxbox/view/ui/viewer/canvas.cljs b/frontend/src/uxbox/view/ui/viewer/canvas.cljs index 21728b463..2b891a68e 100644 --- a/frontend/src/uxbox/view/ui/viewer/canvas.cljs +++ b/frontend/src/uxbox/view/ui/viewer/canvas.cljs @@ -11,7 +11,7 @@ [rum.core :as rum] [uxbox.util.mixins :as mx :include-macros true] [uxbox.util.data :refer (parse-int)] - [uxbox.store :as st] + [uxbox.view.store :as st] [uxbox.main.ui.shapes :as uus] [uxbox.main.ui.icons :as i] [uxbox.view.ui.viewer.shapes :as shapes])) diff --git a/frontend/src/uxbox/view/ui/viewer/interactions.cljs b/frontend/src/uxbox/view/ui/viewer/interactions.cljs index fcff123a6..945a58f5c 100644 --- a/frontend/src/uxbox/view/ui/viewer/interactions.cljs +++ b/frontend/src/uxbox/view/ui/viewer/interactions.cljs @@ -11,7 +11,7 @@ [uxbox.util.geom.point :as gpt] [uxbox.util.timers :as ts] [uxbox.main.geom :as geom] - [uxbox.store :as st] + [uxbox.view.store :as st] [uxbox.view.data.viewer :as dv] [vendor.snapsvg]) ;; Documentation about available events: diff --git a/frontend/src/uxbox/view/ui/viewer/nav.cljs b/frontend/src/uxbox/view/ui/viewer/nav.cljs index a71b6e549..fd4ba010d 100644 --- a/frontend/src/uxbox/view/ui/viewer/nav.cljs +++ b/frontend/src/uxbox/view/ui/viewer/nav.cljs @@ -8,7 +8,7 @@ (ns uxbox.view.ui.viewer.nav (:require [uxbox.util.mixins :as mx :include-macros true] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.view.store :as st] [uxbox.main.ui.icons :as i] [uxbox.view.data.viewer :as dv])) diff --git a/frontend/src/uxbox/view/ui/viewer/shapes.cljs b/frontend/src/uxbox/view/ui/viewer/shapes.cljs index 7623f651d..b4bca3e38 100644 --- a/frontend/src/uxbox/view/ui/viewer/shapes.cljs +++ b/frontend/src/uxbox/view/ui/viewer/shapes.cljs @@ -8,7 +8,7 @@ (:require [goog.events :as events] [lentes.core :as l] [uxbox.util.mixins :as mx :include-macros true] - [uxbox.store :as st] + [uxbox.view.store :as st] [uxbox.main.geom :as geom] [uxbox.main.ui.shapes.rect :refer (rect-shape)] [uxbox.main.ui.shapes.icon :refer (icon-shape)] diff --git a/frontend/src/uxbox/view/ui/viewer/sitemap.cljs b/frontend/src/uxbox/view/ui/viewer/sitemap.cljs index 21b1480d8..21eb3eb02 100644 --- a/frontend/src/uxbox/view/ui/viewer/sitemap.cljs +++ b/frontend/src/uxbox/view/ui/viewer/sitemap.cljs @@ -12,7 +12,7 @@ [uxbox.util.mixins :as mx :include-macros true] [uxbox.util.data :refer (parse-int)] [potok.core :as ptk] - [uxbox.store :as st] + [uxbox.view.store :as st] [uxbox.main.ui.icons :as i] [uxbox.view.data.viewer :as dv]))