Fix and enhance custom-multi-input field

This commit is contained in:
Eike Kettner
2020-11-22 20:07:35 +01:00
parent 066c856981
commit 23b343649c
4 changed files with 175 additions and 92 deletions

View File

@ -0,0 +1,77 @@
module Data.CustomFieldChange exposing
( CustomFieldChange(..)
, CustomFieldValueCollect
, collectValues
, emptyCollect
, isValueChange
, toFieldValues
)
import Api.Model.CustomField exposing (CustomField)
import Api.Model.CustomFieldValue exposing (CustomFieldValue)
import Dict exposing (Dict)
type CustomFieldChange
= NoFieldChange
| FieldValueRemove CustomField
| FieldValueChange CustomField String
| FieldCreateNew
type CustomFieldValueCollect
= CustomFieldValueCollect (Dict String String)
emptyCollect : CustomFieldValueCollect
emptyCollect =
CustomFieldValueCollect Dict.empty
collectValues :
CustomFieldChange
-> CustomFieldValueCollect
-> CustomFieldValueCollect
collectValues change collector =
let
dict =
case collector of
CustomFieldValueCollect d ->
d
in
case change of
NoFieldChange ->
collector
FieldValueRemove f ->
CustomFieldValueCollect (Dict.remove f.id dict)
FieldValueChange f v ->
CustomFieldValueCollect (Dict.insert f.id v dict)
FieldCreateNew ->
collector
toFieldValues : CustomFieldValueCollect -> List CustomFieldValue
toFieldValues dict =
case dict of
CustomFieldValueCollect d ->
Dict.toList d
|> List.map (\( k, v ) -> CustomFieldValue k v)
isValueChange : CustomFieldChange -> Bool
isValueChange change =
case change of
NoFieldChange ->
False
FieldValueRemove _ ->
True
FieldValueChange _ _ ->
True
FieldCreateNew ->
False