about summary refs log tree commit diff
path: root/client/src/State.elm
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-07-31T18·33+0100
committerWilliam Carroll <wpcarro@gmail.com>2020-07-31T18·33+0100
commit9666d5dce152f996c7dd2167e0b1a9c2f9f767b0 (patch)
treefc2090f7ba1a6537fd56065d25f431e552118ea7 /client/src/State.elm
parentcf5d211477daefd105f9cd8f59195cb4d538086e (diff)
Support sign-up
Toggle b/w logging in or signing up.

TL;DR:
- From my previous submission's feedback, disallow users from signing themselves
  up as admins, managers; I just removed the UI element altogether, even though
  the server still support this (TODO)
Diffstat (limited to 'client/src/State.elm')
-rw-r--r--client/src/State.elm54
1 files changed, 36 insertions, 18 deletions
diff --git a/client/src/State.elm b/client/src/State.elm
index 8595ee4dd3e8..e23580a05ebb 100644
--- a/client/src/State.elm
+++ b/client/src/State.elm
@@ -27,16 +27,18 @@ import Utils
 type Msg
     = DoNothing
     | UpdateUsername String
+    | UpdateEmail String
     | UpdatePassword String
     | UpdateRole String
     | UpdateAdminTab AdminTab
     | ClearErrors
+    | ToggleLoginForm
       -- SPA
     | LinkClicked Browser.UrlRequest
     | UrlChanged Url.Url
       -- Outbound network
     | AttemptGetUsers
-    | AttemptSignUp Role
+    | AttemptSignUp
     | AttemptLogin
     | AttemptLogout
     | AttemptDeleteUser String
@@ -94,16 +96,23 @@ type AdminTab
     = Users
 
 
+type LoginTab
+    = LoginForm
+    | SignUpForm
+
+
 type alias Model =
     { route : Maybe Route
     , url : Url.Url
     , key : Nav.Key
     , session : Maybe Session
     , username : String
+    , email : String
     , password : String
     , role : Maybe Role
     , users : WebData AllUsers
     , adminTab : AdminTab
+    , loginTab : LoginTab
     , loginError : Maybe Http.Error
     , logoutError : Maybe Http.Error
     , signUpError : Maybe Http.Error
@@ -191,29 +200,20 @@ logout =
 
 signUp :
     { username : String
+    , email : String
     , password : String
-    , role : Role
     }
     -> Cmd Msg
-signUp { username, password, role } =
+signUp { username, email, password } =
     Utils.postWithCredentials
-        { url = endpoint [ "create-account" ] []
+        { url = endpoint [ "accounts" ] []
         , body =
             Http.jsonBody
                 (JE.object
                     [ ( "username", JE.string username )
+                    , ( "email", JE.string username )
                     , ( "password", JE.string password )
-                    , ( "role"
-                      , case role of
-                            User ->
-                                JE.string "user"
-
-                            Manager ->
-                                JE.string "manager"
-
-                            Admin ->
-                                JE.string "admin"
-                      )
+                    , ( "role", JE.string "user" )
                     ]
                 )
         , expect = Http.expectJson GotSignUp decodeSession
@@ -306,10 +306,12 @@ init _ url key =
       , key = key
       , session = Nothing
       , username = ""
+      , email = ""
       , password = ""
       , role = Nothing
       , users = RemoteData.NotAsked
       , adminTab = Users
+      , loginTab = LoginForm
       , loginError = Nothing
       , logoutError = Nothing
       , signUpError = Nothing
@@ -333,6 +335,9 @@ update msg model =
         UpdatePassword x ->
             ( { model | password = x }, Cmd.none )
 
+        UpdateEmail x ->
+            ( { model | email = x }, Cmd.none )
+
         UpdateAdminTab x ->
             ( { model | adminTab = x }, Cmd.none )
 
@@ -343,7 +348,7 @@ update msg model =
                         "user" ->
                             Just User
 
-                        "owner" ->
+                        "manager" ->
                             Just Manager
 
                         "admin" ->
@@ -364,6 +369,19 @@ update msg model =
             , Cmd.none
             )
 
+        ToggleLoginForm ->
+            ( { model
+                | loginTab =
+                    case model.loginTab of
+                        LoginForm ->
+                            SignUpForm
+
+                        SignUpForm ->
+                            LoginForm
+              }
+            , Cmd.none
+            )
+
         LinkClicked urlRequest ->
             case urlRequest of
                 Browser.Internal url ->
@@ -443,12 +461,12 @@ update msg model =
                     )
 
         -- /create-account
-        AttemptSignUp role ->
+        AttemptSignUp ->
             ( model
             , signUp
                 { username = model.username
+                , email = model.email
                 , password = model.password
-                , role = role
                 }
             )