mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-06 15:15:58 +00:00
Show custom field values in item detail header
This commit is contained in:
parent
a2e0c23644
commit
bcdb2fc0fe
@ -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) ] []
|
||||||
]
|
]
|
||||||
|
@ -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
|
||||||
|
@ -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,33 +600,71 @@ 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 =
|
||||||
|
|
||||||
else
|
|
||||||
case model.item.tags of
|
|
||||||
[] ->
|
|
||||||
[]
|
|
||||||
|
|
||||||
_ ->
|
|
||||||
[ div [ class "ui right aligned fluid container" ] <|
|
|
||||||
List.map
|
|
||||||
(\t ->
|
|
||||||
Comp.LinkTarget.makeTagLink
|
Comp.LinkTarget.makeTagLink
|
||||||
(IdName t.id t.name)
|
(IdName t.id t.name)
|
||||||
[ ( "ui tag label", True )
|
[ ( "ui tag label", True )
|
||||||
, ( Data.UiSettings.tagColorString t settings, True )
|
, ( Data.UiSettings.tagColorString t settings, True )
|
||||||
]
|
]
|
||||||
SetLinkTarget
|
SetLinkTarget
|
||||||
)
|
in
|
||||||
model.item.tags
|
if Data.UiSettings.fieldHidden settings Data.Fields.Tag || model.item.tags == [] then
|
||||||
|
[]
|
||||||
|
|
||||||
|
else
|
||||||
|
List.map tagView model.item.tags
|
||||||
|
|
||||||
|
|
||||||
|
renderCustomValues : UiSettings -> Model -> List (Html Msg)
|
||||||
|
renderCustomValues settings model =
|
||||||
|
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 =
|
||||||
|
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)
|
||||||
|
@ -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"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user