penpot/src/uxbox/ui/auth.cljs

84 lines
2.5 KiB
Clojure

(ns uxbox.ui.auth
(:require [sablono.core :as html :refer-macros [html]]
[lentes.core :as l]
[cuerdas.core :as str]
[rum.core :as rum]
[uxbox.router :as rt]
[uxbox.state :as st]
[uxbox.rstore :as rs]
[uxbox.data.auth :as da]
[uxbox.data.messages :as udm]
[uxbox.util.dom :as dom]
[uxbox.ui.icons :as i]
[uxbox.ui.messages :as uum]
[uxbox.ui.navigation :as nav]
[uxbox.ui.mixins :as mx]))
;; --- Login
(defn- login-submit
[event local]
(dom/prevent-default event)
(let [form (:form @local)]
(rs/emit! (da/login {:username (:email form)
:password (:password form)}))))
(defn- login-submit-enabled?
[local]
(let [form (:form @local)]
(and (not (str/empty? (:email form "")))
(not (str/empty? (:password form ""))))))
(defn- login-field-change
[local field event]
(let [value (str/trim (dom/event->value event))]
(swap! local assoc-in [:form field] value)))
(defn- login-render
[own local]
(let [on-submit #(login-submit % local)
submit-enabled? (login-submit-enabled? local)
form (:form @local)]
(html
[:div.login
[:div.login-body
(uum/messages)
[:a i/logo]
[:form {:on-submit on-submit}
[:div.login-content
[:input.input-text
{:name "email"
:ref "email"
:value (:email form "")
:on-change #(login-field-change local :email %)
:placeholder "Email or Username"
:type "text"}]
[:input.input-text
{:name "password"
:ref "password"
:value (:password form "")
:on-change #(login-field-change local :password %)
:placeholder "Password"
:type "password"}]
[:input.btn-primary
{:name "login"
:class (when-not submit-enabled? "btn-disabled")
:disabled (not submit-enabled?)
:value "Continue"
:type "submit"}]
[:div.login-links
[:a {:on-click #(rt/go :auth/recover-password)} "Forgot your password?"]
[:a {:on-click #(rt/go :auth/register)} "Don't have an account?"]]]]]])))
(defn- login-will-mount
[own]
(when @st/auth-l
(rt/go :dashboard/projects))
own)
(def ^:const login
(mx/component
{:render #(login-render % (:rum/local %))
:will-mount login-will-mount
:name "login"
:mixins [(mx/local)]}))