aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Home/View/Table.elm
blob: 9cd43a7058a47a446511e44c8836ba0e7d95fd2d (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
99
100
101
102
103
104
105
106
107
108
109
110
111
module LoggedIn.Home.View.Table exposing
  ( view
  )

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

import FontAwesome

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

import Msg exposing (Msg)

import LoggedData exposing (LoggedData)

import LoggedIn.Msg as LoggedInMsg

import LoggedIn.Home.Msg as HomeMsg
import LoggedIn.Home.Model as HomeModel
import LoggedIn.View.Date exposing (..)
import LoggedIn.View.Format as Format

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

view : LoggedData -> HomeModel.Model -> Payments -> Frequency -> Html Msg
view loggedData homeModel payments frequency =
  let visiblePayments =
        payments
          |> List.drop ((homeModel.currentPage - 1) * perPage)
          |> List.take perPage
  in  div
        [ class "table" ]
        [ div
            [ class "lines" ]
            ( headerLine loggedData frequency :: List.map (paymentLine loggedData homeModel frequency) visiblePayments )
        , if List.isEmpty visiblePayments
            then
              div
                [ class "noPayment" ]
                [ text <| getMessage "NoPayment" loggedData.translations ]
            else
              text ""
        ]

headerLine : LoggedData -> Frequency -> Html Msg
headerLine loggedData frequency =
  div
    [ class "header" ]
    [ div [ class "cell category" ] [ text <| getMessage "Name" loggedData.translations ]
    , div [ class "cell cost" ] [ text <| getMessage "Cost" loggedData.translations ]
    , div [ class "cell user" ] [ text <| getMessage "Payer" loggedData.translations ]
    , case frequency of
        Punctual -> div [ class "cell date" ] [ text <| getMessage "Date" loggedData.translations ]
        Monthly -> text ""
    , div [ class "cell" ] []
    ]

paymentLine : LoggedData -> HomeModel.Model -> Frequency -> Payment -> Html Msg
paymentLine loggedData homeModel frequency payment =
  a
    [ classList
        [ ("row", True)
        , ("edition", homeModel.paymentEdition == Just payment.id)
        ]
    , onClick (Msg.UpdateLoggedIn << LoggedInMsg.HomeMsg << HomeMsg.ToggleEdit <| payment.id)
    ]
    [ div [ class "cell category" ] [ text payment.name ]
    , div
        [ classList
            [ ("cell cost", True)
            , ("refund", payment.cost < 0)
            ]
        ]
        [ text (Format.price loggedData.conf payment.cost) ]
    , div
        [ class "cell user" ]
        [ payment.userId
            |> getUserName loggedData.users
            |> Maybe.withDefault "−"
            |> text
        ]
    , case frequency of
        Punctual ->
          div
            [ class "cell date" ]
            [ span
                [ class "shortDate" ]
                [ text (renderShortDate payment.creation loggedData.translations) ]
            , span
                [ class "longDate" ]
                [ text (renderLongDate payment.creation loggedData.translations) ]
            ]
        Monthly ->
          text ""
    , if loggedData.me == payment.userId
        then
          div
            [ class "cell delete" ]
            [ button
                [ onClick (Msg.UpdateLoggedIn <| LoggedInMsg.DeletePayment payment.id)]
                [ FontAwesome.times Color.white 20 ]
            ]
        else
          div [ class "cell" ] []
    ]