import { useState, useCallback, useEffect } from "react"; import { Box, Button, Flex } from "rimble-ui"; import { FileDownload, ContentCopy } from "@rimble/icons"; import styled from "styled-components"; import QRCode from "qrcode.react"; import { colors } from "../../../../themes"; import { downloadCanvasImage, copyImageSupported, copyCanvasImage } from "../../../../utils/helpers"; const StyledQRCode = styled(QRCode)` max-width: 100%; height: auto !important; `; export interface ShareViaQrProps { url: string; inline?: boolean; } export const ShareViaQr: React.FunctionComponent = (props) => { const { url, inline } = props; const [canvas, setCanvas] = useState(); const [copied, setCopied] = useState(false); useEffect(() => { if (copied) { setTimeout(() => { setCopied(false); }, 2500); } }, [copied]); const getCanvasNode = useCallback((node) => { setCanvas(node?.querySelector("canvas")); }, []); const PrimaryButton = inline ? Button : Button.Text; const SecondaryButton = inline ? Button.Outline : Button.Text; return ( canvas && downloadCanvasImage(canvas, "credential-QR-code.png")} > Download QR code {copyImageSupported && ( canvas && setCopied(copyCanvasImage(canvas))}> {copied ? "Copied" : "Copy to clipboard"} )} ); };