Replace changed item cards

This commit is contained in:
Eike Kettner
2020-10-25 22:21:39 +01:00
parent 458fa7edd9
commit 5735a47199
3 changed files with 115 additions and 5 deletions

View File

@ -3,11 +3,13 @@ module Data.Items exposing
, first
, idSet
, length
, replaceIn
)
import Api.Model.ItemLight exposing (ItemLight)
import Api.Model.ItemLightGroup exposing (ItemLightGroup)
import Api.Model.ItemLightList exposing (ItemLightList)
import Dict exposing (Dict)
import Set exposing (Set)
import Util.List
@ -79,3 +81,42 @@ idSetGroup : ItemLightGroup -> Set String
idSetGroup group =
List.map .id group.items
|> Set.fromList
replaceIn : ItemLightList -> ItemLightList -> ItemLightList
replaceIn origin replacements =
let
newItems =
mkItemDict replacements
replaceItem item =
case Dict.get item.id newItems of
Just ni ->
ni
Nothing ->
item
replaceGroup g =
List.map replaceItem g.items
|> ItemLightGroup g.name
in
List.map replaceGroup origin.groups
|> ItemLightList
--- Helper
mkItemDict : ItemLightList -> Dict String ItemLight
mkItemDict list =
let
insertItems : Dict String ItemLight -> List ItemLight -> Dict String ItemLight
insertItems dict items =
List.foldl (\i -> \d -> Dict.insert i.id i d) dict items
insertGroup dict groups =
List.foldl (\g -> \d -> insertItems d g.items) dict groups
in
insertGroup Dict.empty list.groups