docspell/modules/webapp/src/main/elm/Data/Items.elm
2020-06-06 11:05:15 +02:00

68 lines
1.5 KiB
Elm

module Data.Items exposing
( concat
, first
, length
)
import Api.Model.ItemLight exposing (ItemLight)
import Api.Model.ItemLightGroup exposing (ItemLightGroup)
import Api.Model.ItemLightList exposing (ItemLightList)
import Util.List
concat : ItemLightList -> ItemLightList -> ItemLightList
concat l0 l1 =
let
lastOld =
lastGroup l0
firstNew =
List.head l1.groups
in
case ( lastOld, firstNew ) of
( Nothing, Nothing ) ->
l0
( Just _, Nothing ) ->
l0
( Nothing, Just _ ) ->
l1
( Just o, Just n ) ->
if o.name == n.name then
let
ng =
ItemLightGroup o.name (o.items ++ n.items)
prev =
Util.List.dropRight 1 l0.groups
suff =
List.drop 1 l1.groups
in
ItemLightList (prev ++ [ ng ] ++ suff)
else
ItemLightList (l0.groups ++ l1.groups)
first : ItemLightList -> Maybe ItemLight
first list =
List.head list.groups
|> Maybe.map .items
|> Maybe.withDefault []
|> List.head
length : ItemLightList -> Int
length list =
List.map (\g -> List.length g.items) list.groups
|> List.sum
lastGroup : ItemLightList -> Maybe ItemLightGroup
lastGroup list =
List.reverse list.groups
|> List.head