module LoggedIn.Home.View.Monthly exposing ( view ) import String import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (..) import Msg exposing (Msg) import LoggedIn.Msg as LoggedInMsg import LoggedIn.Home.Msg as HomeMsg import LoggedIn.Home.Model as HomeModel import LoggedIn.View.Format as Format import LoggedIn.Home.View.Expand exposing (..) import Model.Payment as Payment exposing (Payments, Payment, monthly) import Model.Translations exposing (getMessage, getParamMessage) import LoggedData exposing (LoggedData) import View.Icon exposing (renderIcon) view : LoggedData -> HomeModel.Model -> Html Msg view loggedData homeModel = let monthlyPayments = Payment.monthly loggedData.me loggedData.payments in if List.length monthlyPayments == 0 then text "" else div [ classList [ ("monthlyPayments", True) , ("detail", homeModel.monthlyDetail) ] ] [ monthlyCount loggedData monthlyPayments homeModel , if homeModel.monthlyDetail then paymentsTable loggedData monthlyPayments homeModel else text "" ] monthlyCount : LoggedData -> Payments -> HomeModel.Model -> Html Msg monthlyCount loggedData monthlyPayments homeModel = let count = List.length monthlyPayments total = List.sum << List.map .cost <| monthlyPayments key = if count > 1 then "PluralMonthlyCount" else "SingularMonthlyCount" in button [ class "header" , onClick (Msg.UpdateLoggedIn << LoggedInMsg.HomeMsg <| HomeMsg.ToggleMonthlyDetail) ] [ text (getParamMessage [toString count, Format.price loggedData.conf total] key loggedData.translations) , expand ExpandDown homeModel.monthlyDetail ] paymentsTable : LoggedData -> Payments -> HomeModel.Model -> Html Msg paymentsTable loggedData monthlyPayments homeModel = div [ class "table" ] ( monthlyPayments |> List.sortBy (String.toLower << .name) |> 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 delete" , onClick (Msg.UpdateLoggedIn <| LoggedInMsg.DeletePayment payment.id) ] [ button [] [ renderIcon "times" ] ] ]