import React from 'react' import {View} from 'react-native' import QRCode from 'react-native-qrcode-styled' import * as FS from 'expo-file-system' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {nanoid} from 'nanoid/non-secure' import {saveImageToMediaLibrary} from 'lib/media/manip' import * as Toast from '#/view/com/util/Toast' import {useTheme} from '#/alf' import {atoms as a} from '#/alf' import {Button, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {DialogControlProps} from '#/components/Dialog' import {Text} from '#/components/Typography' export function QrCodeDialog({ control, url, }: { control: DialogControlProps url: string }) { const {_} = useLingui() const t = useTheme() // No types for this // See https://github.com/tokkozhin/react-native-qrcode-styled/blob/main/example/src/examples/DownloadQR.tsx for usage const qrCodeRef = React.useRef() const onSavePress = () => { qrCodeRef.current?.toDataURL(async (base64Code: string) => { const filename = `${FS.cacheDirectory}/${nanoid(12)}.png` await FS.writeAsStringAsync(filename, base64Code, { encoding: FS.EncodingType.Base64, }) await saveImageToMediaLibrary({uri: filename}) control.close(() => { Toast.show(_(msg`QR code saved to your camera roll!`)) }) }) } return ( Share this starter pack with friends! ) }