mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-04-12 05:59:33 +00:00
180 lines
4.1 KiB
Elm
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
|
|
]
|
|
]
|