This page covers Elm 0.18
Navigation
Ajoutons des boutons pour naviguer entre les vues.
Messages d'édition de Joueur
Modifiez src/Players/Messages.elm pour inclure deux nouvelles actions :
...
type Msg
= OnFetchAll (Result Http.Error (List Player))
| ShowPlayers
| ShowPlayer PlayerId
Nous avons ajouté ShowPlayers
et ShowPlayer
.
Liste de Joueurs
La liste des joueurs devrait afficher un bouton par utilisateur pour déclencher le message ShowPlayer
.
Dans src/Players/List.elm, ajoutez d'abord Html.Events
:
import Html.Events exposing (onClick)
Puis ajoutez une nouvelle fonction pour ce bouton, à la fin :
editBtn : Player -> Html Msg
editBtn player =
button
[ class "btn regular"
, onClick (ShowPlayer player.id)
]
[ i [ class "fa fa-pencil mr1" ] [], text "Edit" ]
Ici, on envoie ShowPlayer
avec l'id du Joueur que l'on souhaite éditer.
Enfin, modifiez playerRow
pour inclure le bouton :
playerRow : Player -> Html Msg
playerRow player =
tr []
[ td [] [ text (toString player.id) ]
, td [] [ text player.name ]
, td [] [ text (toString player.level) ]
, td []
[ editBtn player ]
]
Édition de Joueur
Ajoutons le bouton de navigation à la vue d'édition. Dans /src/Players/Edit.elm, ajoutez un import :
import Html.Events exposing (onClick)
Ajoutez une nouvelle fonction à la fin pour le bouton List
:
listBtn : Html Msg
listBtn =
button
[ class "btn regular"
, onClick ShowPlayers
]
[ i [ class "fa fa-chevron-left mr1" ] [], text "List" ]
On envoie le message ShowPlayers
quand le bouton est cliqué.
Enfin, ajoutez ce bouton à la liste, en changeant la fonction nav
:
nav : Player -> Html Msg
nav model =
div [ class "clearfix mb2 white bg-black p1" ]
[ listBtn ]
Mise à jour de Joueurs
Pour finir, src/Players/Update.elm doit désormais traiter les nouveaux messages.
import Navigation
Ajoutez deux nouvelles branches au case
:
update : Msg -> List Player -> ( List Player, Cmd Msg )
update message players =
case message of
...
ShowPlayers ->
( players, Navigation.newUrl "#players" )
ShowPlayer id ->
( players, Navigation.newUrl ("#players/" ++ id) )
Navigation.newUrl
renvoie une commande. Quand cette commande sera exécutée par Elm, l'adresse du navigateur changera.
Testez !
Ouvrez http://localhost:3000/#players
. Vous devriez voir un bouton Edit
. Si vous le cliquez, l'adresse devrait changer et vous amener à la vue d'édition.
À ce stade, le code de votre application devrait ressembler à ça : https://github.com/sporto/elm-tutorial-app/tree/018-07-navigation.