module View.LoggedIn.Table ( paymentsTable ) where import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (..) import Dict exposing (..) import Date import Date exposing (Date) import String exposing (append) import Model exposing (Model) import Model.User exposing (getUserName) import Model.Payment exposing (..) import Model.View.LoggedInView exposing (LoggedInView) import Model.Translations exposing (getMessage) import ServerCommunication as SC exposing (serverCommunications) import Update exposing (..) import Update.LoggedIn exposing (..) import View.Icon exposing (renderIcon) import View.Date exposing (..) import View.Price exposing (price) paymentsTable : Model -> LoggedInView -> Html paymentsTable model loggedInView = div [ class "table" ] ( headerLine model :: paymentLines model loggedInView) headerLine : Model -> Html headerLine model = div [ class "header" ] [ div [ class "cell category" ] [ renderIcon "shopping-cart" ] , div [ class "cell cost" ] [ text model.config.currency ] , div [ class "cell user" ] [ renderIcon "user" ] , div [ class "cell date" ] [ renderIcon "calendar" ] , div [ class "cell" ] [] ] paymentLines : Model -> LoggedInView -> List Html paymentLines model loggedInView = loggedInView.payments |> List.sortBy (Date.toTime << .creation) |> List.reverse |> List.map (paymentLine model loggedInView) paymentLine : Model -> LoggedInView -> Payment -> Html paymentLine model loggedInView payment = a [ classList [ ("row", True) , ("edition", loggedInView.paymentEdition == Just payment.id) ] , onClick actions.address (UpdateLoggedIn (ToggleEdit payment.id)) ] [ div [ class "cell category" ] [ text payment.name ] , div [ classList [ ("cell cost", True) , ("refund", payment.cost < 0) ] ] [ text (price model payment.cost) ] , div [ class "cell user" ] [ payment.userId |> getUserName loggedInView.users |> Maybe.withDefault "−" |> text ] , div [ class "cell date" ] [ span [ class "shortDate" ] [ text (renderShortDate payment.creation model.translations) ] , span [ class "longDate" ] [ text (renderLongDate payment.creation model.translations) ] ] , if loggedInView.account.me == payment.userId then div [ class "cell delete" ] [ button [ onClick serverCommunications.address (SC.DeletePayment payment loggedInView.currentPage) ] [ renderIcon "times" ] ] else div [ class "cell" ] [] ]