Files
docspell/modules/webapp/src/main/elm/Data/CustomFieldChange.elm
2021-01-09 01:16:59 +01:00

87 lines
2.0 KiB
Elm

module Data.CustomFieldChange exposing
( CustomFieldChange(..)
, CustomFieldValueCollect
, collectValues
, emptyCollect
, fromItemValues
, isValueChange
, toFieldValues
)
import Api.Model.CustomField exposing (CustomField)
import Api.Model.CustomFieldValue exposing (CustomFieldValue)
import Api.Model.ItemFieldValue exposing (ItemFieldValue)
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
fromItemValues : List { v | id : String, value : String } -> CustomFieldValueCollect
fromItemValues values =
List.map (\e -> ( e.id, e.value )) values
|> Dict.fromList
|> CustomFieldValueCollect