module LoggedIn.Home.View.Table exposing ( paymentsTable ) import Dict exposing (..) import Date exposing (Date) import String exposing (append) import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (..) import Msg exposing (Msg) import LoggedData exposing (LoggedData) import LoggedIn.Msg as LoggedInMsg import LoggedIn.Home.Msg as HomeMsg import LoggedIn.Home.Model as HomeModel import LoggedIn.View.Date exposing (..) import LoggedIn.View.Format as Format import Model.User exposing (getUserName) import Model.Payment as Payment exposing (..) import View.Icon exposing (renderIcon) paymentsTable : LoggedData -> HomeModel.Model -> Html Msg paymentsTable loggedData homeModel = div [ class "table" ] ( headerLine loggedData :: paymentLines loggedData homeModel) headerLine : LoggedData -> Html Msg 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 Msg) paymentLines loggedData homeModel = Payment.punctual 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 Msg paymentLine loggedData homeModel payment = a [ classList [ ("row", True) , ("edition", homeModel.paymentEdition == Just payment.id) ] , onClick (Msg.UpdateLoggedIn << LoggedInMsg.HomeMsg << HomeMsg.ToggleEdit <| payment.id) ] [ div [ class "cell category" ] [ text payment.name ] , div [ classList [ ("cell cost", True) , ("refund", payment.cost < 0) ] ] [ text (Format.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 (Msg.UpdateLoggedIn <| LoggedInMsg.DeletePayment payment.id)] [ renderIcon "times" ] ] else div [ class "cell" ] [] ]