aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Home/View/Monthly.elm
blob: c001331a4dbb99a8aadcadd4b2a671f7c6cf2470 (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
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" ]
        ]
    ]