aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Home/View/Monthly.elm
blob: 487c05d2a87a07997ba20de3582ce8712a91eda9 (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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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.Home.View.Price exposing (price)
import LoggedIn.Home.View.Expand exposing (..)

import Model.Payment as Payment exposing (Payment)
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 =
  if List.length loggedData.monthlyPayments == 0
    then
      text ""
    else
      div
        [ classList
            [ ("monthlyPayments", True)
            , ("detail", homeModel.monthlyDetail)
            ]
        ]
        [ monthlyCount loggedData homeModel
        , if homeModel.monthlyDetail
            then paymentsTable loggedData homeModel
            else text ""
        ]

monthlyCount : LoggedData -> HomeModel.Model -> Html
monthlyCount loggedData homeModel =
  let count = List.length loggedData.monthlyPayments
      total = List.sum << List.map .cost <| loggedData.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, price loggedData.conf total] key loggedData.translations)
        , expand ExpandDown homeModel.monthlyDetail
        ]

paymentsTable : LoggedData -> HomeModel.Model -> Html
paymentsTable loggedData homeModel =
  div
    [ class "table" ]
    ( loggedData.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 (price loggedData.conf payment.cost) ]
    , div
        [ class "cell delete"
        , onClick Mailbox.address (Action.UpdateLoggedIn <| LoggedInAction.DeletePayment payment Payment.Monthly)
        ]
        [ button [] [ renderIcon "times" ]
        ]
    ]