aboutsummaryrefslogtreecommitdiff
path: root/src/client/View/Payments/Monthly.elm
blob: e115dbfbfb46ef1fd151c598ba8e53f45edbdd3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
module View.Payments.Monthly
  ( monthlyPayments
  ) where

import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)

import Update exposing (..)
import Update.LoggedView exposing (..)
import Update.LoggedView.Monthly exposing (..)

import Model exposing (Model)
import Model.View.Payment.Monthly exposing (Monthly)
import Model.Payment exposing (Payments, Payment)
import Model.View.LoggedView exposing (LoggedView)
import Model.Translations exposing (getMessage, getVarMessage)

import View.Icon exposing (renderIcon)

monthlyPayments : Model -> LoggedView -> Html
monthlyPayments model loggedView =
  let monthly = loggedView.monthly
  in  if List.isEmpty monthly.payments
        then
          text ""
        else
          div
            [ class ("monthlyPayments" ++ if monthly.visibleDetail then " detail" else "") ]
            [ monthlyCount model monthly
            , if monthly.visibleDetail then paymentsTable model monthly else text ""
            ]

monthlyCount : Model -> Monthly -> Html
monthlyCount model monthly =
  let count = List.length monthly.payments
      key = if count > 1 then "PluralMonthlyCount" else "SingularMonthlyCount"
  in  button
        [ class "count"
        , onClick actions.address (UpdateLoggedView << UpdateMonthly <| ToggleDetail)
        ]
        [ text (getVarMessage [toString count] key model.translations)
        , div
            [ class "expand" ]
            [ if monthly.visibleDetail
                then renderIcon "chevron-up"
                else renderIcon "chevron-down"
            ]
        ]

paymentsTable : Model -> Monthly -> Html
paymentsTable model monthly =
  div
    [ class "table" ]
    ( List.map (paymentLine model) monthly.payments )

paymentLine : Model -> Payment -> Html
paymentLine model payment =
  a
    [ class "row" ]
    [ div [ class "cell" ] [ text (payment.name) ]
    , div [ class "cell" ] [ text (toString payment.cost ++ " " ++ getMessage "MoneySymbol" model.translations) ]
    ]