aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Home/Model.elm
blob: e80282881897a3a0717279af78d4c2a6e8bdf8f6 (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 LoggedIn.Home.Model exposing
  ( Model
  , Search
  , init
  , addPaymentInitial
  )

import Form exposing (Form)
import Form.Validate as Validate exposing (Validation)
import Form.Field as Field exposing (Field)

import Model.User exposing (Users, UserId)
import Model.Payment exposing (PaymentId, Payments, Frequency(..))
import Model.Payer exposing (Payers)

type alias Model =
  { paymentEdition : Maybe PaymentId
  , currentPage : Int
  , monthlyDetail : Bool
  , search : Form String Search
  , addPayment : Form String AddPayment
  }

type alias Search =
  { searchText : Maybe String
  }

type alias AddPayment =
  { name : String
  , cost : Int
  , frequency : Frequency
  }

init : Model
init =
  { paymentEdition = Nothing
  , currentPage = 1
  , monthlyDetail = False
  , search = Form.initial [] searchValidation
  , addPayment = Form.initial addPaymentInitial addPaymentValidation
  }

searchValidation : Validation String Search
searchValidation =
  Validate.form1 Search
    (Validate.get "searchText" (Validate.maybe Validate.string))

addPaymentInitial : List (String, Field)
addPaymentInitial = [ ("frequency", Field.Radio (toString Punctual)) ]

addPaymentValidation : Validation String AddPayment
addPaymentValidation =
  Validate.form3 AddPayment
    (Validate.get "name" (Validate.string `Validate.andThen` (Validate.nonEmpty)))
    (Validate.get "cost" (Validate.int `Validate.andThen` (Validate.minInt 1)))
    (Validate.get "frequency" validateFrequency)

validateFrequency : Validation String Frequency
validateFrequency =
  Validate.customValidation Validate.string (\str ->
    case str of
      "Punctual" -> Ok Punctual
      "Monthly" -> Ok Monthly
      _ -> Err (Validate.customError "InvalidFrequency")
  )