mirror of
				https://github.com/TheAnachronism/docspell.git
				synced 2025-11-03 18:00:11 +00:00 
			
		
		
		
	Fix and enhance custom-multi-input field
This commit is contained in:
		
							
								
								
									
										77
									
								
								modules/webapp/src/main/elm/Data/CustomFieldChange.elm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								modules/webapp/src/main/elm/Data/CustomFieldChange.elm
									
									
									
									
									
										Normal 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
 | 
			
		||||
		Reference in New Issue
	
	Block a user