adds conflicts information on claims
This commit is contained in:
66
src/Api.elm
66
src/Api.elm
@@ -139,14 +139,16 @@ type alias Claim =
|
|||||||
{ id : Int
|
{ id : Int
|
||||||
, player_id : Int
|
, player_id : Int
|
||||||
, loot_id : Int
|
, loot_id : Int
|
||||||
|
, conflicts : Bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
claimDecoder =
|
claimDecoder =
|
||||||
D.map3 Claim
|
D.map4 Claim
|
||||||
(D.field "id" int)
|
(D.field "id" int)
|
||||||
(D.field "player_id" int)
|
(D.field "player_id" int)
|
||||||
(D.field "loot_id" int)
|
(D.field "loot_id" int)
|
||||||
|
(D.succeed False)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -432,20 +434,64 @@ getLoot id =
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
getClaims id =
|
|
||||||
let
|
|
||||||
path =
|
|
||||||
if id == 0 then
|
|
||||||
"api/claims"
|
|
||||||
|
|
||||||
else
|
-- Updates the conflicts field on every claims
|
||||||
"api/players/" ++ String.fromInt id ++ "/claims"
|
|
||||||
in
|
|
||||||
|
groupByLoot : List Claims -> Claims -> List Claims
|
||||||
|
groupByLoot acc claims =
|
||||||
|
case claims of
|
||||||
|
last :: [] ->
|
||||||
|
groupByLoot ([ last ] :: acc) []
|
||||||
|
|
||||||
|
first :: rest ->
|
||||||
|
let
|
||||||
|
( newGroup, left ) =
|
||||||
|
List.partition (\c -> c.loot_id == first.loot_id) rest
|
||||||
|
in
|
||||||
|
groupByLoot ((first :: newGroup) :: acc) left
|
||||||
|
|
||||||
|
[] ->
|
||||||
|
acc
|
||||||
|
|
||||||
|
|
||||||
|
updateConflicts : Claims -> Claims
|
||||||
|
updateConflicts claims =
|
||||||
|
groupByLoot [] claims
|
||||||
|
|> List.concatMap
|
||||||
|
(\group ->
|
||||||
|
let
|
||||||
|
_ =
|
||||||
|
Debug.log "updating group" group
|
||||||
|
in
|
||||||
|
case group of
|
||||||
|
[] ->
|
||||||
|
[]
|
||||||
|
|
||||||
|
[ c ] ->
|
||||||
|
[ { c | conflicts = False } ]
|
||||||
|
|
||||||
|
xs ->
|
||||||
|
List.map (\c -> { c | conflicts = True }) xs
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
parseClaims : Int -> Claims -> Task x Claims
|
||||||
|
parseClaims id claims =
|
||||||
|
-- Filter claims relevant to player
|
||||||
|
Task.succeed <|
|
||||||
|
List.filter (\claim -> id == 0 || claim.player_id == id) <|
|
||||||
|
updateConflicts claims
|
||||||
|
|
||||||
|
|
||||||
|
getClaims : Int -> Task Http.Error Claims
|
||||||
|
getClaims id =
|
||||||
send
|
send
|
||||||
{ method = "GET"
|
{ method = "GET"
|
||||||
, path = path
|
, path = "api/claims"
|
||||||
, decoder = valueDecoder (D.list claimDecoder)
|
, decoder = valueDecoder (D.list claimDecoder)
|
||||||
}
|
}
|
||||||
|
|> Task.andThen (parseClaims id)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -94,3 +94,7 @@ levelItem =
|
|||||||
|
|
||||||
isInfo =
|
isInfo =
|
||||||
class "is-info"
|
class "is-info"
|
||||||
|
|
||||||
|
|
||||||
|
isError =
|
||||||
|
class "is-error"
|
||||||
|
|||||||
@@ -167,22 +167,38 @@ update msg model =
|
|||||||
IntoViewWithClaims claims ->
|
IntoViewWithClaims claims ->
|
||||||
let
|
let
|
||||||
isClaimed item =
|
isClaimed item =
|
||||||
List.any (\claim_ -> claim_.loot_id == item.id) claims
|
case List.filter (\c -> c.loot_id == item.id) claims of
|
||||||
|
[ c ] ->
|
||||||
|
Just c
|
||||||
|
|
||||||
|
[] ->
|
||||||
|
Nothing
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
Debug.log "Warning ! Duplicated claim found" Nothing
|
||||||
|
|
||||||
renderItem item =
|
renderItem item =
|
||||||
[ p [ B.levelItem ] [ text item.name ]
|
[ p [ B.levelItem ] [ text item.name ]
|
||||||
, if isClaimed item then
|
, case isClaimed item of
|
||||||
B.tag [ B.levelItem, B.isInfo ]
|
Just c ->
|
||||||
[ B.icon
|
B.tag
|
||||||
{ icon = "fas fa-praying-hands"
|
[ B.levelItem
|
||||||
, size = Just "is-small"
|
, if c.conflicts then
|
||||||
, ratio = Just "fa-1x"
|
B.isError
|
||||||
}
|
|
||||||
, text "time left..."
|
|
||||||
]
|
|
||||||
|
|
||||||
else
|
else
|
||||||
text ""
|
B.isInfo
|
||||||
|
]
|
||||||
|
[ B.icon
|
||||||
|
{ icon = "fas fa-praying-hands"
|
||||||
|
, size = Just "is-small"
|
||||||
|
, ratio = Just "fa-1x"
|
||||||
|
}
|
||||||
|
, p [] [ text "en attente..." ]
|
||||||
|
]
|
||||||
|
|
||||||
|
Nothing ->
|
||||||
|
text ""
|
||||||
]
|
]
|
||||||
in
|
in
|
||||||
( View <| Table.renderRowLevel renderItem (\_ -> []), Cmd.none )
|
( View <| Table.renderRowLevel renderItem (\_ -> []), Cmd.none )
|
||||||
|
|||||||
Reference in New Issue
Block a user