import { useState, useRef } from 'react'; import { StatusBar } from 'expo-status-bar'; import { StyleSheet, View, Platform } from 'react-native'; import * as ImagePicker from 'expo-image-picker'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import * as MediaLibrary from 'expo-media-library'; import { captureRef } from 'react-native-view-shot'; import domtoimage from 'dom-to-image'; import Button from './components/Button'; import ImageViewer from './components/ImageViewer'; import CircleButton from './components/CircleButton'; import IconButton from './components/IconButton'; import EmojiPicker from './components/EmojiPicker'; import EmojiList from './components/EmojiList'; import EmojiSticker from './components/EmojiSticker'; const PlaceholderImage = require('./assets/images/background-image.png'); export default function App() { const [isModalVisible, setIsModalVisible] = useState(false); const [showAppOptions, setShowAppOptions] = useState(false); const [pickedEmoji, setPickedEmoji] = useState(null); const [selectedImage, setSelectedImage] = useState(null); const [status, requestPermission] = MediaLibrary.usePermissions(); const imageRef = useRef(); if (status === null) { requestPermission(); } const pickImageAsync = async () => { let result = await ImagePicker.launchImageLibraryAsync({ allowsEditing: true, quality: 1, }); if (!result.canceled) { setSelectedImage(result.assets[0].uri); setShowAppOptions(true); } else { alert('You did not select any image.'); } }; const onReset = () => { setShowAppOptions(false); }; const onAddSticker = () => { setIsModalVisible(true); }; const onModalClose = () => { setIsModalVisible(false); }; const onSaveImageAsync = async () => { if (Platform.OS !== 'web') { try { const localUri = await captureRef(imageRef, { height: 440, quality: 1, }); await MediaLibrary.saveToLibraryAsync(localUri); if (localUri) { alert('Saved!'); } } catch (e) { console.log(e); } } else { try { const dataUrl = await domtoimage.toJpeg(imageRef.current, { quality: 0.95, width: 320, height: 440, }); let link = document.createElement('a'); link.download = 'sticker-smash.jpeg'; link.href = dataUrl; link.click(); } catch (e) { console.log(e); } } }; return ( {pickedEmoji !== null ? ( ) : null} {showAppOptions ? ( ) : (