Update intro/part8

This commit is contained in:
Richard Feldman
2018-08-14 02:37:39 -04:00
parent 3effe9e9d9
commit 39a344cd4c
2 changed files with 82 additions and 82 deletions

View File

@@ -146,16 +146,45 @@ update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
SubmittedForm ->
case validate model.form of
Ok validForm ->
( { model | problems = [] }
, Http.send CompletedRegister (register validForm)
)
let
requestBody : Http.Body
requestBody =
encodeJsonBody model.form
Err problems ->
( { model | problems = problems }
, Cmd.none
)
responseDecoder : Decoder Viewer
responseDecoder =
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 ->
updateForm (\form -> { form | username = username }) model
@@ -195,6 +224,20 @@ updateForm transform model =
( { 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
@@ -295,25 +338,3 @@ trimFields form =
, email = String.trim form.email
, 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