diff --git a/src/Api.elm b/src/Api.elm index 8705f98..ed96237 100644 --- a/src/Api.elm +++ b/src/Api.elm @@ -420,6 +420,32 @@ replaceShopItems toMsg loot = } +fetchSession toMsg = + let + toSession : Result Http.Error String -> msg + toSession response = + case Debug.log "got session:" response of + Ok value -> + if value == "admin" then + toMsg Nothing + + else + case value of + Ok player -> + toMsg <| Just player + + Err _ -> + toMsg Nothing + + Err _ -> + toMsg Nothing + in + Http.get + { url = "http://localhost:8088/session" + , expect = Http.expectJson toSession (valueDecoder Api.Player.playerDecoder) + } + + -- UTILS diff --git a/src/Api/Player.elm b/src/Api/Player.elm index 710b99a..c412b4e 100644 --- a/src/Api/Player.elm +++ b/src/Api/Player.elm @@ -1,4 +1,4 @@ -module Api.Player exposing (Player, Wealth, blankPlayer, get, list, wealthDecoder) +module Api.Player exposing (Player, Wealth, blankPlayer, get, list, playerDecoder, wealthDecoder) import Http import Json.Decode as D exposing (Decoder, int, string) diff --git a/src/Page.elm b/src/Page.elm index f6b3fd6..fb4f745 100644 --- a/src/Page.elm +++ b/src/Page.elm @@ -5,6 +5,7 @@ import Html.Attributes exposing (..) import Html.Events exposing (..) import Page.Admin as Admin import Page.Chest as Chest +import Page.Chest.Wealth as Wealth import Page.Shop as Shop import Session exposing (Session) import Utils exposing (renderIcon) @@ -83,8 +84,8 @@ view page = case maybeSession of Just session -> case Session.user session of - Session.Player id -> - String.fromInt id + Session.Player player _ -> + player.name Session.Admin -> "Administration" @@ -96,13 +97,13 @@ view page = case maybeSession of Just session -> case Session.user session of - Session.Player id -> + Session.Player player _ -> let linkWithGem = navLink "fas fa-gem" in [ navLink "fas fa-store-alt" "Marchand" "/marchand" - , if id == 0 then + , if player.id == 0 then linkWithGem "Nouveau loot" "/nouveau-tresor" else @@ -117,43 +118,52 @@ view page = in ( title , { title = navbarTitle, links = navbarLinks } - , viewSessionBar maybeSession controls - :: content + , [ div [ class "container" ] <| + viewSessionBar maybeSession [ controls ] + :: content + ] ) viewSessionBar maybeSession controls = - controls + let + user = + case Maybe.map Session.user maybeSession of + Nothing -> + [ text "" ] + + Just (Session.Player player wealth) -> + Wealth.view player.wealth wealth + ++ (if player.debt > 0 then + [ div [ class "level-item" ] + [ p [ class "heading is-size-4 has-text-danger" ] + [ text ("Dette : " ++ String.fromInt player.debt ++ "po") ] + ] + ] + + else + [] + ) + |> List.map (Html.map Wealth) + + Just Session.Admin -> + [ text "Admin" ] + in + section [ class "hero is-dark is-bold" ] + [ div [ class "hero-body" ] + [ renderLevel user controls ] + ] + + +renderLevel left right = + div [ class "level container is-mobile" ] + [ div [ class "level-left" ] left + , div [ class "level-right" ] right + ] -- PLAYER BAR -{- - viewPlayerBar : Player -> List (Html Msg) -> Wealth.Model -> Html Msg - viewPlayerBar player actionControls wealthModel = - section [ class "hero is-dark is-bold" ] - [ div [ class "hero-body" ] - [ div [ class "level container is-mobile" ] - [ div [ class "level-left" ] - (Wealth.view player.wealth wealthModel - ++ (if player.debt > 0 then - [ div [ class "level-item" ] - [ p [ class "heading is-size-4 has-text-danger" ] - [ text ("Dette : " ++ String.fromInt player.debt ++ "po") ] - ] - ] - - else - [] - ) - ) - |> Html.map WealthMsg - , div [ class "level-right" ] actionControls - ] - ] - ] - --} navLink icon linkText url = @@ -172,6 +182,7 @@ type PageMsg = GotChestMsg Chest.Msg | GotAdminMsg Admin.Msg | GotShopMsg Shop.Msg + | Wealth Wealth.Msg update msg page = @@ -204,7 +215,7 @@ updatePage toPage toMsg ( subModel, subMsg ) = gotoHome session = case Session.user session of - Session.Player _ -> + Session.Player _ _ -> Chest.init session |> updatePage Chest GotChestMsg diff --git a/src/Page/Chest.elm b/src/Page/Chest.elm index fa3d9fd..7a1a57c 100644 --- a/src/Page/Chest.elm +++ b/src/Page/Chest.elm @@ -121,8 +121,8 @@ init session = playerId = case Session.user session of - Session.Player id -> - id + Session.Player player _ -> + player.id Session.Admin -> 0 @@ -148,9 +148,7 @@ init session = Route.PlayerLoot Nothing "" - (Wealth.init - blankPlayer.wealth - ) + Wealth.init [] , Cmd.batch [ Api.Player.get GotPlayer playerId diff --git a/src/Page/Chest/Wealth.elm b/src/Page/Chest/Wealth.elm index e9a85ba..9dd73ea 100644 --- a/src/Page/Chest/Wealth.elm +++ b/src/Page/Chest/Wealth.elm @@ -11,7 +11,7 @@ type Model | Edit String -init wealth = +init = View diff --git a/src/Page/Shop.elm b/src/Page/Shop.elm index 882991a..641582d 100644 --- a/src/Page/Shop.elm +++ b/src/Page/Shop.elm @@ -47,7 +47,7 @@ view model = Session.Admin -> button [ class "button", onClick IntoRefresh ] [ text "Remplacer" ] - Session.Player _ -> + Session.Player _ _ -> button [ class "button" ] [ text "Acheter" ] , [ Table.view Table.name loot ] ) diff --git a/src/Session.elm b/src/Session.elm index 1c35c92..87bed6f 100644 --- a/src/Session.elm +++ b/src/Session.elm @@ -1,12 +1,15 @@ module Session exposing (Session, User(..), getSession, init, key, user) +import Api exposing (valueDecoder) +import Api.Player as Player exposing (Player) import Browser.Navigation as Nav import Http import Json.Decode as D +import Page.Chest.Wealth as Wealth type User - = Player Int + = Player Player Wealth.Model | Admin @@ -17,29 +20,16 @@ type Session init : (Maybe Session -> msg) -> Nav.Key -> Cmd msg init toMsg navKey = let - toSession : Result Http.Error String -> msg + toSession : Maybe Player -> msg toSession response = - case Debug.log "got session:" response of - Ok value -> - if value == "admin" then - toMsg <| Just (Session navKey Admin) + case response of + Just player -> + toMsg <| Just (Session navKey (Player player Wealth.init)) - else - case String.toInt value of - Just id -> - toMsg <| Just (Session navKey (Player id)) - - Nothing -> - toMsg - Nothing - - Err _ -> + Nothing -> toMsg Nothing in - Http.get - { url = "http://localhost:8088/session" - , expect = Http.expectJson toSession D.string - } + Api.fetchSession toSession getSession : { r | session : Session } -> Session