Display custom field values on item card

This commit is contained in:
Eike Kettner 2020-11-23 10:23:37 +01:00
parent 7b7f1e4d6d
commit 6d22bac720
4 changed files with 81 additions and 43 deletions

View File

@ -25,6 +25,7 @@ import Html.Events exposing (onClick)
import Markdown import Markdown
import Page exposing (Page(..)) import Page exposing (Page(..))
import Set exposing (Set) import Set exposing (Set)
import Util.CustomField
import Util.ItemDragDrop as DD import Util.ItemDragDrop as DD
import Util.List import Util.List
import Util.Maybe import Util.Maybe
@ -360,27 +361,47 @@ mainContent cardAction cardColor isConfirmed settings _ item =
[ Util.Time.formatDate item.date |> text [ Util.Time.formatDate item.date |> text
] ]
, div [ class "meta description" ] , div [ class "meta description" ]
[ div [ mainTagsAndFields settings item
[ classList
[ ( "ui right floated tiny labels", True )
, ( "invisible hidden", item.tags == [] || fieldHidden Data.Fields.Tag )
] ]
] ]
(List.map
(\tag ->
mainTagsAndFields : UiSettings -> ItemLight -> Html Msg
mainTagsAndFields settings item =
let
fieldHidden f =
Data.UiSettings.fieldHidden settings f
hideTags =
item.tags == [] || fieldHidden Data.Fields.Tag
hideFields =
item.customfields == [] || fieldHidden Data.Fields.CustomFields
showTag tag =
div div
[ classList [ classList
[ ( "ui basic label", True ) [ ( "ui basic label", True )
, ( Data.UiSettings.tagColorString tag settings, True ) , ( Data.UiSettings.tagColorString tag settings, True )
] ]
] ]
[ text tag.name ] [ i [ class "tag icon" ] []
) , div [ class "detail" ]
item.tags [ text tag.name
)
] ]
] ]
showField fv =
Util.CustomField.renderValue "ui basic label" fv
in
div
[ classList
[ ( "ui right floated tiny labels", True )
, ( "invisible hidden", hideTags && hideFields )
]
]
(List.map showField item.customfields ++ List.map showTag item.tags)
previewImage : UiSettings -> Attribute Msg -> Model -> ItemLight -> Html Msg previewImage : UiSettings -> Attribute Msg -> Model -> ItemLight -> Html Msg
previewImage settings cardAction model item = previewImage settings cardAction model item =

View File

@ -32,6 +32,7 @@ import Html.Events exposing (onCheck, onClick, onInput)
import Markdown import Markdown
import Page exposing (Page(..)) import Page exposing (Page(..))
import Set import Set
import Util.CustomField
import Util.File exposing (makeFileId) import Util.File exposing (makeFileId)
import Util.Folder import Util.Folder
import Util.List import Util.List
@ -628,30 +629,8 @@ renderTags settings model =
renderCustomValues : UiSettings -> Model -> List (Html Msg) renderCustomValues : UiSettings -> Model -> List (Html Msg)
renderCustomValues settings model = renderCustomValues settings model =
let let
cfIcon cv =
Data.CustomFieldType.fromString cv.ftype
|> Maybe.map (Icons.customFieldTypeIcon "")
|> Maybe.withDefault (i [ class "question circle outline icon" ] [])
renderBool cv =
if cv.value == "true" then
i [ class "check icon" ] []
else
i [ class "minus icon" ] []
fieldView cv = fieldView cv =
div [ class "ui secondary basic label" ] Util.CustomField.renderValue "ui secondary basic label" cv
[ cfIcon cv
, Maybe.withDefault cv.name cv.label |> text
, div [ class "detail" ]
[ if Data.CustomFieldType.fromString cv.ftype == Just Data.CustomFieldType.Boolean then
renderBool cv
else
text cv.value
]
]
labelThenName cv = labelThenName cv =
Maybe.withDefault cv.name cv.label Maybe.withDefault cv.name cv.label

View File

@ -9,6 +9,7 @@ module Data.Icons exposing
, customFieldIcon , customFieldIcon
, customFieldType , customFieldType
, customFieldTypeIcon , customFieldTypeIcon
, customFieldTypeIconString
, date , date
, dateIcon , dateIcon
, direction , direction
@ -43,7 +44,7 @@ customFieldType : CustomFieldType -> String
customFieldType ftype = customFieldType ftype =
case ftype of case ftype of
Data.CustomFieldType.Text -> Data.CustomFieldType.Text ->
"pen icon" "stream icon"
Data.CustomFieldType.Numeric -> Data.CustomFieldType.Numeric ->
"hashtag icon" "hashtag icon"
@ -52,7 +53,7 @@ customFieldType ftype =
"calendar icon" "calendar icon"
Data.CustomFieldType.Boolean -> Data.CustomFieldType.Boolean ->
"question icon" "marker icon"
Data.CustomFieldType.Money -> Data.CustomFieldType.Money ->
"money bill icon" "money bill icon"
@ -64,6 +65,13 @@ customFieldTypeIcon classes ftype =
[] []
customFieldTypeIconString : String -> String -> Html msg
customFieldTypeIconString classes ftype =
Data.CustomFieldType.fromString ftype
|> Maybe.map (customFieldTypeIcon classes)
|> Maybe.withDefault (i [ class "question circle outline icon" ] [])
customField : String customField : String
customField = customField =
"highlighter icon" "highlighter icon"

View File

@ -0,0 +1,30 @@
module Util.CustomField exposing (renderValue)
import Api.Model.ItemFieldValue exposing (ItemFieldValue)
import Data.CustomFieldType
import Data.Icons as Icons
import Html exposing (..)
import Html.Attributes exposing (..)
renderValue : String -> ItemFieldValue -> Html msg
renderValue classes cv =
let
renderBool =
if cv.value == "true" then
i [ class "check icon" ] []
else
i [ class "minus icon" ] []
in
div [ class classes ]
[ Icons.customFieldTypeIconString "" cv.ftype
, Maybe.withDefault cv.name cv.label |> text
, div [ class "detail" ]
[ if Data.CustomFieldType.fromString cv.ftype == Just Data.CustomFieldType.Boolean then
renderBool
else
text cv.value
]
]