module LoggedIn.Home.View.Monthly ( view ) where import String import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (..) import LoggedIn.Action as LoggedInAction import LoggedIn.Home.Action as HomeAction 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 Action import Mailbox import View.Icon exposing (renderIcon) view : LoggedData -> HomeModel.Model -> Html 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 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 Mailbox.address (Action.UpdateLoggedIn << LoggedInAction.HomeAction <| HomeAction.ToggleMonthlyDetail) ] [ text (getParamMessage [toString count, Format.price loggedData.conf total] key loggedData.translations) , expand ExpandDown homeModel.monthlyDetail ] paymentsTable : LoggedData -> Payments -> HomeModel.Model -> Html paymentsTable loggedData monthlyPayments homeModel = div [ class "table" ] ( monthlyPayments |> List.sortBy (String.toLower << .name) |> 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 (Format.price loggedData.conf payment.cost) ] , div [ class "cell delete" , onClick Mailbox.address (Action.UpdateLoggedIn <| LoggedInAction.DeletePayment payment.id) ] [ button [] [ renderIcon "times" ] ] ]