aboutsummaryrefslogtreecommitdiff
path: root/client/src/View/SignIn.hs
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/View/SignIn.hs')
-rw-r--r--client/src/View/SignIn.hs48
1 files changed, 30 insertions, 18 deletions
diff --git a/client/src/View/SignIn.hs b/client/src/View/SignIn.hs
index 428997e..6fbf6d6 100644
--- a/client/src/View/SignIn.hs
+++ b/client/src/View/SignIn.hs
@@ -3,20 +3,24 @@ module View.SignIn
, view
) where
-import qualified Data.Either as Either
-import Data.Text (Text)
-import Prelude hiding (error)
-import Reflex.Dom (Event, MonadWidget)
-import qualified Reflex.Dom as R
+import qualified Data.Either as Either
+import qualified Data.Maybe as Maybe
+import Data.Text (Text)
+import Data.Validation (Validation)
+import Prelude hiding (error)
+import Reflex.Dom (Event, MonadWidget)
+import qualified Reflex.Dom as R
-import Common.Model (SignIn (SignIn))
-import qualified Common.Msg as Msg
+import Common.Model (SignInForm (SignInForm))
+import qualified Common.Msg as Msg
+import qualified Common.Validation.SignIn as SignInValidation
-import Component (ButtonIn (..), ButtonOut (..), InputIn (..),
- InputOut (..))
-import qualified Component as Component
-import qualified Util.Ajax as Ajax
-import qualified Util.WaitFor as WaitFor
+import Component (ButtonIn (..), ButtonOut (..),
+ InputIn (..), InputOut (..))
+import qualified Component as Component
+import qualified Util.Ajax as Ajax
+import qualified Util.Validation as ValidationUtil
+import qualified Util.WaitFor as WaitFor
data SignInMessage =
SuccessMessage Text
@@ -29,19 +33,27 @@ view signInMessage =
Component.form $ do
rec
input <- (Component.input
- (Component.defaultInputIn { _inputIn_label = Msg.get Msg.SignIn_EmailLabel })
- (R.ffilter Either.isRight signInResult))
+ (Component.defaultInputIn
+ { _inputIn_label = Msg.get Msg.SignIn_EmailLabel
+ , _inputIn_validation = SignInValidation.email
+ })
+ (const "" <$> R.ffilter Either.isRight signInResult)
+ validate)
- button <- Component.button $
+ validate <- _buttonOut_clic <$> (Component.button $
(Component.defaultButtonIn (R.text $ Msg.get Msg.SignIn_Button))
{ _buttonIn_class = R.constDyn "validate"
, _buttonIn_waiting = waiting
, _buttonIn_submit = True
- }
+ })
+
+ let form = SignInForm <$> _inputOut_raw input
(signInResult, waiting) <- WaitFor.waitFor
- (\email -> Ajax.postJson "/askSignIn" (SignIn <$> email))
- (R.tag (R.current (_inputOut_value input)) (_buttonOut_clic button))
+ (Ajax.postJson "/askSignIn")
+ (ValidationUtil.fireMaybe
+ ((\f -> const f <$> SignInValidation.signIn f) <$> form)
+ validate)
showSignInResult signInMessage signInResult