Files
docspell/modules/webapp/src/main/elm/Comp/UrlCopy.elm
2021-10-23 14:33:24 +02:00

103 lines
2.4 KiB
Elm

{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Comp.UrlCopy exposing (..)
import Comp.Basic as B
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
import Ports
import QRCode
import Styles as S
import Svg.Attributes as SvgA
type Msg
= Print String
update : Msg -> Cmd msg
update msg =
case msg of
Print id ->
Ports.printElement id
initCopy : String -> Cmd msg
initCopy data =
Ports.initClipboard <| clipboardData data
clipboardData : String -> ( String, String )
clipboardData data =
( "share-url", "#button-share-url" )
view : String -> Html Msg
view data =
let
( elementId, buttonId ) =
clipboardData data
btnId =
String.dropLeft 1 buttonId
printId =
"print-qr-code"
in
div [ class "flex flex-col items-center" ]
[ div
[ class S.border
, class S.qrCode
, id printId
]
[ qrCodeView data
]
, div
[ class "flex w-64"
]
[ p
[ id elementId
, class "font-mono text-xs py-2 mx-auto break-all"
]
[ text data
]
]
, div [ class "flex flex-row mt-1 space-x-2 items-center w-full" ]
[ B.primaryButton
{ label = "Copy"
, icon = "fa fa-copy"
, handler = href "#"
, disabled = False
, attrs =
[ id btnId
, class "flex flex-grow items-center justify-center"
, attribute "data-clipboard-target" ("#" ++ elementId)
]
}
, B.primaryButton
{ label = "Print"
, icon = "fa fa-print"
, handler = onClick (Print printId)
, disabled = False
, attrs =
[ href "#"
, class "flex flex-grow items-center justify-center"
]
}
]
]
qrCodeView : String -> Html msg
qrCodeView message =
QRCode.fromString message
|> Result.map (QRCode.toSvg [ SvgA.class "w-64 h-64" ])
|> Result.withDefault
(text "Error generating QR code")