mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-03-05 16:13:26 +00:00
68 lines
1.5 KiB
Elm
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
|