aboutsummaryrefslogtreecommitdiff
path: root/src/client/Update/LoggedView.elm
blob: cf6bcb2d6876902692605564088134ead15b1634 (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
module Update.LoggedView
  ( LoggedAction(..)
  , updateLoggedView
  ) where

import Date
import Dict

import Model exposing (Model)
import Model.User exposing (UserId)
import Model.Payment exposing (..)
import Model.Payers exposing (..)
import Model.View.LoggedView exposing (..)
import Model.View.Payment.Add exposing (..)

import Update.LoggedView.Add exposing (..)
import Update.LoggedView.Monthly as UM

type LoggedAction =
  UpdateAdd AddPaymentAction
  | UpdatePayments Payments
  | AddPayment UserId String Int Payments
  | AddMonthlyPayment PaymentId String Int
  | ToggleEdit PaymentId
  | DeletePayment UserId Int Payments
  | UpdatePage Int Payments
  | UpdateMonthly UM.MonthlyAction

updateLoggedView : Model -> LoggedAction -> LoggedView -> LoggedView
updateLoggedView model action loggedView =
  case action of
    UpdateAdd addPaymentAction ->
      { loggedView | add <- updateAddPayment addPaymentAction loggedView.add }
    UpdatePayments payments ->
      { loggedView | payments <- payments }
    AddPayment userId name cost payments ->
      { loggedView
      | payments <- payments
      , currentPage <- 1
      , add <- initAddPayment Punctual
      , payers <- updatePayers loggedView.payers userId cost
      , paymentsCount <- loggedView.paymentsCount + 1
      }
    AddMonthlyPayment id name cost ->
      { loggedView
      | add <- initAddPayment Monthly
      , monthly <-
          let payment = Payment id (Date.fromTime model.currentTime) name cost loggedView.me
          in  UM.updateMonthly (UM.AddPayment payment) loggedView.monthly
      }
    ToggleEdit id ->
      { loggedView | paymentEdition <- if loggedView.paymentEdition == Just id then Nothing else Just id }
    DeletePayment userId cost payments ->
      { loggedView
      | payments <- payments
      , payers <- updatePayers loggedView.payers userId -cost
      , paymentsCount <- loggedView.paymentsCount - 1
      }
    UpdatePage page payments ->
      { loggedView
      | currentPage <- page
      , payments <- payments
      }
    UpdateMonthly monthlyAction ->
      { loggedView | monthly <- UM.updateMonthly monthlyAction loggedView.monthly }