2021-04-26 10:00:01 +02:00

180 lines
4.1 KiB
Elm

module Comp.LinkTarget exposing
( LinkTarget(..)
, makeConcLink
, makeCorrLink
, makeCustomFieldLink
, makeCustomFieldLink2
, makeFolderLink
, makeSourceLink
, makeTagIconLink
, makeTagLink
)
import Api.Model.IdName exposing (IdName)
import Api.Model.ItemFieldValue exposing (ItemFieldValue)
import Api.Model.Tag exposing (Tag)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
import Util.CustomField
type LinkTarget
= LinkCorrOrg IdName
| LinkCorrPerson IdName
| LinkConcPerson IdName
| LinkConcEquip IdName
| LinkFolder IdName
| LinkTag IdName
| LinkCustomField ItemFieldValue
| LinkSource String
| LinkNone
makeCorrLink :
{ a | corrOrg : Maybe IdName, corrPerson : Maybe IdName }
-> List ( String, Bool )
-> (LinkTarget -> msg)
-> List (Html msg)
makeCorrLink item linkClasses tagger =
let
makeOrg idname =
makeLink linkClasses (LinkCorrOrg >> tagger) idname
makePerson idname =
makeLink linkClasses (LinkCorrPerson >> tagger) idname
in
combine (Maybe.map makeOrg item.corrOrg) (Maybe.map makePerson item.corrPerson)
makeConcLink :
{ a | concPerson : Maybe IdName, concEquipment : Maybe IdName }
-> List ( String, Bool )
-> (LinkTarget -> msg)
-> List (Html msg)
makeConcLink item linkClasses tagger =
let
makePerson idname =
makeLink linkClasses (LinkConcPerson >> tagger) idname
makeEquip idname =
makeLink linkClasses (LinkConcEquip >> tagger) idname
in
combine (Maybe.map makePerson item.concPerson) (Maybe.map makeEquip item.concEquipment)
makeFolderLink :
{ a | folder : Maybe IdName }
-> List ( String, Bool )
-> (LinkTarget -> msg)
-> Html msg
makeFolderLink item linkClasses tagger =
let
makeFolder idname =
makeLink linkClasses (LinkFolder >> tagger) idname
in
Maybe.map makeFolder item.folder
|> Maybe.withDefault (text "-")
makeTagLink :
IdName
-> List ( String, Bool )
-> (LinkTarget -> msg)
-> Html msg
makeTagLink tagId classes tagger =
makeIconLink (i [ class "fa fa-tag mr-2" ] []) classes (LinkTag >> tagger) tagId
makeTagIconLink :
Tag
-> Html msg
-> List ( String, Bool )
-> (LinkTarget -> msg)
-> Html msg
makeTagIconLink tagId icon classes tagger =
makeIconLink icon classes (LinkTag >> tagger) tagId
makeCustomFieldLink :
ItemFieldValue
-> List ( String, Bool )
-> (LinkTarget -> msg)
-> Html msg
makeCustomFieldLink cv classes tagger =
Util.CustomField.renderValue2
classes
(tagger (LinkCustomField cv) |> Just)
cv
makeCustomFieldLink2 :
ItemFieldValue
-> List ( String, Bool )
-> (LinkTarget -> msg)
-> Html msg
makeCustomFieldLink2 cv classes tagger =
Util.CustomField.renderValue2
classes
(tagger (LinkCustomField cv) |> Just)
cv
makeSourceLink :
List ( String, Bool )
-> (LinkTarget -> msg)
-> String
-> Html msg
makeSourceLink classes tagger str =
makeLink classes (.name >> LinkSource >> tagger) (IdName "" str)
--- Helpers
combine : Maybe (Html msg) -> Maybe (Html msg) -> List (Html msg)
combine ma mb =
case ( ma, mb ) of
( Just a, Just b ) ->
[ a, text ", ", b ]
( Just a, Nothing ) ->
[ a ]
( Nothing, Just b ) ->
[ b ]
( Nothing, Nothing ) ->
[ text "-" ]
makeLink : List ( String, Bool ) -> (IdName -> msg) -> IdName -> Html msg
makeLink classes tagger idname =
a
[ onClick (tagger idname)
, href "#"
, classList classes
]
[ text idname.name
]
makeIconLink :
Html msg
-> List ( String, Bool )
-> (IdName -> msg)
-> { x | id : String, name : String }
-> Html msg
makeIconLink icon classes tagger tag =
a
[ onClick (tagger (IdName tag.id tag.name))
, href "#"
, classList classes
]
[ icon
, span []
[ text tag.name
]
]