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") )