Allow to click on custom fields in detail view

Closes: #514
This commit is contained in:
Eike Kettner 2021-01-08 18:14:16 +01:00
parent 48d182667d
commit 9bc2084499
6 changed files with 71 additions and 3 deletions

View File

@ -636,7 +636,10 @@ renderCustomValues : UiSettings -> Model -> List (Html Msg)
renderCustomValues settings model = renderCustomValues settings model =
let let
fieldView cv = fieldView cv =
Util.CustomField.renderValue "ui secondary basic label" cv Comp.LinkTarget.makeCustomFieldLink
cv
[ ( "ui secondary basic label", True ) ]
SetLinkTarget
labelThenName cv = labelThenName cv =
Maybe.withDefault cv.name cv.label Maybe.withDefault cv.name cv.label

View File

@ -2,14 +2,17 @@ module Comp.LinkTarget exposing
( LinkTarget(..) ( LinkTarget(..)
, makeConcLink , makeConcLink
, makeCorrLink , makeCorrLink
, makeCustomFieldLink
, makeFolderLink , makeFolderLink
, makeTagLink , makeTagLink
) )
import Api.Model.IdName exposing (IdName) import Api.Model.IdName exposing (IdName)
import Api.Model.ItemFieldValue exposing (ItemFieldValue)
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
import Html.Events exposing (onClick) import Html.Events exposing (onClick)
import Util.CustomField
type LinkTarget type LinkTarget
@ -19,6 +22,7 @@ type LinkTarget
| LinkConcEquip IdName | LinkConcEquip IdName
| LinkFolder IdName | LinkFolder IdName
| LinkTag IdName | LinkTag IdName
| LinkCustomField ItemFieldValue
| LinkNone | LinkNone
@ -74,6 +78,18 @@ makeTagLink tagId classes tagger =
makeLink classes (LinkTag >> tagger) tagId makeLink classes (LinkTag >> tagger) tagId
makeCustomFieldLink :
ItemFieldValue
-> List ( String, Bool )
-> (LinkTarget -> msg)
-> Html msg
makeCustomFieldLink cv classes tagger =
Util.CustomField.renderValue1
classes
(tagger (LinkCustomField cv) |> Just)
cv
--- Helpers --- Helpers

View File

@ -19,6 +19,7 @@ import Api.Model.Equipment exposing (Equipment)
import Api.Model.EquipmentList exposing (EquipmentList) import Api.Model.EquipmentList exposing (EquipmentList)
import Api.Model.FolderStats exposing (FolderStats) import Api.Model.FolderStats exposing (FolderStats)
import Api.Model.IdName exposing (IdName) import Api.Model.IdName exposing (IdName)
import Api.Model.ItemFieldValue exposing (ItemFieldValue)
import Api.Model.ItemSearch exposing (ItemSearch) import Api.Model.ItemSearch exposing (ItemSearch)
import Api.Model.PersonList exposing (PersonList) import Api.Model.PersonList exposing (PersonList)
import Api.Model.ReferenceList exposing (ReferenceList) import Api.Model.ReferenceList exposing (ReferenceList)
@ -353,6 +354,7 @@ type Msg
| SetConcEquip IdName | SetConcEquip IdName
| SetFolder IdName | SetFolder IdName
| SetTag String | SetTag String
| SetCustomField ItemFieldValue
| CustomFieldMsg Comp.CustomFieldMultiInput.Msg | CustomFieldMsg Comp.CustomFieldMultiInput.Msg
| SetSource String | SetSource String
| GetStatsResp (Result Http.Error SearchStats) | GetStatsResp (Result Http.Error SearchStats)
@ -829,6 +831,22 @@ updateDrop ddm flags settings msg model =
, dragDrop = DD.DragDropData ddm Nothing , dragDrop = DD.DragDropData ddm Nothing
} }
SetCustomField cv ->
let
lm =
Comp.CustomFieldMultiInput.setValues [ cv ]
values =
Data.CustomFieldChange.fromItemValues [ cv ]
next =
updateDrop ddm flags settings (CustomFieldMsg lm) model
m =
next.model
in
{ next | model = { m | customValues = values } }
SetSource str -> SetSource str ->
let let
next = next =

View File

@ -3,12 +3,14 @@ module Data.CustomFieldChange exposing
, CustomFieldValueCollect , CustomFieldValueCollect
, collectValues , collectValues
, emptyCollect , emptyCollect
, fromItemValues
, isValueChange , isValueChange
, toFieldValues , toFieldValues
) )
import Api.Model.CustomField exposing (CustomField) import Api.Model.CustomField exposing (CustomField)
import Api.Model.CustomFieldValue exposing (CustomFieldValue) import Api.Model.CustomFieldValue exposing (CustomFieldValue)
import Api.Model.ItemFieldValue exposing (ItemFieldValue)
import Dict exposing (Dict) import Dict exposing (Dict)
@ -75,3 +77,10 @@ isValueChange change =
FieldCreateNew -> FieldCreateNew ->
False False
fromItemValues : List { v | id : String, value : String } -> CustomFieldValueCollect
fromItemValues values =
List.map (\e -> ( e.id, e.value )) values
|> Dict.fromList
|> CustomFieldValueCollect

View File

@ -713,6 +713,9 @@ linkTargetMsg linkTarget =
Comp.LinkTarget.LinkTag id -> Comp.LinkTarget.LinkTag id ->
Just <| SearchMenuMsg (Comp.SearchMenu.SetTag id.id) Just <| SearchMenuMsg (Comp.SearchMenu.SetTag id.id)
Comp.LinkTarget.LinkCustomField id ->
Just <| SearchMenuMsg (Comp.SearchMenu.SetCustomField id)
doSearchMore : Flags -> UiSettings -> Model -> ( Model, Cmd Msg ) doSearchMore : Flags -> UiSettings -> Model -> ( Model, Cmd Msg )
doSearchMore flags settings model = doSearchMore flags settings model =

View File

@ -1,10 +1,11 @@
module Util.CustomField exposing (nameOrLabel, renderValue) module Util.CustomField exposing (nameOrLabel, renderValue, renderValue1)
import Api.Model.ItemFieldValue exposing (ItemFieldValue) import Api.Model.ItemFieldValue exposing (ItemFieldValue)
import Data.CustomFieldType import Data.CustomFieldType
import Data.Icons as Icons import Data.Icons as Icons
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
nameOrLabel : { r | name : String, label : Maybe String } -> String nameOrLabel : { r | name : String, label : Maybe String } -> String
@ -14,6 +15,11 @@ nameOrLabel fv =
renderValue : String -> ItemFieldValue -> Html msg renderValue : String -> ItemFieldValue -> Html msg
renderValue classes cv = renderValue classes cv =
renderValue1 [ ( classes, True ) ] Nothing cv
renderValue1 : List ( String, Bool ) -> Maybe msg -> ItemFieldValue -> Html msg
renderValue1 classes tagger cv =
let let
renderBool = renderBool =
if cv.value == "true" then if cv.value == "true" then
@ -21,8 +27,21 @@ renderValue classes cv =
else else
i [ class "minus icon" ] [] i [ class "minus icon" ] []
el : List (Html msg) -> Html msg
el =
case tagger of
Just t ->
a
[ classList classes
, onClick t
, href "#"
]
Nothing ->
div [ classList classes ]
in in
div [ class classes ] el
[ Icons.customFieldTypeIconString "" cv.ftype [ Icons.customFieldTypeIconString "" cv.ftype
, nameOrLabel cv |> text , nameOrLabel cv |> text
, div [ class "detail" ] , div [ class "detail" ]