aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Home/View/Table.elm
blob: e49fd0500023ff9e9d196b19fcfe61e0392778a5 (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 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.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 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 -> HomeModel.Model -> Html
paymentsTable address model homeModel =
  div
    [ class "table" ]
    ( headerLine model :: paymentLines address model homeModel)

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

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