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

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

import Date
import Date exposing (Date)

import String exposing (append)

import Model exposing (Model)
import Model.User exposing (getUserName)
import Model.Payment exposing (..)
import Model.View.LoggedInView exposing (LoggedInView)
import Model.Translations exposing (getMessage)

import ServerCommunication as SC exposing (serverCommunications)

import Update exposing (..)
import Update.LoggedIn exposing (..)

import View.Icon exposing (renderIcon)
import View.Date exposing (..)
import View.Price exposing (price)

paymentsTable : Model -> LoggedInView -> Html
paymentsTable model loggedInView =
  div
    [ class "table" ]
    ( headerLine model :: paymentLines model loggedInView)

headerLine : Model -> Html
headerLine model =
  div
    [ class "header" ]
    [ div [ class "cell category" ] [ renderIcon "shopping-cart" ]
    , div [ class "cell cost" ] [ text (getMessage "MoneySymbol" model.translations) ]
    , div [ class "cell user" ] [ renderIcon "user" ]
    , div [ class "cell date" ] [ renderIcon "calendar" ]
    , div [ class "cell" ] []
    ]

paymentLines : Model -> LoggedInView -> List Html
paymentLines model loggedInView =
  loggedInView.payments
    |> List.sortBy (Date.toTime << .creation)
    |> List.reverse
    |> List.map (paymentLine model loggedInView)

paymentLine : Model -> LoggedInView -> Payment -> Html
paymentLine model loggedInView payment =
  a
    [ classList
        [ ("row", True)
        , ("edition", loggedInView.paymentEdition == Just payment.id)
        ]
    , onClick actions.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.me == payment.userId
        then
          div
            [ class "cell delete" ]
            [ button
                [ onClick serverCommunications.address (SC.DeletePayment payment.id payment.userId payment.cost loggedInView.currentPage) ]
                [ renderIcon "times" ]
            ]
        else
          div [ class "cell" ] []
    ]