diff options
Diffstat (limited to 'src/client/SignIn')
-rw-r--r-- | src/client/SignIn/Model.elm | 17 | ||||
-rw-r--r-- | src/client/SignIn/Msg.elm | 9 | ||||
-rw-r--r-- | src/client/SignIn/Update.elm | 31 | ||||
-rw-r--r-- | src/client/SignIn/View.elm | 63 |
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 "" |