Show custom field values in item detail header

This commit is contained in:
Eike Kettner 2020-11-22 22:08:52 +01:00
parent a2e0c23644
commit bcdb2fc0fe
4 changed files with 94 additions and 22 deletions

View File

@ -13,6 +13,7 @@ import Api.Model.CustomField exposing (CustomField)
import Api.Model.ItemFieldValue exposing (ItemFieldValue) import Api.Model.ItemFieldValue exposing (ItemFieldValue)
import Comp.DatePicker import Comp.DatePicker
import Data.CustomFieldType exposing (CustomFieldType) import Data.CustomFieldType exposing (CustomFieldType)
import Data.Icons as Icons
import Data.Money import Data.Money
import Date exposing (Date) import Date exposing (Date)
import DatePicker exposing (DatePicker) import DatePicker exposing (DatePicker)
@ -350,7 +351,7 @@ makeInput icon model =
] ]
[] []
, removeButton "" , removeButton ""
, i [ class (iconOr "pen icon") ] [] , i [ class (iconOr <| Icons.customFieldType Data.CustomFieldType.Text) ] []
] ]
NumberField nm -> NumberField nm ->
@ -362,7 +363,7 @@ makeInput icon model =
] ]
[] []
, removeButton "" , removeButton ""
, i [ class (iconOr "hashtag icon") ] [] , i [ class (iconOr <| Icons.customFieldType Data.CustomFieldType.Numeric) ] []
] ]
MoneyField nm -> MoneyField nm ->
@ -374,7 +375,7 @@ makeInput icon model =
] ]
[] []
, removeButton "" , removeButton ""
, i [ class (iconOr "money bill icon") ] [] , i [ class (iconOr <| Icons.customFieldType Data.CustomFieldType.Money) ] []
] ]
BoolField b -> BoolField b ->
@ -397,5 +398,5 @@ makeInput icon model =
div [ class "ui action left icon input" ] div [ class "ui action left icon input" ]
[ Html.map DateMsg (Comp.DatePicker.view v Comp.DatePicker.defaultSettings dp) [ Html.map DateMsg (Comp.DatePicker.view v Comp.DatePicker.defaultSettings dp)
, removeButton "" , removeButton ""
, i [ class (iconOr "calendar icon") ] [] , i [ class (iconOr <| Icons.customFieldType Data.CustomFieldType.Date) ] []
] ]

View File

@ -51,9 +51,13 @@ type alias VisibleField =
visibleFields : Model -> List CustomField visibleFields : Model -> List CustomField
visibleFields model = visibleFields model =
let
labelThenName cv =
Maybe.withDefault cv.name cv.label
in
Dict.toList model.visibleFields Dict.toList model.visibleFields
|> List.map (Tuple.second >> .field) |> List.map (Tuple.second >> .field)
|> List.sortBy .name |> List.sortBy labelThenName
currentOptions : List CustomField -> Dict String VisibleField -> List CustomField currentOptions : List CustomField -> Dict String VisibleField -> List CustomField

View File

@ -17,6 +17,7 @@ import Comp.LinkTarget
import Comp.MarkdownInput import Comp.MarkdownInput
import Comp.SentMails import Comp.SentMails
import Comp.YesNoDimmer import Comp.YesNoDimmer
import Data.CustomFieldType
import Data.Direction import Data.Direction
import Data.Fields import Data.Fields
import Data.Icons as Icons import Data.Icons as Icons
@ -599,34 +600,72 @@ renderItemInfo settings model =
] ]
] ]
] ]
:: renderTags settings model :: renderTagsAndFields settings model
) )
renderTagsAndFields : UiSettings -> Model -> List (Html Msg)
renderTagsAndFields settings model =
[ div [ class "ui fluid right aligned container" ]
(renderTags settings model ++ renderCustomValues settings model)
]
renderTags : UiSettings -> Model -> List (Html Msg) renderTags : UiSettings -> Model -> List (Html Msg)
renderTags settings model = renderTags settings model =
if Data.UiSettings.fieldHidden settings Data.Fields.Tag then let
tagView t =
Comp.LinkTarget.makeTagLink
(IdName t.id t.name)
[ ( "ui tag label", True )
, ( Data.UiSettings.tagColorString t settings, True )
]
SetLinkTarget
in
if Data.UiSettings.fieldHidden settings Data.Fields.Tag || model.item.tags == [] then
[] []
else else
case model.item.tags of List.map tagView model.item.tags
[] ->
[]
_ ->
[ div [ class "ui right aligned fluid container" ] <| renderCustomValues : UiSettings -> Model -> List (Html Msg)
List.map renderCustomValues settings model =
(\t -> let
Comp.LinkTarget.makeTagLink cfIcon cv =
(IdName t.id t.name) Data.CustomFieldType.fromString cv.ftype
[ ( "ui tag label", True ) |> Maybe.map (Icons.customFieldTypeIcon "")
, ( Data.UiSettings.tagColorString t settings, True ) |> Maybe.withDefault (i [ class "question circle outline icon" ] [])
]
SetLinkTarget renderBool cv =
) if cv.value == "true" then
model.item.tags i [ class "check icon" ] []
else
i [ class "minus icon" ] []
fieldView cv =
div [ class "ui secondary basic label" ]
[ 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 =
Maybe.withDefault cv.name cv.label
in
if Data.UiSettings.fieldHidden settings Data.Fields.CustomFields || model.item.customfields == [] then
[]
else
List.map fieldView (List.sortBy labelThenName model.item.customfields)
renderEditMenu : UiSettings -> Model -> List (Html Msg) renderEditMenu : UiSettings -> Model -> List (Html Msg)
renderEditMenu settings model = renderEditMenu settings model =

View File

@ -7,6 +7,8 @@ module Data.Icons exposing
, correspondentIcon , correspondentIcon
, customField , customField
, customFieldIcon , customFieldIcon
, customFieldType
, customFieldTypeIcon
, date , date
, dateIcon , dateIcon
, direction , direction
@ -32,10 +34,36 @@ module Data.Icons exposing
, tagsIcon , tagsIcon
) )
import Data.CustomFieldType exposing (CustomFieldType)
import Html exposing (Html, i) import Html exposing (Html, i)
import Html.Attributes exposing (class) import Html.Attributes exposing (class)
customFieldType : CustomFieldType -> String
customFieldType ftype =
case ftype of
Data.CustomFieldType.Text ->
"pen icon"
Data.CustomFieldType.Numeric ->
"hashtag icon"
Data.CustomFieldType.Date ->
"calendar icon"
Data.CustomFieldType.Boolean ->
"question icon"
Data.CustomFieldType.Money ->
"money bill icon"
customFieldTypeIcon : String -> CustomFieldType -> Html msg
customFieldTypeIcon classes ftype =
i [ class (customFieldType ftype ++ " " ++ classes) ]
[]
customField : String customField : String
customField = customField =
"highlighter icon" "highlighter icon"