aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Home/View/Table.elm
blob: 58f2d0b1c2dae61d4e9d469c7aef29b196dae76d (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
97
98
module LoggedIn.Home.View.Table
  ( paymentsTable
  ) where

import Dict exposing (..)
import Date exposing (Date)
import String exposing (append)

import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)

import LoggedData exposing (LoggedData)

import LoggedIn.Action as LoggedInAction

import LoggedIn.Home.Action as HomeAction
import LoggedIn.Home.Model as HomeModel
import LoggedIn.Home.View.Date exposing (..)
import LoggedIn.Home.View.Price exposing (price)

import Model.User exposing (getUserName)
import Model.Payment exposing (..)
import Action
import Mailbox

import View.Icon exposing (renderIcon)

paymentsTable : LoggedData -> HomeModel.Model -> Html
paymentsTable loggedData homeModel =
  div
    [ class "table" ]
    ( headerLine loggedData :: paymentLines loggedData homeModel)

headerLine : LoggedData -> Html
headerLine loggedData =
  div
    [ class "header" ]
    [ div [ class "cell category" ] [ renderIcon "shopping-cart" ]
    , div [ class "cell cost" ] [ text loggedData.conf.currency ]
    , div [ class "cell user" ] [ renderIcon "user" ]
    , div [ class "cell date" ] [ renderIcon "calendar" ]
    , div [ class "cell" ] []
    ]

paymentLines : LoggedData -> HomeModel.Model -> List Html
paymentLines loggedData homeModel =
  loggedData.payments
    |> List.sortBy (Date.toTime << .creation)
    |> List.reverse
    |> List.drop ((homeModel.currentPage - 1) * perPage)
    |> List.take perPage
    |> 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 user" ]
        [ payment.userId
            |> getUserName loggedData.users
            |> Maybe.withDefault "−"
            |> text
        ]
    , div
        [ class "cell date" ]
        [ span
            [ class "shortDate" ]
            [ text (renderShortDate payment.creation loggedData.translations) ]
        , span
            [ class "longDate" ]
            [ text (renderLongDate payment.creation loggedData.translations) ]
        ]
    , if loggedData.me == payment.userId
        then
          div
            [ class "cell delete" ]
            [ button
                [ onClick Mailbox.address (Action.UpdateLoggedIn <| LoggedInAction.DeletePayment payment Punctual)]
                [ renderIcon "times" ]
            ]
        else
          div [ class "cell" ] []
    ]