mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-23 10:58:26 +00:00
Replace changed item cards
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user