module View.LoggedIn.Monthly ( monthlyPayments ) where import String import Signal exposing (Address) import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (..) import LoggedIn.Action as LoggedInAction import LoggedIn.Model as LoggedInModel import Model exposing (Model) import Model.Payment as Payment exposing (Payments, Payment) import Model.Translations exposing (getMessage, getParamMessage) import Model.Action exposing (..) import Model.Action.MonthlyAction exposing (..) import Model.View.LoggedIn.Monthly exposing (Monthly) import View.Icon exposing (renderIcon) import View.Expand exposing (..) import View.Price exposing (price) monthlyPayments : Address Action -> Model -> LoggedInModel.Model -> Html monthlyPayments address model loggedInModel = let monthly = loggedInModel.monthly in if List.length monthly.payments == 0 then text "" else div [ classList [ ("monthlyPayments", True) , ("detail", monthly.visibleDetail) ] ] [ monthlyCount address model monthly , if monthly.visibleDetail then paymentsTable address model loggedInModel monthly else text "" ] monthlyCount : Address Action -> Model -> Monthly -> Html monthlyCount address model monthly = let count = List.length monthly.payments total = List.sum << List.map .cost <| monthly.payments key = if count > 1 then "PluralMonthlyCount" else "SingularMonthlyCount" in button [ class "header" , onClick address (UpdateLoggedIn << LoggedInAction.UpdateMonthly <| ToggleDetail) ] [ text (getParamMessage [toString count, price model total] key model.translations) , expand ExpandDown monthly.visibleDetail ] paymentsTable : Address Action -> Model -> LoggedInModel.Model -> Monthly -> Html paymentsTable address model loggedInModel monthly = div [ class "table" ] ( monthly.payments |> List.sortBy (String.toLower << .name) |> List.map (paymentLine address model loggedInModel) ) paymentLine : Address Action -> Model -> LoggedInModel.Model -> Payment -> Html paymentLine address model loggedInModel payment = a [ classList [ ("row", True) , ("edition", loggedInModel.paymentEdition == Just payment.id) ] , onClick address (UpdateLoggedIn (LoggedInAction.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 delete" , onClick address (UpdateLoggedIn <| LoggedInAction.DeletePayment payment Payment.Monthly) ] [ button [] [ renderIcon "times" ] ] ]