aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/View/Table.elm
blob: 57167be284a3b50dc3a0658e0b08ca690faa93ad (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
92
93
94
95
96
module LoggedIn.View.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 LoggedIn.Action as LoggedInAction
import LoggedIn.Model as LoggedInModel
import LoggedIn.View.Date exposing (..)
import LoggedIn.View.Price exposing (price)

import Model exposing (Model)
import Model.User exposing (getUserName)
import Model.Payment exposing (..)
import Model.Translations exposing (getMessage)
import Action exposing (..)

import View.Icon exposing (renderIcon)

paymentsTable : Address Action -> Model -> LoggedInModel.Model -> Html
paymentsTable address model loggedInModel =
  div
    [ class "table" ]
    ( headerLine model :: paymentLines address model loggedInModel)

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 -> LoggedInModel.Model -> List Html
paymentLines address model loggedInModel =
  loggedInModel.payments
    |> List.sortBy (Date.toTime << .creation)
    |> List.reverse
    |> List.drop ((loggedInModel.currentPage - 1) * perPage)
    |> List.take perPage
    |> List.map (paymentLine address model loggedInModel)

paymentLine : Address Action -> Model -> LoggedInModel.Model -> Payment -> Html
paymentLine address model loggedInModel payment =
  a
    [ classList
        [ ("row", True)
        , ("edition", loggedInModel.paymentEdition == Just payment.id)
        ]
    , onClick address (UpdateLoggedIn (LoggedInAction.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 loggedInModel.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 loggedInModel.account.me == payment.userId
        then
          div
            [ class "cell delete" ]
            [ button
                [ onClick address (UpdateLoggedIn <| LoggedInAction.DeletePayment payment Punctual)]
                [ renderIcon "times" ]
            ]
        else
          div [ class "cell" ] []
    ]