diff --git a/modules/webapp/src/main/elm/Comp/ItemDetail/View.elm b/modules/webapp/src/main/elm/Comp/ItemDetail/View.elm index b541f20b..8e5229e1 100644 --- a/modules/webapp/src/main/elm/Comp/ItemDetail/View.elm +++ b/modules/webapp/src/main/elm/Comp/ItemDetail/View.elm @@ -636,7 +636,10 @@ renderCustomValues : UiSettings -> Model -> List (Html Msg) renderCustomValues settings model = let fieldView cv = - Util.CustomField.renderValue "ui secondary basic label" cv + Comp.LinkTarget.makeCustomFieldLink + cv + [ ( "ui secondary basic label", True ) ] + SetLinkTarget labelThenName cv = Maybe.withDefault cv.name cv.label diff --git a/modules/webapp/src/main/elm/Comp/LinkTarget.elm b/modules/webapp/src/main/elm/Comp/LinkTarget.elm index c9908bb6..ea20da20 100644 --- a/modules/webapp/src/main/elm/Comp/LinkTarget.elm +++ b/modules/webapp/src/main/elm/Comp/LinkTarget.elm @@ -2,14 +2,17 @@ module Comp.LinkTarget exposing ( LinkTarget(..) , makeConcLink , makeCorrLink + , makeCustomFieldLink , makeFolderLink , makeTagLink ) import Api.Model.IdName exposing (IdName) +import Api.Model.ItemFieldValue exposing (ItemFieldValue) import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (onClick) +import Util.CustomField type LinkTarget @@ -19,6 +22,7 @@ type LinkTarget | LinkConcEquip IdName | LinkFolder IdName | LinkTag IdName + | LinkCustomField ItemFieldValue | LinkNone @@ -74,6 +78,18 @@ makeTagLink tagId classes tagger = 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 diff --git a/modules/webapp/src/main/elm/Comp/SearchMenu.elm b/modules/webapp/src/main/elm/Comp/SearchMenu.elm index e60bbf99..f4898a6a 100644 --- a/modules/webapp/src/main/elm/Comp/SearchMenu.elm +++ b/modules/webapp/src/main/elm/Comp/SearchMenu.elm @@ -19,6 +19,7 @@ import Api.Model.Equipment exposing (Equipment) import Api.Model.EquipmentList exposing (EquipmentList) import Api.Model.FolderStats exposing (FolderStats) import Api.Model.IdName exposing (IdName) +import Api.Model.ItemFieldValue exposing (ItemFieldValue) import Api.Model.ItemSearch exposing (ItemSearch) import Api.Model.PersonList exposing (PersonList) import Api.Model.ReferenceList exposing (ReferenceList) @@ -353,6 +354,7 @@ type Msg | SetConcEquip IdName | SetFolder IdName | SetTag String + | SetCustomField ItemFieldValue | CustomFieldMsg Comp.CustomFieldMultiInput.Msg | SetSource String | GetStatsResp (Result Http.Error SearchStats) @@ -829,6 +831,22 @@ updateDrop ddm flags settings msg model = , 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 -> let next = diff --git a/modules/webapp/src/main/elm/Data/CustomFieldChange.elm b/modules/webapp/src/main/elm/Data/CustomFieldChange.elm index 7a12dbc2..04f69b1c 100644 --- a/modules/webapp/src/main/elm/Data/CustomFieldChange.elm +++ b/modules/webapp/src/main/elm/Data/CustomFieldChange.elm @@ -3,12 +3,14 @@ module Data.CustomFieldChange exposing , CustomFieldValueCollect , collectValues , emptyCollect + , fromItemValues , isValueChange , toFieldValues ) import Api.Model.CustomField exposing (CustomField) import Api.Model.CustomFieldValue exposing (CustomFieldValue) +import Api.Model.ItemFieldValue exposing (ItemFieldValue) import Dict exposing (Dict) @@ -75,3 +77,10 @@ isValueChange change = FieldCreateNew -> False + + +fromItemValues : List { v | id : String, value : String } -> CustomFieldValueCollect +fromItemValues values = + List.map (\e -> ( e.id, e.value )) values + |> Dict.fromList + |> CustomFieldValueCollect diff --git a/modules/webapp/src/main/elm/Page/Home/Update.elm b/modules/webapp/src/main/elm/Page/Home/Update.elm index ec8c7f68..e3cfd754 100644 --- a/modules/webapp/src/main/elm/Page/Home/Update.elm +++ b/modules/webapp/src/main/elm/Page/Home/Update.elm @@ -713,6 +713,9 @@ linkTargetMsg linkTarget = Comp.LinkTarget.LinkTag 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 settings model = diff --git a/modules/webapp/src/main/elm/Util/CustomField.elm b/modules/webapp/src/main/elm/Util/CustomField.elm index 9e2aa802..b2e38cb1 100644 --- a/modules/webapp/src/main/elm/Util/CustomField.elm +++ b/modules/webapp/src/main/elm/Util/CustomField.elm @@ -1,10 +1,11 @@ -module Util.CustomField exposing (nameOrLabel, renderValue) +module Util.CustomField exposing (nameOrLabel, renderValue, renderValue1) import Api.Model.ItemFieldValue exposing (ItemFieldValue) import Data.CustomFieldType import Data.Icons as Icons import Html exposing (..) import Html.Attributes exposing (..) +import Html.Events exposing (onClick) nameOrLabel : { r | name : String, label : Maybe String } -> String @@ -14,6 +15,11 @@ nameOrLabel fv = renderValue : String -> ItemFieldValue -> Html msg renderValue classes cv = + renderValue1 [ ( classes, True ) ] Nothing cv + + +renderValue1 : List ( String, Bool ) -> Maybe msg -> ItemFieldValue -> Html msg +renderValue1 classes tagger cv = let renderBool = if cv.value == "true" then @@ -21,8 +27,21 @@ renderValue classes cv = else 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 - div [ class classes ] + el [ Icons.customFieldTypeIconString "" cv.ftype , nameOrLabel cv |> text , div [ class "detail" ]