Update intro/part8
This commit is contained in:
@@ -161,45 +161,16 @@ update : Msg -> Model -> ( Model, Cmd Msg )
|
|||||||
update msg model =
|
update msg model =
|
||||||
case msg of
|
case msg of
|
||||||
SubmittedForm ->
|
SubmittedForm ->
|
||||||
let
|
case validate model.form of
|
||||||
requestBody : Http.Body
|
Ok validForm ->
|
||||||
requestBody =
|
( { model | problems = [] }
|
||||||
encodeJsonBody model.form
|
, Http.send CompletedLogin (login validForm)
|
||||||
|
)
|
||||||
|
|
||||||
responseDecoder : Decoder Viewer
|
Err problems ->
|
||||||
responseDecoder =
|
( { model | problems = problems }
|
||||||
Decode.field "user" Viewer.decoder
|
, Cmd.none
|
||||||
|
)
|
||||||
{- 👉 TODO: Create a Http.Request value that represents
|
|
||||||
a POST request to "/api/users/login"
|
|
||||||
|
|
||||||
💡 HINT 1: Documentation for `Http.post` is here:
|
|
||||||
|
|
||||||
http://package.elm-lang.org/packages/elm-lang/http/1.0.0/Http#post
|
|
||||||
|
|
||||||
💡 HINT 2: Look at the values defined above in this
|
|
||||||
let-expression. What are their types? What are the types the
|
|
||||||
`Http.post` function is looking for?
|
|
||||||
-}
|
|
||||||
request : Http.Request Viewer
|
|
||||||
request =
|
|
||||||
Debug.todo "Call Http.post to represent a POST to /api/users/login"
|
|
||||||
|
|
||||||
{- 👉 TODO: Use Http.send to turn the request we just defined
|
|
||||||
into a Cmd for `update` to execute.
|
|
||||||
|
|
||||||
💡 HINT 1: Documentation for `Http.send` is here:
|
|
||||||
|
|
||||||
http://package.elm-lang.org/packages/elm-lang/http/1.0.0/Http#send
|
|
||||||
|
|
||||||
💡 HINT 2: The `CompletedLogin` variant defined in `type Msg`
|
|
||||||
will be useful here!
|
|
||||||
-}
|
|
||||||
cmd : Cmd Msg
|
|
||||||
cmd =
|
|
||||||
Cmd.none
|
|
||||||
in
|
|
||||||
( { model | problems = [] }, cmd )
|
|
||||||
|
|
||||||
EnteredEmail email ->
|
EnteredEmail email ->
|
||||||
updateForm (\form -> { form | email = email }) model
|
updateForm (\form -> { form | email = email }) model
|
||||||
@@ -236,19 +207,6 @@ updateForm transform model =
|
|||||||
( { model | form = transform model.form }, Cmd.none )
|
( { model | form = transform model.form }, Cmd.none )
|
||||||
|
|
||||||
|
|
||||||
encodeJsonBody : Form -> Http.Body
|
|
||||||
encodeJsonBody form =
|
|
||||||
let
|
|
||||||
user =
|
|
||||||
Encode.object
|
|
||||||
[ ( "email", Encode.string form.email )
|
|
||||||
, ( "password", Encode.string form.password )
|
|
||||||
]
|
|
||||||
in
|
|
||||||
Encode.object [ ( "user", user ) ]
|
|
||||||
|> Http.jsonBody
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- SUBSCRIPTIONS
|
-- SUBSCRIPTIONS
|
||||||
|
|
||||||
@@ -330,6 +288,27 @@ trimFields form =
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- HTTP
|
||||||
|
|
||||||
|
|
||||||
|
login : TrimmedForm -> Http.Request Viewer
|
||||||
|
login (Trimmed form) =
|
||||||
|
let
|
||||||
|
user =
|
||||||
|
Encode.object
|
||||||
|
[ ( "email", Encode.string form.email )
|
||||||
|
, ( "password", Encode.string form.password )
|
||||||
|
]
|
||||||
|
|
||||||
|
body =
|
||||||
|
Encode.object [ ( "user", user ) ]
|
||||||
|
|> Http.jsonBody
|
||||||
|
in
|
||||||
|
Decode.field "user" Viewer.decoder
|
||||||
|
|> Http.post (Api.url [ "users", "login" ]) body
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- EXPORT
|
-- EXPORT
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -146,16 +146,45 @@ update : Msg -> Model -> ( Model, Cmd Msg )
|
|||||||
update msg model =
|
update msg model =
|
||||||
case msg of
|
case msg of
|
||||||
SubmittedForm ->
|
SubmittedForm ->
|
||||||
case validate model.form of
|
let
|
||||||
Ok validForm ->
|
requestBody : Http.Body
|
||||||
( { model | problems = [] }
|
requestBody =
|
||||||
, Http.send CompletedRegister (register validForm)
|
encodeJsonBody model.form
|
||||||
)
|
|
||||||
|
|
||||||
Err problems ->
|
responseDecoder : Decoder Viewer
|
||||||
( { model | problems = problems }
|
responseDecoder =
|
||||||
, Cmd.none
|
Decode.field "user" Viewer.decoder
|
||||||
)
|
|
||||||
|
{- 👉 TODO: Create a Http.Request value that represents
|
||||||
|
a POST request to "/api/users"
|
||||||
|
|
||||||
|
💡 HINT 1: Documentation for `Http.post` is here:
|
||||||
|
|
||||||
|
http://package.elm-lang.org/packages/elm-lang/http/1.0.0/Http#post
|
||||||
|
|
||||||
|
💡 HINT 2: Look at the values defined above in this
|
||||||
|
let-expression. What are their types? What are the types the
|
||||||
|
`Http.post` function is looking for?
|
||||||
|
-}
|
||||||
|
request : Http.Request Viewer
|
||||||
|
request =
|
||||||
|
Debug.todo "Call Http.post to represent a POST to /api/users/login"
|
||||||
|
|
||||||
|
{- 👉 TODO: Use Http.send to turn the request we just defined
|
||||||
|
into a Cmd for `update` to execute.
|
||||||
|
|
||||||
|
💡 HINT 1: Documentation for `Http.send` is here:
|
||||||
|
|
||||||
|
http://package.elm-lang.org/packages/elm-lang/http/1.0.0/Http#send
|
||||||
|
|
||||||
|
💡 HINT 2: The `CompletedRegister` variant defined in `type Msg`
|
||||||
|
will be useful here!
|
||||||
|
-}
|
||||||
|
cmd : Cmd Msg
|
||||||
|
cmd =
|
||||||
|
Cmd.none
|
||||||
|
in
|
||||||
|
( { model | problems = [] }, cmd )
|
||||||
|
|
||||||
EnteredUsername username ->
|
EnteredUsername username ->
|
||||||
updateForm (\form -> { form | username = username }) model
|
updateForm (\form -> { form | username = username }) model
|
||||||
@@ -195,6 +224,20 @@ updateForm transform model =
|
|||||||
( { model | form = transform model.form }, Cmd.none )
|
( { model | form = transform model.form }, Cmd.none )
|
||||||
|
|
||||||
|
|
||||||
|
encodeJsonBody : Form -> Http.Body
|
||||||
|
encodeJsonBody form =
|
||||||
|
let
|
||||||
|
user =
|
||||||
|
Encode.object
|
||||||
|
[ ( "username", Encode.string form.username )
|
||||||
|
, ( "email", Encode.string form.email )
|
||||||
|
, ( "password", Encode.string form.password )
|
||||||
|
]
|
||||||
|
in
|
||||||
|
Encode.object [ ( "user", user ) ]
|
||||||
|
|> Http.jsonBody
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- SUBSCRIPTIONS
|
-- SUBSCRIPTIONS
|
||||||
|
|
||||||
@@ -295,25 +338,3 @@ trimFields form =
|
|||||||
, email = String.trim form.email
|
, email = String.trim form.email
|
||||||
, password = String.trim form.password
|
, password = String.trim form.password
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- HTTP
|
|
||||||
|
|
||||||
|
|
||||||
register : TrimmedForm -> Http.Request Viewer
|
|
||||||
register (Trimmed form) =
|
|
||||||
let
|
|
||||||
user =
|
|
||||||
Encode.object
|
|
||||||
[ ( "username", Encode.string form.username )
|
|
||||||
, ( "email", Encode.string form.email )
|
|
||||||
, ( "password", Encode.string form.password )
|
|
||||||
]
|
|
||||||
|
|
||||||
body =
|
|
||||||
Encode.object [ ( "user", user ) ]
|
|
||||||
|> Http.jsonBody
|
|
||||||
in
|
|
||||||
Decode.field "user" Viewer.decoder
|
|
||||||
|> Http.post (Api.url [ "users" ]) body
|
|
||||||
|
|||||||
Reference in New Issue
Block a user