From f5a7875d605010540ec7c9c8f2a3ff4ed0702597 Mon Sep 17 00:00:00 2001 From: Jasper Van der Jeugt Date: Thu, 30 Jul 2020 16:16:52 +0200 Subject: Allow people to change their name --- client/src/Client.elm | 62 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 4 deletions(-) (limited to 'client/src/Client.elm') diff --git a/client/src/Client.elm b/client/src/Client.elm index 442f089..e5afa74 100644 --- a/client/src/Client.elm +++ b/client/src/Client.elm @@ -2,7 +2,10 @@ port module Client exposing (main) import Browser import Html exposing (Html) +import Html.Attributes +import Html.Events import Json.Decode +import Json.Encode import Messages exposing (GameView) import Url exposing (Url) @@ -13,6 +16,10 @@ type Msg = Ignore | Send | WebSocketIn String + -- Name changes + | StartChangingName + | ChangeName String + | SubmitNewName type Model = Error String @@ -21,6 +28,7 @@ type Model } | Game { view : GameView + , changingName : Maybe String } parseRoomId : Url -> Result String String @@ -39,16 +47,38 @@ view model = case model of [Html.text <| "Connecting to room " ++ state.roomId ++ "..."] ] Game game -> - [ Html.h1 [] [Html.text "Players"] + [ Html.h1 [] [Html.text "Opponents"] , Html.ul [] <| List.map (\p -> Html.li [] [Html.text p]) - game.view.players - ] + game.view.opponents + , Html.h1 [] [Html.text "You"] + ] ++ + (case game.changingName of + Nothing -> + [ Html.p [] + [Html.text game.view.playerName] + , Html.button + [Html.Events.onClick StartChangingName] + [Html.text "change"] + ] + Just name -> + [ Html.input + [ Html.Attributes.value name + , Html.Events.onInput ChangeName + ] + [] + , Html.button + [Html.Events.onClick SubmitNewName] + [Html.text "change"] + ]) subscriptions : Model -> Sub Msg subscriptions model = webSocketIn WebSocketIn +send : Messages.ClientMessage -> Cmd Msg +send = webSocketOut << Json.Encode.encode 0 << Messages.jsonEncClientMessage + update : Msg -> Model -> (Model, Cmd Msg) update msg model = case msg of Ignore -> (model, Cmd.none) @@ -60,7 +90,31 @@ update msg model = case msg of Debug.log ("Welcome " ++ String.fromInt playerId) (model, Cmd.none) Ok Messages.Bye -> Debug.log "Bye" (model, Cmd.none) Ok (Messages.SyncGameView gameView) -> - (Game {view = gameView}, Cmd.none) + case model of + Game game -> (Game {game | view = gameView}, Cmd.none) + _ -> + ( Game + { view = gameView + , changingName = Nothing + } + , Cmd.none + ) + + StartChangingName -> case model of + Game game -> + (Game {game | changingName = Just game.view.playerName}, Cmd.none) + _ -> (model, Cmd.none) + ChangeName name -> case model of + Game game -> (Game {game | changingName = Just name}, Cmd.none) + _ -> (model, Cmd.none) + SubmitNewName -> case model of + Game game -> + ( Game {game | changingName = Nothing} + , case game.changingName of + Nothing -> Cmd.none + Just name -> send <| Messages.ChangeName name + ) + _ -> (model, Cmd.none) main : Program () Model Msg main = Browser.application -- cgit v1.2.3