From 76cc6f76a8b3352399d86e1f561986ebfad1f071 Mon Sep 17 00:00:00 2001 From: Hailey Date: Mon, 3 Jun 2024 13:10:33 -0700 Subject: [PATCH] =?UTF-8?q?[=F0=9F=8F=81=20#5]=20QR=20Code=20Sharing=20(#4?= =?UTF-8?q?335)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add dep * add some basic styling to QR codes, save to camera roll * use correct text component * rm unnecessary wrapper --- assets/logo.png | Bin 0 -> 10126 bytes package.json | 1 + src/components/StarterPack/QrCodeDialog.tsx | 99 ++++++++++++++++++++ src/screens/StarterPack/Main/index.tsx | 94 ++++++++++--------- yarn.lock | 34 ++++++- 5 files changed, 183 insertions(+), 45 deletions(-) create mode 100644 assets/logo.png create mode 100644 src/components/StarterPack/QrCodeDialog.tsx diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cc2d660341e380d1150b1f86735ac78d8394e87f GIT binary patch literal 10126 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 U`^y*j|JebmN}7rl^42f^4?+A_Y5)KL literal 0 HcmV?d00001 diff --git a/package.json b/package.json index c107ea56e4..158b870186 100644 --- a/package.json +++ b/package.json @@ -177,6 +177,7 @@ "react-native-pager-view": "6.2.3", "react-native-picker-select": "^9.1.3", "react-native-progress": "bluesky-social/react-native-progress", + "react-native-qrcode-styled": "^0.3.1", "react-native-reanimated": "^3.11.0", "react-native-root-siblings": "^4.1.1", "react-native-safe-area-context": "4.10.1", diff --git a/src/components/StarterPack/QrCodeDialog.tsx b/src/components/StarterPack/QrCodeDialog.tsx new file mode 100644 index 0000000000..d31ef33cb8 --- /dev/null +++ b/src/components/StarterPack/QrCodeDialog.tsx @@ -0,0 +1,99 @@ +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}) + Toast.show(_(msg`QR code saved to your camera roll!`)) + }) + } + + return ( + + + + + + Share this starter pack with friends! + + + + + + + + + ) +} diff --git a/src/screens/StarterPack/Main/index.tsx b/src/screens/StarterPack/Main/index.tsx index d4bf8b8274..48d1572eac 100644 --- a/src/screens/StarterPack/Main/index.tsx +++ b/src/screens/StarterPack/Main/index.tsx @@ -1,22 +1,25 @@ import React from 'react' -import {Text, View} from 'react-native' +import {View} from 'react-native' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {NativeStackScreenProps} from '@react-navigation/native-stack' import {CommonNavigatorParams} from 'lib/routes/types' +import {shareUrl} from 'lib/sharing' import {isWeb} from 'platform/detection' import {PagerWithHeader} from 'view/com/pager/PagerWithHeader' import {ProfileSubpageHeader} from 'view/com/profile/ProfileSubpageHeader' -import {EventStopper} from 'view/com/util/EventStopper' import {CenteredView} from 'view/com/util/Views' import {FeedsList} from '#/screens/StarterPack/Main/FeedsList' import {ProfilesList} from '#/screens/StarterPack/Main/ProfilesList' import {atoms as a} from '#/alf' import {Button, ButtonText} from '#/components/Button' +import {useDialogControl} from '#/components/Dialog' import {ArrowOutOfBox_Stroke2_Corner0_Rounded as ArrowOutOfBox} from '#/components/icons/ArrowOutOfBox' import {QrCode_Stroke2_Corner0_Rounded as QrCode} from '#/components/icons/QrCode' import * as Menu from '#/components/Menu' +import {QrCodeDialog} from '#/components/StarterPack/QrCodeDialog' +import {Text} from '#/components/Typography' /** * TEMPORARY CONTENT, DO NOT TRANSLATE @@ -140,6 +143,7 @@ function StarterPackScreenInner() { function Header({isOwn}: {isOwn: boolean}) { const {_} = useLingui() + const qrCodeDialogControl = useDialogControl() return ( <> @@ -152,48 +156,48 @@ function Header({isOwn}: {isOwn: boolean}) { creator={undefined} avatarType="starter-pack"> - - - - {({props}) => { - return ( - - ) - }} - - - - {}}> - - Share link - - - - {}}> - - Create QR code - - - - - - - + + + {({props}) => { + return ( + + ) + }} + + + + { + shareUrl('https://bsky.app') + }}> + + Share link + + + + + + Create QR code + + + + + + {isOwn && (