aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/Validation.elm
blob: 18b3934ab039b66cb8849ea2abe6337b709d2d29 (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
module Validation exposing
  ( date
  , category
  )

import Date exposing (Date)
import Date.Extra.Core exposing (intToMonth)
import Date.Extra.Create exposing (dateFromFields)
import Dict
import String exposing (toInt, split)

import Form.Validate as Validate exposing (..)

import Model.Category exposing (Categories, CategoryId)

date : Validation String Date
date =
  customValidation string (\str ->
    case split "/" str of
      [day, month, year] ->
        case (toInt day, toInt month, toInt year) of
          (Ok dayNum, Ok monthNum, Ok yearNum) ->
            Ok (dateFromFields yearNum (intToMonth monthNum) dayNum 0 0 0 0)
          _ -> Err (customError "InvalidDate")
      _ -> Err (customError "InvalidDate")
  )

category : Categories -> Validation String CategoryId
category categories =
  customValidation string (\str ->
    case toInt str of
      Ok category ->
        if List.member category (Dict.keys categories)
          then Ok category
          else Err (customError "InvalidCategory")
      Err _ ->
        Err (customError "InvalidCategory")
  )