aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package.json3
-rw-r--r--src/components/camera/GalleryIcon.tsx4
-rw-r--r--src/components/moments/Moment.tsx45
-rw-r--r--src/screens/moments/CameraScreen.tsx87
-rw-r--r--src/utils/camera.ts41
-rw-r--r--yarn.lock237
6 files changed, 341 insertions, 76 deletions
diff --git a/package.json b/package.json
index 0910f95b..2a758342 100644
--- a/package.json
+++ b/package.json
@@ -35,6 +35,7 @@
"react-native": "0.63.3",
"react-native-animatable": "^1.3.3",
"react-native-camera": "^3.44.1",
+ "react-native-circular-progress": "^1.3.7",
"react-native-confirmation-code-field": "^6.5.0",
"react-native-contacts": "^6.0.4",
"react-native-controlled-mentions": "^2.2.5",
@@ -61,7 +62,7 @@
"react-native-share": "^5.1.7",
"react-native-snap-carousel": "^3.9.1",
"react-native-splash-screen": "^3.2.0",
- "react-native-svg": "^12.1.0",
+ "react-native-svg": "^12.1.1",
"react-native-vector-icons": "^7.0.0",
"react-native-video": "^5.1.1",
"react-native-video-processing": "^2.0.0",
diff --git a/src/components/camera/GalleryIcon.tsx b/src/components/camera/GalleryIcon.tsx
index 8d396550..ca2d2559 100644
--- a/src/components/camera/GalleryIcon.tsx
+++ b/src/components/camera/GalleryIcon.tsx
@@ -1,12 +1,12 @@
import React from 'react';
import {Image, Text, TouchableOpacity, View} from 'react-native';
import {navigateToImagePicker} from '../../utils/camera';
-import {Image as ImageType} from 'react-native-image-crop-picker';
+import {ImageOrVideo} from 'react-native-image-crop-picker';
import {styles} from './styles';
interface GalleryIconProps {
mostRecentPhotoUri: string;
- callback: (pic: ImageType) => void;
+ callback: (media: ImageOrVideo) => void;
}
/*
diff --git a/src/components/moments/Moment.tsx b/src/components/moments/Moment.tsx
index 1e1cadce..73503c5e 100644
--- a/src/components/moments/Moment.tsx
+++ b/src/components/moments/Moment.tsx
@@ -1,6 +1,6 @@
import {useNavigation} from '@react-navigation/native';
import React from 'react';
-import {Alert, StyleProp, StyleSheet, View, ViewStyle} from 'react-native';
+import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native';
import {Text} from 'react-native-animatable';
import {ScrollView, TouchableOpacity} from 'react-native-gesture-handler';
import LinearGradient from 'react-native-linear-gradient';
@@ -12,8 +12,6 @@ import UpIcon from '../../assets/icons/up_icon.svg';
import {TAGG_LIGHT_BLUE} from '../../constants';
import {MomentType, ScreenType} from '../../types';
import {normalize, SCREEN_WIDTH} from '../../utils';
-import {navigateToVideoPicker} from '../../utils/camera';
-import ImagePicker from 'react-native-image-crop-picker';
import MomentTile from './MomentTile';
interface MomentProps {
@@ -43,17 +41,6 @@ const Moment: React.FC<MomentProps> = ({
}) => {
const navigation = useNavigation();
- const navigateToCaptionScreenForVideo = (uri: string) => {
- navigation.navigate('CaptionScreen', {
- screenType,
- title,
- media: {
- uri,
- isVideo: true,
- },
- });
- };
-
const navigateToCameraScreen = () => {
navigation.navigate('CameraScreen', {
title,
@@ -97,36 +84,6 @@ const Moment: React.FC<MomentProps> = ({
<PlusIcon
width={23}
height={23}
- onPress={() =>
- Alert.alert('Video Upload', 'pick one', [
- {
- text: 'gallery',
- onPress: () =>
- navigateToVideoPicker((vid) =>
- navigateToCaptionScreenForVideo(vid.path),
- ),
- },
- {
- text: 'camera (simulator will not work)',
- onPress: () =>
- ImagePicker.openCamera({
- mediaType: 'video',
- })
- .then((vid) => {
- if (vid.path) {
- navigateToCaptionScreenForVideo(vid.path);
- }
- })
- .catch((err) => console.error(err)),
- },
- ])
- }
- color={'black'}
- style={styles.horizontalMargin}
- />
- <PlusIcon
- width={23}
- height={23}
onPress={navigateToCameraScreen}
color={TAGG_LIGHT_BLUE}
style={styles.horizontalMargin}
diff --git a/src/screens/moments/CameraScreen.tsx b/src/screens/moments/CameraScreen.tsx
index 37b37264..75638c40 100644
--- a/src/screens/moments/CameraScreen.tsx
+++ b/src/screens/moments/CameraScreen.tsx
@@ -6,6 +6,7 @@ import {StackNavigationProp} from '@react-navigation/stack';
import React, {createRef, useCallback, useEffect, useState} from 'react';
import {StyleSheet, TouchableOpacity, View} from 'react-native';
import {CameraType, FlashMode, RNCamera} from 'react-native-camera';
+import {AnimatedCircularProgress} from 'react-native-circular-progress';
import CloseIcon from '../../assets/ionicons/close-outline.svg';
import {
FlashButton,
@@ -14,9 +15,10 @@ import {
SaveButton,
TaggSquareButton,
} from '../../components';
+import {TAGG_PURPLE} from '../../constants';
import {MainStackParams} from '../../routes';
import {HeaderHeight, normalize, SCREEN_WIDTH} from '../../utils';
-import {showGIFFailureAlert, takePicture} from '../../utils/camera';
+import {showGIFFailureAlert, takePicture, takeVideo} from '../../utils/camera';
type CameraScreenRouteProps = RouteProp<MainStackParams, 'CameraScreen'>;
export type CameraScreenNavigationProps = StackNavigationProp<
@@ -33,9 +35,10 @@ const CameraScreen: React.FC<CameraScreenProps> = ({route, navigation}) => {
const tabBarHeight = useBottomTabBarHeight();
const [cameraType, setCameraType] = useState<keyof CameraType>('front');
const [flashMode, setFlashMode] = useState<keyof FlashMode>('off');
- const [capturedImage, setCapturedImage] = useState<string>('');
+ const [mediaFromGallery, setMediaFromGallery] = useState<string>('');
const [mostRecentPhoto, setMostRecentPhoto] = useState<string>('');
const [showSaveButton, setShowSaveButton] = useState<boolean>(false);
+ const [isRecording, setIsRecording] = useState<boolean>(false);
useFocusEffect(
useCallback(() => {
@@ -64,7 +67,7 @@ const CameraScreen: React.FC<CameraScreenProps> = ({route, navigation}) => {
.catch((_err) =>
console.log('Unable to fetch preview photo for gallery'),
);
- }, [capturedImage]);
+ }, [mediaFromGallery]);
const navigateToCropper = (uri: string) => {
navigation.navigate('ZoomInCropper', {
@@ -77,13 +80,13 @@ const CameraScreen: React.FC<CameraScreenProps> = ({route, navigation}) => {
});
};
- const navigateToCaptionScreen = () => {
+ const navigateToCaptionScreen = (isVideo: boolean, uri: string) => {
navigation.navigate('CaptionScreen', {
screenType,
title,
media: {
- uri: capturedImage,
- isVideo: false,
+ uri,
+ isVideo,
},
});
};
@@ -96,7 +99,7 @@ const CameraScreen: React.FC<CameraScreenProps> = ({route, navigation}) => {
if (showSaveButton) {
cameraRef.current?.resumePreview();
setShowSaveButton(false);
- setCapturedImage('');
+ setMediaFromGallery('');
} else {
navigation.goBack();
}
@@ -116,24 +119,53 @@ const CameraScreen: React.FC<CameraScreenProps> = ({route, navigation}) => {
/>
<View style={[styles.bottomContainer, {bottom: tabBarHeight}]}>
{showSaveButton ? (
- <SaveButton capturedImageURI={capturedImage} />
+ <SaveButton capturedImageURI={mediaFromGallery} />
) : (
<FlipButton cameraType={cameraType} setCameraType={setCameraType} />
)}
<TouchableOpacity
- onPress={() =>
+ activeOpacity={1}
+ onLongPress={() => {
+ takeVideo(cameraRef, (vid) => {
+ navigateToCaptionScreen(true, vid.uri);
+ });
+ setIsRecording(true);
+ }}
+ onPressOut={async () => {
+ if (await cameraRef.current?.isRecording()) {
+ cameraRef.current?.stopRecording();
+ setIsRecording(false);
+ }
+ }}
+ onPress={() => {
takePicture(cameraRef, (pic) => {
setShowSaveButton(true);
- setCapturedImage(pic.uri);
- })
- }
- style={styles.captureButtonContainer}>
+ setMediaFromGallery(pic.uri);
+ });
+ }}
+ style={
+ isRecording
+ ? styles.captureButtonVideoContainer
+ : styles.captureButtonContainer
+ }>
<View style={styles.captureButton} />
</TouchableOpacity>
+ {isRecording && (
+ <AnimatedCircularProgress
+ size={95}
+ width={6}
+ fill={100}
+ rotation={0}
+ duration={60000 + 1000} // an extra second for UI to load
+ tintColor={TAGG_PURPLE}
+ style={styles.bottomContainer}
+ lineCap={'round'}
+ />
+ )}
<View style={styles.bottomRightContainer}>
- {capturedImage ? (
+ {mediaFromGallery ? (
<TaggSquareButton
- onPress={navigateToCaptionScreen}
+ onPress={() => navigateToCaptionScreen(false, mediaFromGallery)}
title={'Next'}
buttonStyle={'large'}
buttonColor={'blue'}
@@ -144,15 +176,20 @@ const CameraScreen: React.FC<CameraScreenProps> = ({route, navigation}) => {
) : (
<GalleryIcon
mostRecentPhotoUri={mostRecentPhoto}
- callback={(pic) => {
- const filename = pic.filename;
+ callback={(media) => {
+ const filename = media.filename;
if (
filename &&
(filename.endsWith('gif') || filename.endsWith('GIF'))
) {
- showGIFFailureAlert(() => navigateToCropper(pic.path));
+ showGIFFailureAlert(() => navigateToCropper(media.path));
} else {
- navigateToCropper(pic.path);
+ // is this a video?
+ if (media.duration !== null) {
+ navigateToCaptionScreen(true, media.path);
+ } else {
+ navigateToCropper(media.path);
+ }
}
}}
/>
@@ -173,6 +210,18 @@ const styles = StyleSheet.create({
flexDirection: 'column',
backgroundColor: 'black',
},
+ captureButtonVideoContainer: {
+ alignSelf: 'center',
+ backgroundColor: 'transparent',
+ borderRadius: 100,
+ borderWidth: 15,
+ borderColor: 'rgba(255,255,255,0.3)',
+ width: 93,
+ height: 93,
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
captureButtonContainer: {
alignSelf: 'center',
backgroundColor: 'transparent',
diff --git a/src/utils/camera.ts b/src/utils/camera.ts
index 52f29f97..85bf8d73 100644
--- a/src/utils/camera.ts
+++ b/src/utils/camera.ts
@@ -2,12 +2,18 @@ import CameraRoll from '@react-native-community/cameraroll';
import {RefObject} from 'react';
import {Alert} from 'react-native';
import {
+ RecordOptions,
+ RecordResponse,
RNCamera,
TakePictureOptions,
TakePictureResponse,
} from 'react-native-camera';
+<<<<<<< HEAD
import {ProcessingManager} from 'react-native-video-processing';
import ImagePicker, {Image, Video} from 'react-native-image-crop-picker';
+=======
+import ImagePicker, {ImageOrVideo, Video} from 'react-native-image-crop-picker';
+>>>>>>> master
import {ERROR_UPLOAD} from '../constants/strings';
/*
@@ -18,11 +24,11 @@ export const takePicture = (
callback: (pic: TakePictureResponse) => void,
) => {
if (cameraRef !== null) {
- cameraRef.current?.pausePreview();
const options: TakePictureOptions = {
forceUpOrientation: true,
orientation: 'portrait',
writeExif: false,
+ pauseAfterCapture: true,
};
cameraRef.current?.takePictureAsync(options).then((pic) => {
callback(pic);
@@ -30,13 +36,31 @@ export const takePicture = (
}
};
+export const takeVideo = (
+ cameraRef: RefObject<RNCamera>,
+ callback: (vid: RecordResponse) => void,
+) => {
+ if (cameraRef !== null) {
+ const options: RecordOptions = {
+ orientation: 'portrait',
+ maxDuration: 60,
+ quality: '1080p',
+ };
+ cameraRef.current?.recordAsync(options).then((vid) => {
+ callback(vid);
+ });
+ }
+};
+
export const saveImageToGallery = (capturedImageURI: string) => {
CameraRoll.save(capturedImageURI, {album: 'Recents', type: 'photo'})
.then((_res) => Alert.alert('Saved to device!'))
.catch((_err) => Alert.alert('Failed to save to device!'));
};
-export const navigateToImagePicker = (callback: (pic: Image) => void) => {
+export const navigateToImagePicker = (
+ callback: (media: ImageOrVideo) => void,
+) => {
ImagePicker.openPicker({
smartAlbums: [
'Favorites',
@@ -45,15 +69,12 @@ export const navigateToImagePicker = (callback: (pic: Image) => void) => {
'Screenshots',
'UserLibrary',
],
- mediaType: 'photo',
+ mediaType: 'any',
})
- .then((pic) => {
- console.log(ProcessingManager.compress);
- console.log('here');
- ProcessingManager.compress(pic, options.compress) // like VideoPlayer compress options
- .then((data: any) => console.log(data));
- console.log('over');
- callback(pic);
+ .then((media) => {
+ ProcessingManager.compress(media, options.compress) // like VideoPlayer compress options
+ .then((data: any) => console.log(data));
+ callback(media);
})
.catch((err) => {
if (err.code && err.code !== 'E_PICKER_CANCELLED') {
diff --git a/yarn.lock b/yarn.lock
index 3500a92e..cfcb5964 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6997,6 +6997,7 @@
"version" "25.5.0"
dependencies:
"@jest/types" "^25.5.0"
+<<<<<<< HEAD
"ansi-regex" "^5.0.0"
"ansi-styles" "^4.0.0"
"react-is" "^16.12.0"
@@ -7201,6 +7202,201 @@
"integrity" "sha512-HygYYmq8JYjk/YYiUwr/64qT64H2xlPBz0JnkGTQwvnnyXZrfkHFopw8rLWCupv3iLLPDzVohvPs0Z5HLdonSQ=="
"resolved" "https://registry.npmjs.org/react-native-elements/-/react-native-elements-2.3.2.tgz"
"version" "2.3.2"
+=======
+ ansi-regex "^5.0.0"
+ ansi-styles "^4.0.0"
+ react-is "^16.12.0"
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.1:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+progress@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise@^7.1.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+ integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
+ dependencies:
+ asap "~2.0.3"
+
+promise@^8.0.3:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e"
+ integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==
+ dependencies:
+ asap "~2.0.6"
+
+prompts@^2.0.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61"
+ integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.5"
+
+prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+psl@^1.1.28:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
+ integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+punycode@^2.1.0, punycode@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+q@^1.1.2:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+query-string@^6.13.6:
+ version "6.14.1"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a"
+ integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==
+ dependencies:
+ decode-uri-component "^0.2.0"
+ filter-obj "^1.1.0"
+ split-on-first "^1.0.0"
+ strict-uri-encode "^2.0.0"
+
+range-parser@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+react-addons-shallow-compare@15.6.2:
+ version "15.6.2"
+ resolved "https://registry.yarnpkg.com/react-addons-shallow-compare/-/react-addons-shallow-compare-15.6.2.tgz#198a00b91fc37623db64a28fd17b596ba362702f"
+ integrity sha1-GYoAuR/DdiPbZKKP0XtZa6NicC8=
+ dependencies:
+ fbjs "^0.8.4"
+ object-assign "^4.1.0"
+
+react-art@^17.0.2:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/react-art/-/react-art-17.0.2.tgz#ea1b972e0ee19c08f15e2d2cec522f0d992351cc"
+ integrity sha512-x+AhS0ex8B8kWh2GNyRK/IdX9V+xPax22WphtML8RBdu8CYd9dDOgP3ejQlPthpmwILJUaVf/+5a/qQ8X4I+yA==
+ dependencies:
+ art "^0.10.1"
+ create-react-class "^15.6.2"
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ scheduler "^0.20.2"
+
+react-devtools-core@^4.6.0:
+ version "4.13.5"
+ resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.13.5.tgz#803e9ae8f7ab46deaa04129b376f3f21b2eb6ef1"
+ integrity sha512-k+P5VSKM6P22Go9IQ8dJmjj9fbztvKt1iRDI/4wS5oTvd1EnytIJMYB59wZt+D3kgp64jklNX/MRmY42xAQ08g==
+ dependencies:
+ shell-quote "^1.6.1"
+ ws "^7"
+
+react-is@^16.12.0, react-is@^16.13.0, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-moment@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/react-moment/-/react-moment-1.1.1.tgz#5fe9fb257039590c804e2b3aedfc3ceb0a6ffb16"
+ integrity sha512-WjwvxBSnmLMRcU33do0KixDB+9vP3e84eCse+rd+HNklAMNWyRgZTDEQlay/qK6lcXFPRuEIASJTpEt6pyK7Ww==
+
+react-native-animatable@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/react-native-animatable/-/react-native-animatable-1.3.3.tgz#a13a4af8258e3bb14d0a9d839917e9bb9274ec8a"
+ integrity sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w==
+ dependencies:
+ prop-types "^15.7.2"
+
+react-native-camera@^3.44.1:
+ version "3.44.1"
+ resolved "https://registry.yarnpkg.com/react-native-camera/-/react-native-camera-3.44.1.tgz#60e7d60fe778c1fc59d0579b64c63c3c1a59865a"
+ integrity sha512-B95RL3laK2v8R7L/37v28MYcEcwsM/mS94h6EZuRMLH5HFolkAwh7zJo+UAn7FG9eFtAdBwIM6s9OqYudTVO4Q==
+ dependencies:
+ prop-types "^15.6.2"
+
+react-native-circular-progress@^1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/react-native-circular-progress/-/react-native-circular-progress-1.3.7.tgz#cc430fbc612bd01134a8fc9667be107591ae6959"
+ integrity sha512-Lpe4Sb0Sdfdxopl6sEc3ooKnwlK5j1nKGq5lgi9UKDFKO6iBAszeH+PiUt6acGSRbKMH1av+9G9ni9r/6T0+nQ==
+ dependencies:
+ prop-types "^15.7.2"
+
+react-native-confirmation-code-field@^6.5.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/react-native-confirmation-code-field/-/react-native-confirmation-code-field-6.7.0.tgz#81f5e646898addb3243cf89d41d884b0762ae962"
+ integrity sha512-dzw1Wh0Lz4myVUSyj7E4u/s5y5Sz5jS4B5w+oRlaeDVnUHer+HQSIzr11ckNBGr+WVCdGIYwxrYcpZ+Dr8ELfA==
+
+react-native-contacts@^6.0.4:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/react-native-contacts/-/react-native-contacts-6.0.5.tgz#26503c862a197eef790aee243053c0ceb23d7a0f"
+ integrity sha512-2BPW1bODJPnKbi/Wr2+m43hlrxcYrzMkWVAre3nMwqekSrsapMu/iSpQbxcB3Ia8cvBNH6Cu2tSqGpqY4Lc/lg==
+
+react-native-controlled-mentions@^2.2.5:
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/react-native-controlled-mentions/-/react-native-controlled-mentions-2.2.5.tgz#2eddcdf6b6a0ead0c448be4bb0239e10eca84a29"
+ integrity sha512-fNIQWZMPy9OvPKO3MeLX+J76Ld7OuvrrLn4xwXMOjsYjuEWtVBNc4t/ADxNc3woQCfuSEkST+SbafFpUwwLMIA==
+ dependencies:
+ diff "5.0.0"
+ string.prototype.matchall "4.0.3"
+
+react-native-date-picker@^3.2.5:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/react-native-date-picker/-/react-native-date-picker-3.3.2.tgz#1e08ae1793112510cd19eaca900b3be3b21c7339"
+ integrity sha512-iLlze62sBPwHXaBz69eXPy8cA5vXWV21UaDflQ6TECDhOOQ5HTeDXqSHrQFNPqsYwfmHADGiQdKRnzRy5st2VA==
+
+react-native-device-info@^7.3.1:
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/react-native-device-info/-/react-native-device-info-7.4.0.tgz#694deddfc6de0ff7268ff463d84693ee980c683c"
+ integrity sha512-n5mrUuwUcPXAspLZcAOE+Q087yq+Gfvo8+soZIg1l7rUZUrLNWlFxFgOo/DMPNZA5vcBSv1TSGFFdiAZVHalLw==
+
+react-native-document-picker@^5.0.3:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/react-native-document-picker/-/react-native-document-picker-5.2.0.tgz#1fb2185a56ba6b2509acdc418a8a75906c31e58e"
+ integrity sha512-zXK34hW6fM0gXoo6v7edZZxKvLT7DyjOdBXi7WrxbKqZchDokTEQ/tNTeZxky+7oI8sVz8T3uXBBEW0sp+VfXQ==
+
+react-native-elements@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/react-native-elements/-/react-native-elements-2.3.2.tgz#f6b974127a3484bb46ebd98fbc012fb2208decd7"
+ integrity sha512-HygYYmq8JYjk/YYiUwr/64qT64H2xlPBz0JnkGTQwvnnyXZrfkHFopw8rLWCupv3iLLPDzVohvPs0Z5HLdonSQ==
+>>>>>>> master
dependencies:
"@types/react-native-vector-icons" "^6.4.5"
"color" "^3.1.0"
@@ -7381,6 +7577,7 @@
dependencies:
"@svgr/core" "^4.3.3"
"@svgr/plugin-svgo" "^4.3.1"
+<<<<<<< HEAD
"path-dirname" "^1.0.2"
"semver" "^5.6.0"
@@ -7430,6 +7627,46 @@
"integrity" "sha512-71wq13uNo5W8QVQnFlnzZ3AD+XgUBYGhpsxysQFW/hJ8GAt/J5o+Bvhy81FXichp6IBDJDh/JgfHH2gNji8dFA=="
"resolved" "https://registry.npmjs.org/react-native/-/react-native-0.63.3.tgz"
"version" "0.63.3"
+=======
+ path-dirname "^1.0.2"
+ semver "^5.6.0"
+
+react-native-svg@^12.1.1:
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-12.1.1.tgz#5f292410b8bcc07bbc52b2da7ceb22caf5bcaaee"
+ integrity sha512-NIAJ8jCnXGCqGWXkkJ1GTzO4a3Md5at5sagYV8Vh4MXYnL4z5Rh428Wahjhh+LIjx40EE5xM5YtwyJBqOIba2Q==
+ dependencies:
+ css-select "^2.1.0"
+ css-tree "^1.0.0-alpha.39"
+
+react-native-vector-icons@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/react-native-vector-icons/-/react-native-vector-icons-7.1.0.tgz#145487d617b2a81d395d2cf64e6e065fcab3a454"
+ integrity sha512-V2a1zJ4i+kS8O4j183gIwX14St9AxxXabxwYpFBgRhvr2NDXyFcjHDEAgrOYYlt2W57e20aN1tBDU/I+wn9WtQ==
+ dependencies:
+ lodash.frompairs "^4.0.1"
+ lodash.isequal "^4.5.0"
+ lodash.isstring "^4.0.1"
+ lodash.omit "^4.5.0"
+ lodash.pick "^4.4.0"
+ lodash.template "^4.5.0"
+ prop-types "^15.7.2"
+ yargs "^15.0.2"
+
+react-native-video@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/react-native-video/-/react-native-video-5.1.1.tgz#89a7989efeb8d404611c06154d1da227a745d7d8"
+ integrity sha512-zee8gRUrjPWRoZSEBiMebClqu1iAuCQNLjzqpmXFrRWEoJj7azM3BPqLQWJgsnfLiYUYGySeApC/G60THM5+tw==
+ dependencies:
+ keymirror "^0.1.1"
+ prop-types "^15.7.2"
+ shaka-player "^2.5.9"
+
+react-native@0.63.3:
+ version "0.63.3"
+ resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.63.3.tgz#4a7f6540e049ff41810887bbd1125abc4672f3bf"
+ integrity sha512-71wq13uNo5W8QVQnFlnzZ3AD+XgUBYGhpsxysQFW/hJ8GAt/J5o+Bvhy81FXichp6IBDJDh/JgfHH2gNji8dFA==
+>>>>>>> master
dependencies:
"@babel/runtime" "^7.0.0"
"@react-native-community/cli" "^4.10.0"