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
91
|
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.Price exposing (price)
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, 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 (price loggedData.conf payment.cost) ]
, div
[ class "cell delete"
, onClick Mailbox.address (Action.UpdateLoggedIn <| LoggedInAction.DeletePayment payment.id)
]
[ button [] [ renderIcon "times" ]
]
]
|