File size: 1,987 Bytes
4304c6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
'use client'
import React, { useState } from 'react'
import { useTranslation } from 'react-i18next'
import { debounce } from 'lodash-es'
import QRCode from 'qrcode.react'
import Tooltip from '../tooltip'
import QrcodeStyle from './style.module.css'

type Props = {
  content: string
  selectorId: string
  className?: string
}

const prefixEmbedded = 'appOverview.overview.appInfo.qrcode.title'

const ShareQRCode = ({ content, selectorId, className }: Props) => {
  const { t } = useTranslation()
  const [isShow, setisShow] = useState<boolean>(false)
  const onClickShow = debounce(() => {
    setisShow(true)
  }, 100)

  const downloadQR = () => {
    const canvas = document.getElementsByTagName('canvas')[0]
    const link = document.createElement('a')
    link.download = 'qrcode.png'
    link.href = canvas.toDataURL()
    link.click()
  }

  const onMouseLeave = debounce(() => {
    setisShow(false)
  }, 500)

  return (
    <Tooltip

      selector={`common-qrcode-show-${selectorId}`}

      content={t(`${prefixEmbedded}`) || ''}

    >

      <div

        className={`w-8 h-8 cursor-pointer rounded-lg ${className ?? ''}`}

        onMouseLeave={onMouseLeave}

        onClick={onClickShow}

      >

        <div className={`w-full h-full ${QrcodeStyle.QrcodeIcon} ${isShow ? QrcodeStyle.show : ''}`} />

        {isShow && <div className={QrcodeStyle.qrcodeform}>

          <QRCode size={160} value={content} className={QrcodeStyle.qrcodeimage}/>

          <div className={QrcodeStyle.text}>

            <div className={`text-gray-500 ${QrcodeStyle.scan}`}>{t('appOverview.overview.appInfo.qrcode.scan')}</div>

            <div className={`text-gray-500 ${QrcodeStyle.scan}`}>·</div>

            <div className={QrcodeStyle.download} onClick={downloadQR}>{t('appOverview.overview.appInfo.qrcode.download')}</div>

          </div>

        </div>

        }

      </div>

    </Tooltip>
  )
}

export default ShareQRCode