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
92
93
94
95
|
module View.LoggedIn.Table
( paymentsTable
) where
import Dict exposing (..)
import Date exposing (Date)
import Signal exposing (Address)
import String exposing (append)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)
import Model exposing (Model)
import Model.User exposing (getUserName)
import Model.Payment exposing (..)
import Model.Translations exposing (getMessage)
import Model.Action exposing (..)
import Model.Action.LoggedInAction exposing (..)
import Model.View.LoggedInView exposing (LoggedInView)
import View.Icon exposing (renderIcon)
import View.Date exposing (..)
import View.Price exposing (price)
paymentsTable : Address Action -> Model -> LoggedInView -> Html
paymentsTable address model loggedInView =
div
[ class "table" ]
( headerLine model :: paymentLines address model loggedInView)
headerLine : Model -> Html
headerLine model =
div
[ class "header" ]
[ div [ class "cell category" ] [ renderIcon "shopping-cart" ]
, div [ class "cell cost" ] [ text model.conf.currency ]
, div [ class "cell user" ] [ renderIcon "user" ]
, div [ class "cell date" ] [ renderIcon "calendar" ]
, div [ class "cell" ] []
]
paymentLines : Address Action -> Model -> LoggedInView -> List Html
paymentLines address model loggedInView =
loggedInView.payments
|> List.sortBy (Date.toTime << .creation)
|> List.reverse
|> List.drop ((loggedInView.currentPage - 1) * perPage)
|> List.take perPage
|> List.map (paymentLine address model loggedInView)
paymentLine : Address Action -> Model -> LoggedInView -> Payment -> Html
paymentLine address model loggedInView payment =
a
[ classList
[ ("row", True)
, ("edition", loggedInView.paymentEdition == Just payment.id)
]
, onClick address (UpdateLoggedIn (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 user" ]
[ payment.userId
|> getUserName loggedInView.users
|> Maybe.withDefault "−"
|> text
]
, div
[ class "cell date" ]
[ span
[ class "shortDate" ]
[ text (renderShortDate payment.creation model.translations) ]
, span
[ class "longDate" ]
[ text (renderLongDate payment.creation model.translations) ]
]
, if loggedInView.account.me == payment.userId
then
div
[ class "cell delete" ]
[ button
[ onClick address (UpdateLoggedIn <| DeletePayment payment Punctual)]
[ renderIcon "times" ]
]
else
div [ class "cell" ] []
]
|