2016-12-26 10 views
1

私はElm Form https://github.com/etaque/elm-formを使用していますが、パスワードとパスワードの確認フィールドが一致していることを検証する2つのフィールドの検証はできません。ElmとElm-Formの2つのフィールドを検証します

これは私がこれまで持っているものです。

validate : Validation String RegUser 
validate = 
    map6 RegUser 
     (field "email" email) 
     (field "password" (string |> andThen nonEmpty)) 
     (field "passwordConfirmation" (string |> andThen nonEmpty)) 
     (field "firstName" (string |> defaultValue "")) 
     (field "lastName" (string |> defaultValue "")) 
     (field "companyName" (string |> defaultValue "")) 

全体のコード:任意の助けhttps://github.com/werner/madison-elm/blob/master/src/elm/Components/Register/Models.elm

感謝。

答えて

0

溶液をhttps://github.com/etaque/elm-form/issues/75#issuecomment-269861043に基づいて、チャドによって提供されるものに近かった:

validate : Validation TranslationId RegUser 
validate = 
    map6 RegUser 
     (field "email" email) 
     (field "password" (string |> andThen nonEmpty)) 
     ((field "password" string) |> andThen validateConfirmation) 
     (field "firstName" (string |> defaultValue "")) 
     (field "lastName" (string |> defaultValue "")) 
     (field "companyName" (string |> defaultValue "")) 

validateConfirmation : String -> Validation TranslationId String 
validateConfirmation password = 
    field "passwordConfirmation" 
     (string 
      |> andThen 
       (\confirmation -> 
        if password == confirmation then 
         succeed confirmation 
        else 
         fail (customError PasswordNotMatch) 
       ) 
     ) 
2

あなたがandThensucceed、およびfail機能を公開するパッケージを見るときはいつでも、それはあなたが「剥離が離れて」値が検査し、別の関数で、その値をバインドすることができます良い兆候です。この場合、我々は、彼らが一致する2つの名前付きフィールドとチェックの内側にピークした検証機能を構築するために二回andThenを使用することができます。

あなたは、このようなあなたの全体的な検証機能でそれを使用することができます
matchingFields : String -> String -> Validation String String 
matchingFields masterField confirmField = 
    field masterField string 
     |> andThen (\masterVal -> field confirmField string 
     |> andThen (\confirmVal -> 
      if masterVal == confirmVal then 
       succeed masterVal 
      else 
       fail (customError "Values do not match"))) 

validate : Validation String RegUser 
validate = 
    map6 RegUser 
     (field "email" email) 
     (matchingFields "password" "passwordConfirmation" |> andThen nonEmpty) 
     (field "passwordConfirmation" (string |> andThen nonEmpty)) 
     ... 
関連する問題