aboutsummaryrefslogtreecommitdiff
path: root/src/client/SignIn
diff options
context:
space:
mode:
authorJoris2017-03-26 21:10:42 +0200
committerJoris2017-03-26 21:10:42 +0200
commit1e47a7754ca38bd1a6c74765d8378caf68ce4619 (patch)
treed0d9238479dc2529a1b558bbbcde346e7e8c2935 /src/client/SignIn
parentc0ac16a713c4e53cf6af8e72a6d5f6b8ac5d6456 (diff)
downloadbudget-1e47a7754ca38bd1a6c74765d8378caf68ce4619.tar.gz
budget-1e47a7754ca38bd1a6c74765d8378caf68ce4619.tar.bz2
budget-1e47a7754ca38bd1a6c74765d8378caf68ce4619.zip
Separate client and server watch
Diffstat (limited to 'src/client/SignIn')
-rw-r--r--src/client/SignIn/Model.elm17
-rw-r--r--src/client/SignIn/Msg.elm9
-rw-r--r--src/client/SignIn/Update.elm31
-rw-r--r--src/client/SignIn/View.elm63
4 files changed, 120 insertions, 0 deletions
diff --git a/src/client/SignIn/Model.elm b/src/client/SignIn/Model.elm
new file mode 100644
index 0000000..19d4305
--- /dev/null
+++ b/src/client/SignIn/Model.elm
@@ -0,0 +1,17 @@
+module SignIn.Model exposing
+ ( Model
+ , init
+ )
+
+type alias Model =
+ { login : String
+ , waitingServer : Bool
+ , result : Maybe (Result String String)
+ }
+
+init : Maybe String -> Model
+init mbSignInError =
+ { login = ""
+ , waitingServer = False
+ , result = Maybe.map Err mbSignInError
+ }
diff --git a/src/client/SignIn/Msg.elm b/src/client/SignIn/Msg.elm
new file mode 100644
index 0000000..f753ebd
--- /dev/null
+++ b/src/client/SignIn/Msg.elm
@@ -0,0 +1,9 @@
+module SignIn.Msg exposing
+ ( Msg(..)
+ )
+
+type Msg =
+ UpdateLogin String
+ | WaitingServer
+ | ValidLogin
+ | ErrorLogin String
diff --git a/src/client/SignIn/Update.elm b/src/client/SignIn/Update.elm
new file mode 100644
index 0000000..98de777
--- /dev/null
+++ b/src/client/SignIn/Update.elm
@@ -0,0 +1,31 @@
+module SignIn.Update exposing
+ ( update
+ )
+
+import SignIn.Model exposing (..)
+import SignIn.Msg exposing (..)
+
+import Model.Translations exposing (getMessage, Translations)
+
+update : Translations -> Msg -> Model -> Model
+update translations msg signInView =
+ case msg of
+ UpdateLogin login ->
+ { signInView |
+ login = login
+ }
+ WaitingServer ->
+ { signInView
+ | waitingServer = True
+ }
+ ValidLogin ->
+ { signInView
+ | login = ""
+ , result = Just (Ok (getMessage translations "SignInEmailSent"))
+ , waitingServer = False
+ }
+ ErrorLogin message ->
+ { signInView
+ | result = Just (Err message)
+ , waitingServer = False
+ }
diff --git a/src/client/SignIn/View.elm b/src/client/SignIn/View.elm
new file mode 100644
index 0000000..88f74b0
--- /dev/null
+++ b/src/client/SignIn/View.elm
@@ -0,0 +1,63 @@
+module SignIn.View exposing
+ ( view
+ )
+
+import Json.Decode as Decode
+
+import FontAwesome
+import View.Color as Color
+
+import Html as H exposing (..)
+import Html.Attributes exposing (..)
+import Html.Events exposing (..)
+
+import SignIn.Msg as SignInMsg
+import SignIn.Model as SignInModel
+
+import Update exposing (..)
+
+import Model exposing (Model)
+import Msg exposing (..)
+import Model.Translations exposing (getMessage)
+
+import View.Events exposing (onSubmitPrevDefault)
+
+view : Model -> SignInModel.Model -> Html Msg
+view model signInModel =
+ div
+ [ class "signIn" ]
+ [ H.form
+ [ onSubmitPrevDefault (SignIn signInModel.login) ]
+ [ input
+ [ value signInModel.login
+ , on "input" (targetValue |> (Decode.map <| (UpdateSignIn << SignInMsg.UpdateLogin)))
+ , name "email"
+ ]
+ []
+ , button
+ []
+ [ if signInModel.waitingServer
+ then FontAwesome.spinner Color.white 20
+ else text (getMessage model.translations "SignIn")
+ ]
+ ]
+ , div
+ [ class "result" ]
+ [ signInResult model signInModel ]
+ ]
+
+signInResult : Model -> SignInModel.Model -> Html Msg
+signInResult model signInModel =
+ case signInModel.result of
+ Just result ->
+ case result of
+ Ok login ->
+ div
+ [ class "success" ]
+ [ text (getMessage model.translations "SignInEmailSent") ]
+ Err error ->
+ div
+ [ class "error" ]
+ [ text (getMessage model.translations error) ]
+ Nothing ->
+ text ""