module LoggedIn.Home.View.Table ( paymentsTable ) where import Dict exposing (..) import Date exposing (Date) import String exposing (append) import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (..) import LoggedData exposing (LoggedData) import LoggedIn.Action as LoggedInAction import LoggedIn.Home.Action as HomeAction import LoggedIn.Home.Model as HomeModel import LoggedIn.Home.View.Date exposing (..) import LoggedIn.Home.View.Price exposing (price) import Model.User exposing (getUserName) import Model.Payment exposing (..) import Action import Mailbox import View.Icon exposing (renderIcon) paymentsTable : LoggedData -> HomeModel.Model -> Html paymentsTable loggedData homeModel = div [ class "table" ] ( headerLine loggedData :: paymentLines loggedData homeModel) headerLine : LoggedData -> Html headerLine loggedData = div [ class "header" ] [ div [ class "cell category" ] [ renderIcon "shopping-cart" ] , div [ class "cell cost" ] [ text loggedData.conf.currency ] , div [ class "cell user" ] [ renderIcon "user" ] , div [ class "cell date" ] [ renderIcon "calendar" ] , div [ class "cell" ] [] ] paymentLines : LoggedData -> HomeModel.Model -> List Html paymentLines loggedData homeModel = loggedData.payments |> List.sortBy (Date.toTime << .creation) |> List.reverse |> List.drop ((homeModel.currentPage - 1) * perPage) |> List.take perPage |> List.map (paymentLine loggedData homeModel) paymentLine : LoggedData -> HomeModel.Model -> Payment -> Html paymentLine loggedData homeModel payment = a [ classList [ ("row", True) , ("edition", homeModel.paymentEdition == Just payment.id) ] , onClick Mailbox.address (Action.UpdateLoggedIn << LoggedInAction.HomeAction << HomeAction.ToggleEdit <| payment.id) ] [ div [ class "cell category" ] [ text payment.name ] , div [ classList [ ("cell cost", True) , ("refund", payment.cost < 0) ] ] [ text (price loggedData.conf payment.cost) ] , div [ class "cell user" ] [ payment.userId |> getUserName loggedData.users |> Maybe.withDefault "−" |> text ] , div [ class "cell date" ] [ span [ class "shortDate" ] [ text (renderShortDate payment.creation loggedData.translations) ] , span [ class "longDate" ] [ text (renderLongDate payment.creation loggedData.translations) ] ] , if loggedData.me == payment.userId then div [ class "cell delete" ] [ button [ onClick Mailbox.address (Action.UpdateLoggedIn <| LoggedInAction.DeletePayment payment Punctual)] [ renderIcon "times" ] ] else div [ class "cell" ] [] ]