64 lines
1.1 KiB
Elm
64 lines
1.1 KiB
Elm
module PaginatedList exposing (PaginatedList, fromList, map, mapPage, page, total, values)
|
|
|
|
import Html exposing (Html, a, li, text, ul)
|
|
import Html.Attributes exposing (class, classList, href)
|
|
import Html.Events exposing (onClick)
|
|
|
|
|
|
|
|
-- TYPES
|
|
|
|
|
|
type PaginatedList a
|
|
= PaginatedList
|
|
{ values : List a
|
|
, total : Int
|
|
, page : Int
|
|
}
|
|
|
|
|
|
|
|
-- INFO
|
|
|
|
|
|
values : PaginatedList a -> List a
|
|
values (PaginatedList info) =
|
|
info.values
|
|
|
|
|
|
total : PaginatedList a -> Int
|
|
total (PaginatedList info) =
|
|
info.total
|
|
|
|
|
|
page : PaginatedList a -> Int
|
|
page (PaginatedList info) =
|
|
info.page
|
|
|
|
|
|
|
|
-- CREATE
|
|
|
|
|
|
fromList : Int -> List a -> PaginatedList a
|
|
fromList totalCount list =
|
|
PaginatedList { values = list, total = totalCount, page = 1 }
|
|
|
|
|
|
|
|
-- TRANSFORM
|
|
|
|
|
|
map : (a -> a) -> PaginatedList a -> PaginatedList a
|
|
map transform (PaginatedList info) =
|
|
PaginatedList { info | values = List.map transform info.values }
|
|
|
|
|
|
mapPage : (Int -> Int) -> PaginatedList a -> PaginatedList a
|
|
mapPage transform (PaginatedList info) =
|
|
PaginatedList { info | page = transform info.page }
|
|
|
|
|
|
|
|
-- VIEW
|