restores Admin sessions
This commit is contained in:
@@ -16,6 +16,7 @@ module Api exposing
|
||||
, getLoot
|
||||
, printError
|
||||
, replaceShopItems
|
||||
, send
|
||||
)
|
||||
|
||||
import Api.Player exposing (Player, Wealth)
|
||||
|
||||
@@ -90,7 +90,7 @@ view page =
|
||||
Session.Player data ->
|
||||
data.player.name
|
||||
|
||||
Session.Admin ->
|
||||
Session.Admin _ ->
|
||||
"Administration"
|
||||
|
||||
Nothing ->
|
||||
@@ -109,7 +109,7 @@ view page =
|
||||
text ""
|
||||
]
|
||||
|
||||
Session.Admin ->
|
||||
Session.Admin _ ->
|
||||
[ navLink "fas fa-store-alt" Route.Merchant page ]
|
||||
|
||||
Nothing ->
|
||||
@@ -173,7 +173,7 @@ viewSessionBar session controls =
|
||||
)
|
||||
|> List.map (Html.map Wealth)
|
||||
|
||||
Just Session.Admin ->
|
||||
Just (Session.Admin _) ->
|
||||
[ text "Admin" ]
|
||||
|
||||
notifications =
|
||||
@@ -471,7 +471,7 @@ applyUpdate u user =
|
||||
Api.ClaimRemoved claim ->
|
||||
Session.Player { data | claims = List.filter (\c -> c.id /= claim.id) data.claims }
|
||||
|
||||
Session.Admin ->
|
||||
Session.Admin _ ->
|
||||
user
|
||||
|
||||
|
||||
|
||||
@@ -211,6 +211,8 @@ updateChest toMsg toChest ( model, cmd ) =
|
||||
|
||||
|
||||
|
||||
-- Helpers
|
||||
--
|
||||
-- Api actions
|
||||
--
|
||||
|
||||
|
||||
@@ -43,15 +43,15 @@ type PlayerConfig
|
||||
|
||||
|
||||
type AdminConfig
|
||||
= AdminConfig Session (List Player) NewPlayerForm
|
||||
= AdminConfig Session (List Player) (Maybe NewPlayerForm)
|
||||
|
||||
|
||||
init : Session -> ( Model, Cmd Msg )
|
||||
init session =
|
||||
case Session.user session of
|
||||
Session.Admin ->
|
||||
( Admin <| AdminConfig session [] initForm
|
||||
, Player.list (AdminViewer << GotPlayers)
|
||||
Session.Admin data ->
|
||||
( Admin <| AdminConfig session data.players Nothing
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
Session.Player data ->
|
||||
@@ -69,10 +69,6 @@ init session =
|
||||
)
|
||||
|
||||
|
||||
initForm =
|
||||
NewPlayerForm "" 0.0
|
||||
|
||||
|
||||
modeButton t msg =
|
||||
button [ class "button", onClick msg ] [ text t ]
|
||||
|
||||
@@ -84,6 +80,7 @@ buttons bs =
|
||||
view : Model -> ( Html Msg, List (Html Msg) )
|
||||
view model =
|
||||
case model of
|
||||
-- PLAYER DASHBOARD
|
||||
Player (PlayerConfig session chest) ->
|
||||
case Session.user session of
|
||||
Session.Player data ->
|
||||
@@ -124,21 +121,27 @@ view model =
|
||||
in
|
||||
( text "", [] )
|
||||
|
||||
Admin (AdminConfig session players newPlayer) ->
|
||||
( text ""
|
||||
, [ div [ class "container" ]
|
||||
[ p [ class "title" ] [ text "Administration" ]
|
||||
, div [ class "section" ]
|
||||
[ table [ class "table is-fullwidth is-striped" ]
|
||||
[ thead [ class "table-header" ]
|
||||
[ th [] [ text "Joueurs" ] ]
|
||||
, tbody [] <|
|
||||
editNewPlayer newPlayer
|
||||
:: List.map viewPlayer players
|
||||
]
|
||||
-- ADMIN DASHBOARD
|
||||
Admin (AdminConfig session players playerForm) ->
|
||||
( case playerForm of
|
||||
Nothing ->
|
||||
modeButton "Ajouter un joueur" (AdminViewer EditPlayer)
|
||||
|
||||
Just _ ->
|
||||
buttons [ modeButton "Ok" ConfirmNewPlayer, modeButton "Annuler" CloseEdit ]
|
||||
|> Html.map AdminViewer
|
||||
, [ div [ class "section" ]
|
||||
[ case playerForm of
|
||||
Nothing ->
|
||||
text ""
|
||||
|
||||
Just form ->
|
||||
editNewPlayer form
|
||||
, table [ class "table is-fullwidth is-striped" ]
|
||||
[ thead [ class "table-header" ]
|
||||
[ th [] [ text "Joueurs" ] ]
|
||||
, tbody [] <| List.map viewPlayer players
|
||||
]
|
||||
, div [ class "section" ]
|
||||
[ p [] [ text "Campagnes" ] ]
|
||||
]
|
||||
]
|
||||
)
|
||||
@@ -151,28 +154,28 @@ viewPlayer player =
|
||||
|
||||
editNewPlayer : NewPlayerForm -> Html Msg
|
||||
editNewPlayer newPlayer =
|
||||
tr []
|
||||
[ td []
|
||||
[ div [ class "field is-horizontal" ]
|
||||
[ div [ class "field-body" ]
|
||||
[ div [ class "field" ]
|
||||
[ input
|
||||
[ class "input"
|
||||
, type_ "text"
|
||||
, value newPlayer.name
|
||||
, onInput <| NameChanged
|
||||
]
|
||||
[]
|
||||
div [ class "box" ]
|
||||
[ div [ class "field is-horizontal" ]
|
||||
[ div [ class "field-body" ]
|
||||
[ div [ class "field" ]
|
||||
[ label [ class "label" ] [ text "Nom" ]
|
||||
, input
|
||||
[ class "input"
|
||||
, type_ "text"
|
||||
, value newPlayer.name
|
||||
, onInput <| NameChanged
|
||||
]
|
||||
, div [ class "field" ]
|
||||
[ input
|
||||
[ class "input"
|
||||
, type_ "text"
|
||||
, value <| String.fromFloat newPlayer.wealth
|
||||
, onInput <| WealthChanged
|
||||
]
|
||||
[]
|
||||
[]
|
||||
]
|
||||
, div [ class "field" ]
|
||||
[ label [ class "label" ] [ text "Argent de départ" ]
|
||||
, input
|
||||
[ class "input"
|
||||
, type_ "text"
|
||||
, value <| String.fromFloat newPlayer.wealth
|
||||
, onInput <| WealthChanged
|
||||
]
|
||||
[]
|
||||
]
|
||||
]
|
||||
]
|
||||
@@ -187,7 +190,9 @@ type Msg
|
||||
|
||||
|
||||
type AdminMsg
|
||||
= GotPlayers (List Player)
|
||||
= EditPlayer
|
||||
| CloseEdit
|
||||
| ConfirmNewPlayer
|
||||
| GotFormMsg FormMsg
|
||||
|
||||
|
||||
@@ -204,16 +209,25 @@ type PlayerMsg
|
||||
update msg model =
|
||||
case ( msg, model ) of
|
||||
( AdminViewer aMsg, Admin (AdminConfig session players form) ) ->
|
||||
(case aMsg of
|
||||
GotPlayers newPlayers ->
|
||||
( Admin (AdminConfig session newPlayers form)
|
||||
(case ( aMsg, form ) of
|
||||
( EditPlayer, Nothing ) ->
|
||||
( Admin (AdminConfig session players (Just <| NewPlayerForm "" 0.0))
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
GotFormMsg subMsg ->
|
||||
( Admin (AdminConfig session players (updateForm subMsg form))
|
||||
( GotFormMsg subMsg, Just f ) ->
|
||||
( Admin (AdminConfig session players <| Just (updateForm subMsg f))
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
( ConfirmNewPlayer, Just f ) ->
|
||||
( model, Cmd.none )
|
||||
|
||||
( CloseEdit, _ ) ->
|
||||
( Admin (AdminConfig session players Nothing), Cmd.none )
|
||||
|
||||
_ ->
|
||||
( model, Cmd.none )
|
||||
)
|
||||
|> Tuple.mapSecond (Cmd.map AdminViewer)
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ getClaimsFromSession session =
|
||||
else
|
||||
[]
|
||||
|
||||
Session.Admin ->
|
||||
Session.Admin _ ->
|
||||
[]
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ view model =
|
||||
let
|
||||
( isPlayer, isGroup ) =
|
||||
case Session.user model.session of
|
||||
Session.Admin ->
|
||||
Session.Admin _ ->
|
||||
( False, False )
|
||||
|
||||
Session.Player data ->
|
||||
|
||||
@@ -6,7 +6,7 @@ import Html exposing (..)
|
||||
import Html.Attributes exposing (..)
|
||||
import Html.Events exposing (..)
|
||||
import Page.Chest as Chest exposing (Chest)
|
||||
import Page.Chest.Selection as Selection
|
||||
import Page.Chest.NewFromInventory as NewChest
|
||||
import Session exposing (Session, getSession)
|
||||
import Set exposing (Set)
|
||||
import Table
|
||||
@@ -62,7 +62,7 @@ view model =
|
||||
controls =
|
||||
Html.map Internal <|
|
||||
case ( model.chest, Session.user model.session ) of
|
||||
( Chest.View _, Session.Admin ) ->
|
||||
( Chest.View _, Session.Admin _ ) ->
|
||||
btn "Remplacer" (GotChestMsg Chest.new)
|
||||
|
||||
( Chest.View _, Session.Player _ ) ->
|
||||
@@ -71,7 +71,7 @@ view model =
|
||||
( Chest.Buy _, Session.Player _ ) ->
|
||||
buttons [ btn "Ok" ConfirmBuy, btn "Annuler" (GotChestMsg Chest.show) ]
|
||||
|
||||
( Chest.New _, Session.Admin ) ->
|
||||
( Chest.New _, Session.Admin _ ) ->
|
||||
buttons [ btn "Ok" ConfirmRefresh, btn "Annuler" (GotChestMsg Chest.show) ]
|
||||
|
||||
_ ->
|
||||
@@ -148,10 +148,15 @@ update msg model =
|
||||
|
||||
ConfirmRefresh ->
|
||||
case Session.user (getSession model) of
|
||||
Session.Admin ->
|
||||
Session.Admin _ ->
|
||||
let
|
||||
loot =
|
||||
[]
|
||||
case model.chest of
|
||||
Chest.New chest ->
|
||||
NewChest.allLoot chest
|
||||
|
||||
_ ->
|
||||
[]
|
||||
in
|
||||
( model, Api.replaceShopItems GotRefreshResult loot )
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ type User
|
||||
, loot : Loot
|
||||
, claims : Claims
|
||||
}
|
||||
| Admin
|
||||
| Admin { players : List Player }
|
||||
|
||||
|
||||
type alias Notifications =
|
||||
@@ -30,22 +30,16 @@ type Session
|
||||
init : (Result String Session -> msg) -> Nav.Key -> Cmd msg
|
||||
init toMsg navKey =
|
||||
let
|
||||
toSession : Result String ( Player, Loot, Claims ) -> msg
|
||||
toSession : Result String User -> msg
|
||||
toSession result =
|
||||
case result of
|
||||
Ok ( player, loot, claims ) ->
|
||||
Ok logged ->
|
||||
toMsg <|
|
||||
Ok
|
||||
(Session
|
||||
navKey
|
||||
( Nothing, Nothing )
|
||||
(Player
|
||||
{ player = player
|
||||
, wealth = Wealth.init
|
||||
, loot = loot
|
||||
, claims = claims
|
||||
}
|
||||
)
|
||||
logged
|
||||
)
|
||||
|
||||
Err e ->
|
||||
@@ -54,24 +48,41 @@ init toMsg navKey =
|
||||
Task.attempt toSession initFullSession
|
||||
|
||||
|
||||
initFullSession : Task String ( Player, Loot, Claims )
|
||||
initFullSession : Task String User
|
||||
initFullSession =
|
||||
Api.fetchSession
|
||||
let
|
||||
userDecoder =
|
||||
D.oneOf
|
||||
[ Player.playerDecoder |> D.andThen (\p -> D.succeed <| Player { player = p, wealth = Wealth.init, loot = [], claims = [] })
|
||||
, D.list Player.playerDecoder |> D.andThen (\ps -> D.succeed <| Admin { players = ps })
|
||||
]
|
||||
in
|
||||
Api.send { method = "GET", path = "session", decoder = userDecoder }
|
||||
|> Task.andThen wrapLoot
|
||||
|> Task.andThen wrapClaims
|
||||
|> Task.mapError Api.printError
|
||||
|
||||
|
||||
wrapLoot : Player -> Task Http.Error ( Player, Loot )
|
||||
wrapLoot player =
|
||||
Api.getLoot player.id
|
||||
|> Task.andThen (\loot -> Task.succeed ( player, loot ))
|
||||
wrapLoot : User -> Task Http.Error User
|
||||
wrapLoot logged =
|
||||
case logged of
|
||||
Player data ->
|
||||
Api.getLoot data.player.id
|
||||
|> Task.andThen (\loot -> Task.succeed (Player { data | loot = loot }))
|
||||
|
||||
Admin _ ->
|
||||
Task.succeed logged
|
||||
|
||||
|
||||
wrapClaims : ( Player, Loot ) -> Task Http.Error ( Player, Loot, Claims )
|
||||
wrapClaims ( player, loot ) =
|
||||
Api.getClaims player.id
|
||||
|> Task.andThen (\claims -> Task.succeed ( player, loot, claims ))
|
||||
wrapClaims : User -> Task Http.Error User
|
||||
wrapClaims logged =
|
||||
case logged of
|
||||
Player data ->
|
||||
Api.getClaims data.player.id
|
||||
|> Task.andThen (\claims -> Task.succeed (Player { data | claims = claims }))
|
||||
|
||||
Admin _ ->
|
||||
Task.succeed logged
|
||||
|
||||
|
||||
getSession : { r | session : Session } -> Session
|
||||
@@ -112,7 +123,7 @@ wealth session =
|
||||
Player data ->
|
||||
Just data.wealth
|
||||
|
||||
Admin ->
|
||||
Admin _ ->
|
||||
Nothing
|
||||
|
||||
|
||||
@@ -125,22 +136,22 @@ setWealth wealthModel session =
|
||||
Player data ->
|
||||
Session navKey notifications (Player { data | wealth = wealthModel })
|
||||
|
||||
Admin ->
|
||||
Session navKey notifications Admin
|
||||
Admin _ ->
|
||||
session
|
||||
|
||||
|
||||
updateWealth : Wealth.Model -> Session -> Session
|
||||
updateWealth newWealthModel model =
|
||||
updateWealth newWealthModel session =
|
||||
let
|
||||
(Session navKey notifications loggedUser) =
|
||||
model
|
||||
session
|
||||
in
|
||||
case loggedUser of
|
||||
Player data ->
|
||||
Session navKey notifications (Player { data | wealth = newWealthModel })
|
||||
|
||||
Admin ->
|
||||
Session navKey notifications Admin
|
||||
Admin _ ->
|
||||
session
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user