mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-21 18:08:25 +00:00
Add a load-more button to item list
This commit is contained in:
67
modules/webapp/src/main/elm/Data/Items.elm
Normal file
67
modules/webapp/src/main/elm/Data/Items.elm
Normal file
@ -0,0 +1,67 @@
|
||||
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
|
Reference in New Issue
Block a user