module LoggedIn.Home.View.Paging exposing ( view ) import Color exposing (Color) import FontAwesome import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (..) import LoggedData exposing (LoggedData) import Model.Payment as Payment exposing (Payments, perPage) showedPages : Int showedPages = 5 view : Int -> Int -> msg -> (Int -> msg) -> Html msg view currentPage payments noOp pageMsg = let maxPage = ceiling (toFloat payments / toFloat perPage) pages = truncatePages currentPage (List.range 1 maxPage) in if maxPage <= 1 then text "" else div [ class "pages" ] ( [ firstPage currentPage pageMsg , previousPage currentPage noOp pageMsg ] ++ ( List.map (paymentsPage currentPage noOp pageMsg) pages) ++ [ nextPage currentPage maxPage noOp pageMsg , lastPage currentPage maxPage pageMsg ] ) truncatePages : Int -> List Int -> List Int truncatePages currentPage pages = let totalPages = List.length pages showedLeftPages = ceiling ((toFloat showedPages - 1) / 2) showedRightPages = floor ((toFloat showedPages - 1) / 2) truncatedPages = if currentPage <= showedLeftPages then (List.range 1 showedPages) else if currentPage > totalPages - showedRightPages then (List.range (totalPages - showedPages + 1) totalPages) else (List.range (currentPage - showedLeftPages) (currentPage + showedRightPages)) in List.filter (flip List.member pages) truncatedPages firstPage : Int -> (Int -> msg) -> Html msg firstPage currentPage pageMsg = button [ classList [ ("page", True) , ("disable", currentPage <= 1) ] , onClick (pageMsg 1) ] [ FontAwesome.fast_backward grey 13 ] previousPage : Int -> msg -> (Int -> msg) -> Html msg previousPage currentPage noOp pageMsg = button [ class "page" , onClick <| if currentPage > 1 then (pageMsg <| currentPage - 1) else noOp ] [ FontAwesome.backward grey 13 ] nextPage : Int -> Int -> msg -> (Int -> msg) -> Html msg nextPage currentPage maxPage noOp pageMsg = button [ class "page" , onClick <| if currentPage < maxPage then (pageMsg <| currentPage + 1) else noOp ] [ FontAwesome.forward grey 13 ] lastPage : Int -> Int -> (Int -> msg) -> Html msg lastPage currentPage maxPage pageMsg = button [ class "page" , onClick (pageMsg maxPage) ] [ FontAwesome.fast_forward grey 13 ] paymentsPage : Int -> msg -> (Int -> msg) -> Int -> Html msg paymentsPage currentPage noOp pageMsg page = let onCurrentPage = page == currentPage in button [ classList [ ("page", True) , ("current", onCurrentPage) ] , onClick <| if onCurrentPage then noOp else pageMsg page ] [ text (toString page) ] grey : Color grey = Color.greyscale 0.35