Files
docspell/modules/webapp/src/main/elm/Comp/AttachmentMeta.elm
eikek f5e375614f Fix tailwind setup
- Adopted postcss and tailwind config to new version
- renamed colors bluegray->slate etc to not have custom
  definitions (hope to reduce migration next time)
- tailwind now doesn't build the complete css anymore, so the
  `dev-ui-build` script must compile both
2021-12-20 23:40:32 +01:00

223 lines
5.6 KiB
Elm

{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Comp.AttachmentMeta exposing
( Model
, Msg
, init
, update
, view2
)
import Api
import Api.Model.AttachmentMeta exposing (AttachmentMeta)
import Api.Model.ItemProposals exposing (ItemProposals)
import Api.Model.Label exposing (Label)
import Comp.Basic as B
import Data.Flags exposing (Flags)
import Html exposing (..)
import Html.Attributes exposing (..)
import Http
import Messages.Comp.AttachmentMeta exposing (Texts)
import Styles as S
type alias Model =
{ id : String
, meta : DataResult AttachmentMeta
}
type DataResult a
= NotAvailable
| Success a
| HttpFailure Http.Error
emptyModel : Model
emptyModel =
{ id = ""
, meta = NotAvailable
}
init : Flags -> String -> ( Model, Cmd Msg )
init flags id =
( { emptyModel | id = id }
, Api.getAttachmentMeta flags id MetaResp
)
type Msg
= MetaResp (Result Http.Error AttachmentMeta)
update : Msg -> Model -> Model
update msg model =
case msg of
MetaResp (Ok am) ->
{ model | meta = Success am }
MetaResp (Err err) ->
{ model | meta = HttpFailure err }
--- View2
view2 : Texts -> List (Attribute Msg) -> Model -> Html Msg
view2 texts attrs model =
div attrs
[ h3 [ class S.header3 ]
[ text texts.extractedMetadata
]
, case model.meta of
NotAvailable ->
B.loadingDimmer
{ active = True
, label = texts.basics.loading
}
HttpFailure err ->
div [ class S.errorMessage ]
[ text (texts.httpError err)
]
Success data ->
viewData2 texts data
]
viewData2 : Texts -> AttachmentMeta -> Html Msg
viewData2 texts meta =
div [ class "flex flex-col" ]
[ div [ class "text-lg font-bold" ]
[ text texts.content
]
, div [ class "px-2 py-2 text-sm bg-yellow-50 dark:bg-stone-800 break-words whitespace-pre max-h-80 overflow-auto" ]
[ text meta.content
]
, div [ class "text-lg font-bold mt-2" ]
[ text texts.labels
]
, div [ class "flex fex-row flex-wrap" ]
(List.map renderLabelItem2 meta.labels)
, div [ class "text-lg font-bold mt-2" ]
[ text texts.proposals
]
, viewProposals2 texts meta.proposals
]
viewProposals2 : Texts -> ItemProposals -> Html Msg
viewProposals2 texts props =
let
mkItem n lbl =
div
[ class S.basicLabel
, class "text-sm"
]
[ text lbl.name
, div [ class "opacity-75 ml-2" ]
[ (String.fromInt (n + 1) ++ ".")
|> text
]
]
mkTimeItem ms =
div
[ class S.basicLabel
, class "text-sm"
]
[ texts.formatDateShort ms |> text
]
in
div [ class "flex flex-col" ]
[ div [ class "font-bold mb-2" ]
[ text texts.correspondentOrg
]
, div [ class "flex flex-row flex-wrap space-x-2" ]
(List.indexedMap mkItem props.corrOrg)
, div [ class "font-bold mt-3 mb-2" ]
[ text texts.correspondentPerson
]
, div [ class "flex flex-row flex-wrap space-x-2" ]
(List.indexedMap mkItem props.corrPerson)
, div [ class "font-bold mt-3 mb-2" ]
[ text texts.concerningPerson
]
, div [ class "flex flex-row flex-wrap space-x-2" ]
(List.indexedMap mkItem props.concPerson)
, div [ class "font-bold mt-3 mb-2" ]
[ text texts.concerningEquipment
]
, div [ class "flex flex-row flex-wrap space-x-2" ]
(List.indexedMap mkItem props.concEquipment)
, div [ class "font-bold mb-2 mt-3" ]
[ text texts.itemDate
]
, div [ class "flex flex-row flex-wrap space-x-2" ]
(List.map mkTimeItem props.itemDate)
, div [ class "font-bold mt-3 mb-2" ]
[ text texts.itemDueDate
]
, div [ class "flex flex-row flex-wrap space-x-2 mb-2" ]
(List.map mkTimeItem props.dueDate)
]
renderLabelItem2 : Label -> Html Msg
renderLabelItem2 label =
renderLabel2 label
renderLabel2 : Label -> Html Msg
renderLabel2 label =
let
icon =
case label.labelType of
"organization" ->
"fa fa-industry"
"person" ->
"fa fa-user"
"location" ->
"fa fa-map-marker"
"date" ->
"fa fa-calendar-alt"
"misc" ->
"fa fa-question"
"email" ->
"fa fa-at"
"website" ->
"fa fa-external-alt"
_ ->
"fa fa-tag"
in
div
[ class S.basicLabel
, class "mt-1 mr-2 text-sm"
, title label.labelType
]
[ i [ class icon ] []
, span [ class "ml-2" ]
[ text label.label
]
, div [ class "opacity-75 ml-3 font-mono" ]
[ String.fromInt label.beginPos |> text
, text "-"
, String.fromInt label.endPos |> text
]
]