Files
docspell/modules/webapp/src/main/elm/Util/CustomField.elm
2021-10-23 14:33:24 +02:00

92 lines
2.2 KiB
Elm

{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Util.CustomField exposing
( boolValue
, nameOrLabel
, renderValue
, renderValue2
, statsToFields
)
import Api.Model.CustomField exposing (CustomField)
import Api.Model.ItemFieldValue exposing (ItemFieldValue)
import Api.Model.SearchStats exposing (SearchStats)
import Data.CustomFieldType
import Data.Icons as Icons
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
statsToFields : SearchStats -> List CustomField
statsToFields stats =
let
mkField fs =
CustomField fs.id fs.name fs.label fs.ftype fs.count 0
in
List.map mkField stats.fieldStats
{-| This is how the server wants the value to a bool custom field
-}
boolValue : Bool -> String
boolValue b =
if b then
"true"
else
"false"
nameOrLabel : { r | name : String, label : Maybe String } -> String
nameOrLabel fv =
Maybe.withDefault fv.name fv.label
renderValue : String -> ItemFieldValue -> Html msg
renderValue classes cv =
renderValue2 [ ( classes, True ) ] Nothing cv
renderValue2 : List ( String, Bool ) -> Maybe msg -> ItemFieldValue -> Html msg
renderValue2 classes tagger cv =
let
renderBool =
if cv.value == "true" then
i [ class "fa fa-check" ] []
else
i [ class "fa fa-minus" ] []
el : List (Html msg) -> Html msg
el =
case tagger of
Just t ->
a
[ classList classes
, onClick t
, href "#"
]
Nothing ->
div [ classList classes ]
in
el
[ Icons.customFieldTypeIconString2 "" cv.ftype
, span [ class "ml-1 mr-2" ]
[ nameOrLabel cv |> text
]
, div [ class "detail" ]
[ if Data.CustomFieldType.fromString cv.ftype == Just Data.CustomFieldType.Boolean then
renderBool
else
text cv.value
]
]